ULONG Attributes;
ULONG Length;
ULONG RawLength;
- KMUTEX Lock;
+ FAST_MUTEX Lock;
ULONG ReferenceCount;
SECTION_PAGE_DIRECTORY PageDirectory;
ULONG Flags;
BOOLEAN WriteCopy;
} MM_SECTION_SEGMENT, *PMM_SECTION_SEGMENT;
-typedef struct
+typedef struct _MM_IMAGE_SECTION_OBJECT
{
- CSHORT Type;
- CSHORT Size;
- LARGE_INTEGER MaximumSize;
- ULONG SectionPageProtection;
- ULONG AllocationAttributes;
- PFILE_OBJECT FileObject;
- LIST_ENTRY ViewListHead;
- KSPIN_LOCK ViewListLock;
- KMUTEX Lock;
- ULONG NrSegments;
- PMM_SECTION_SEGMENT Segments;
PVOID ImageBase;
PVOID EntryPoint;
ULONG StackReserve;
ULONG ImageCharacteristics;
USHORT Machine;
BOOLEAN Executable;
-} SECTION_OBJECT, *PSECTION_OBJECT;
+ ULONG NrSegments;
+ MM_SECTION_SEGMENT Segments[0];
+} MM_IMAGE_SECTION_OBJECT, *PMM_IMAGE_SECTION_OBJECT;
+
+typedef struct _SECTION_OBJECT
+{
+ CSHORT Type;
+ CSHORT Size;
+ LARGE_INTEGER MaximumSize;
+ ULONG SectionPageProtection;
+ ULONG AllocationAttributes;
+ PFILE_OBJECT FileObject;
+ LIST_ENTRY ViewListHead;
+ KSPIN_LOCK ViewListLock;
+ union
+ {
+ PMM_IMAGE_SECTION_OBJECT ImageSection;
+ PMM_SECTION_SEGMENT Segment;
+ };
+} SECTION_OBJECT;
+
+#ifndef __USE_W32API
+
+typedef struct _SECTION_OBJECT *PSECTION_OBJECT;
+
+#endif /* __USE_W32API */
typedef struct
{
} MADDRESS_SPACE, *PMADDRESS_SPACE;
+#ifndef __USE_W32API
/* VARIABLES */
extern PVOID MmSystemRangeStart;
+#endif /* __USE_W32API */
+
/* FUNCTIONS */
MEMORY_AREA* MmOpenMemoryAreaByAddress(PMADDRESS_SPACE AddressSpace,
PVOID Address);
NTSTATUS MmInitMemoryAreas(VOID);
-VOID ExInitNonPagedPool(ULONG BaseAddress);
+VOID MiInitializeNonPagedPool(VOID);
NTSTATUS MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace,
PVOID BaseAddress,
ULONG Length,
NTSTATUS MmUnlockMemoryArea(MEMORY_AREA* MemoryArea);
NTSTATUS MmInitSectionImplementation(VOID);
+#ifndef __USE_W32API
#define MM_LOWEST_USER_ADDRESS (4096)
+#endif
PMEMORY_AREA MmSplitMemoryArea(struct _EPROCESS* Process,
PMADDRESS_SPACE AddressSpace,
BOOL FreePage,
BOOL* WasDirty,
PHYSICAL_ADDRESS* PhysicalPage);
-VOID MmUpdatePageDir(PULONG LocalPageDir, PVOID Address);
+VOID MmUpdateStackPageDir(PULONG LocalPageDir, struct _KTHREAD* KThread);
#define MM_PAGE_CLEAN (0)
#define MM_PAGE_DIRTY (1)
ULONG LastKernelPhysAddress,
ULONG LastKernelAddress,
PADDRESS_RANGE BIOSMemoryMap,
- ULONG AddressRangeCount);
+ ULONG AddressRangeCount,
+ ULONG MaxMemInMeg);
VOID MmInit2(VOID);
VOID MmInit3(VOID);
+VOID MiFreeInitMemory(VOID);
NTSTATUS MmInitPagerThread(VOID);
+NTSTATUS MmInitZeroPageThread(VOID);
-VOID MmInitKernelMap(PVOID BaseAddress);
+VOID MiInitKernelMap(VOID);
NTSTATUS MmCreatePageTable(PVOID PAddress);
typedef struct
VOID MmSetCleanPage(struct _EPROCESS* Process, PVOID Address);
VOID MmLockPage(PHYSICAL_ADDRESS PhysicalPage);
VOID MmUnlockPage(PHYSICAL_ADDRESS PhysicalPage);
+ULONG MmGetLockCountPage(PHYSICAL_ADDRESS PhysicalPage);
-NTSTATUS MmSafeCopyFromUser(PVOID Dest, PVOID Src, ULONG Count);
-NTSTATUS MmSafeCopyToUser(PVOID Dest, PVOID Src, ULONG Count);
+NTSTATUS MmSafeCopyFromUser(PVOID Dest, const VOID *Src, ULONG Count);
+NTSTATUS MmSafeCopyToUser(PVOID Dest, const VOID *Src, ULONG Count);
NTSTATUS
MmCreatePhysicalMemorySection(VOID);
PHYSICAL_ADDRESS
VOID
MmFreeSectionSegments(PFILE_OBJECT FileObject);
-typedef struct _MM_IMAGE_SECTION_OBJECT
-{
- ULONG NrSegments;
- MM_SECTION_SEGMENT Segments[0];
-} MM_IMAGE_SECTION_OBJECT, *PMM_IMAGE_SECTION_OBJECT;
+
VOID
MmFreeVirtualMemory(struct _EPROCESS* Process, PMEMORY_AREA MemoryArea);
NTSTATUS (*Trim)(ULONG Target, ULONG Priority,
PULONG NrFreed));
VOID
-MmInitializeBalancer(ULONG NrAvailablePages);
+MmInitializeBalancer(ULONG NrAvailablePages, ULONG NrSystemPages);
NTSTATUS
MmReleasePageMemoryConsumer(ULONG Consumer, PHYSICAL_ADDRESS Page);
NTSTATUS
MmIsAvailableSwapPage(VOID);
VOID
MmShowOutOfSpaceMessagePagingFile(VOID);
+VOID
+MmRebalanceMemoryConsumers(VOID);
+BOOLEAN
+MiIsPagerThread(VOID);
+VOID
+MiStartPagerThread(VOID);
+VOID
+MmSetLRULastPage(PHYSICAL_ADDRESS PhysicalAddress);
+VOID
+MmRawDeleteVirtualMapping(PVOID Address);
+VOID
+MiStopPagerThread(VOID);
+NTSTATUS
+MmCreateVirtualMappingDump(PVOID Address,
+ ULONG flProtect,
+ PHYSICAL_ADDRESS PhysicalAddress);
#endif