[NTOSKRNL] Add back parentheses that got removed in r75605
[reactos.git] / ntoskrnl / include / internal / mm.h
index b9799c4..694c51f 100644 (file)
@@ -9,9 +9,6 @@ struct _EPROCESS;
 extern PMMSUPPORT MmKernelAddressSpace;
 extern PFN_COUNT MiFreeSwapPages;
 extern PFN_COUNT MiUsedSwapPages;
-extern SIZE_T MmTotalPagedPoolQuota;
-extern SIZE_T MmTotalNonPagedPoolQuota;
-extern PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress;
 extern PFN_COUNT MmNumberOfPhysicalPages;
 extern UCHAR MmDisablePagingExecutive;
 extern PFN_NUMBER MmLowestPhysicalPage;
@@ -19,9 +16,6 @@ extern PFN_NUMBER MmHighestPhysicalPage;
 extern PFN_NUMBER MmAvailablePages;
 extern PFN_NUMBER MmResidentAvailablePages;
 
-extern PMEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptor;
-extern MEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptorOrg;
-
 extern LIST_ENTRY MmLoadedUserImageList;
 
 extern KMUTANT MmSystemLoadLock;
@@ -43,8 +37,8 @@ extern SIZE_T MmPagedPoolCommit;
 extern SIZE_T MmPeakCommitment;
 extern SIZE_T MmtotalCommitLimitMaximum;
 
-extern PVOID MiDebugMapping;
-extern PMMPTE MmDebugPte;
+extern PVOID MiDebugMapping; // internal
+extern PMMPTE MmDebugPte; // internal
 
 struct _KTRAP_FRAME;
 struct _EPROCESS;
@@ -66,7 +60,7 @@ typedef ULONG_PTR SWAPENTRY;
 //
 #define MMDBG_COPY_MAX_SIZE         0x8
 
-#if defined(_X86_)
+#if defined(_X86_) // intenal for marea.c
 #define MI_STATIC_MEMORY_AREAS              (14)
 #else
 #define MI_STATIC_MEMORY_AREAS              (13)
@@ -77,19 +71,6 @@ typedef ULONG_PTR SWAPENTRY;
 #define MEMORY_AREA_OWNED_BY_ARM3           (15)
 #define MEMORY_AREA_STATIC                  (0x80000000)
 
-#define MM_PHYSICAL_PAGE_MPW_PENDING        (0x8)
-
-#define MM_CORE_DUMP_TYPE_NONE              (0x0)
-#define MM_CORE_DUMP_TYPE_MINIMAL           (0x1)
-#define MM_CORE_DUMP_TYPE_FULL              (0x2)
-
-/* Number of list heads to use */
-#define MI_FREE_POOL_LISTS 4
-
-
-/* Signature of free pool blocks */
-#define MM_FREE_POOL_TAG    'lprF'
-
 /* Although Microsoft says this isn't hardcoded anymore,
    they won't be able to change it. Stuff depends on it */
 #define MM_VIRTMEM_GRANULARITY              (64 * 1024)
@@ -119,32 +100,13 @@ typedef ULONG_PTR SWAPENTRY;
 #define SESSION_POOL_MASK                   32
 #define VERIFIER_POOL_MASK                  64
 
-#define MM_PAGED_POOL_SIZE                  (100*1024*1024)
-#define MM_NONPAGED_POOL_SIZE               (100*1024*1024)
-
-/*
- * Paged and non-paged pools are 8-byte aligned
- */
-#define MM_POOL_ALIGNMENT                   8
-
+// FIXME: use ALIGN_UP_BY
 #define MM_ROUND_UP(x,s)                    \
     ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
 
 #define MM_ROUND_DOWN(x,s)                  \
     ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
 
-#define PAGE_FLAGS_VALID_FROM_USER_MODE     \
-    (PAGE_READONLY | \
-    PAGE_READWRITE | \
-    PAGE_WRITECOPY | \
-    PAGE_EXECUTE | \
-    PAGE_EXECUTE_READ | \
-    PAGE_EXECUTE_READWRITE | \
-    PAGE_EXECUTE_WRITECOPY | \
-    PAGE_GUARD | \
-    PAGE_NOACCESS | \
-    PAGE_NOCACHE)
-
 #define PAGE_FLAGS_VALID_FOR_SECTION \
     (PAGE_READONLY | \
      PAGE_READWRITE | \
@@ -153,7 +115,8 @@ typedef ULONG_PTR SWAPENTRY;
      PAGE_EXECUTE_READ | \
      PAGE_EXECUTE_READWRITE | \
      PAGE_EXECUTE_WRITECOPY | \
-     PAGE_NOACCESS)
+     PAGE_NOACCESS | \
+     PAGE_NOCACHE)
 
 #define PAGE_IS_READABLE                    \
     (PAGE_READONLY | \
@@ -216,18 +179,9 @@ typedef struct _MM_SECTION_SEGMENT
 
 typedef struct _MM_IMAGE_SECTION_OBJECT
 {
-    ULONG_PTR ImageBase;
-    ULONG_PTR StackReserve;
-    ULONG_PTR StackCommit;
-    ULONG_PTR EntryPoint;
-    USHORT Subsystem;
-    USHORT ImageCharacteristics;
-    USHORT MinorSubsystemVersion;
-    USHORT MajorSubsystemVersion;
-    USHORT Machine;
-    BOOLEAN Executable;
+    SECTION_IMAGE_INFORMATION ImageInformation;
+    PVOID BasedAddress;
     ULONG NrSegments;
-    ULONG ImageSize;
     PMM_SECTION_SEGMENT Segments;
 } MM_IMAGE_SECTION_OBJECT, *PMM_IMAGE_SECTION_OBJECT;
 
@@ -246,18 +200,18 @@ typedef struct _ROS_SECTION_OBJECT
     };
 } ROS_SECTION_OBJECT, *PROS_SECTION_OBJECT;
 
+#define MA_GetStartingAddress(_MemoryArea) ((_MemoryArea)->VadNode.StartingVpn << PAGE_SHIFT)
+#define MA_GetEndingAddress(_MemoryArea) (((_MemoryArea)->VadNode.EndingVpn + 1) << PAGE_SHIFT)
+
 typedef struct _MEMORY_AREA
 {
-    PVOID StartingAddress;
-    PVOID EndingAddress;
-    struct _MEMORY_AREA *Parent;
-    struct _MEMORY_AREA *LeftChild;
-    struct _MEMORY_AREA *RightChild;
+    MMVAD VadNode;
+
     ULONG Type;
     ULONG Protect;
     ULONG Flags;
     BOOLEAN DeleteInProgress;
-    ULONG PageOpCount;
+    ULONG Magic;
     PVOID Vad;
     union
     {
@@ -340,18 +294,22 @@ typedef struct _MMPFNENTRY
     USHORT RemovalRequested:1;
     USHORT CacheAttribute:2;
     USHORT Rom:1;
-    USHORT ParityError:1;                    // HasRmap
+    USHORT ParityError:1;
 } MMPFNENTRY;
 
+// Mm internal
 typedef struct _MMPFN
 {
     union
     {
         PFN_NUMBER Flink;
-        ULONG WsIndex;                       // SavedSwapEntry
+        ULONG WsIndex;
         PKEVENT Event;
         NTSTATUS ReadStatus;
         SINGLE_LIST_ENTRY NextStackPfn;
+
+        // HACK for ROSPFN
+        SWAPENTRY SwapEntry;
     } u1;
     PMMPTE PteAddress;
     union
@@ -363,7 +321,7 @@ typedef struct _MMPFN
     {
         struct
         {
-            USHORT ReferenceCount;           // ReferenceCount
+            USHORT ReferenceCount;
             MMPFNENTRY e1;
         };
         struct
@@ -375,7 +333,10 @@ typedef struct _MMPFN
     union
     {
         MMPTE OriginalPte;
-        LONG AweReferenceCount;              // RmapListHead
+        LONG AweReferenceCount;
+
+        // HACK for ROSPFN
+        PMM_RMAP_ENTRY RmapListHead;
     };
     union
     {
@@ -394,6 +355,9 @@ typedef struct _MMPFN
     MI_PFN_USAGES PfnUsage;
     CHAR ProcessName[16];
 #endif
+
+    // HACK until WS lists are supported
+    MMWSLE Wsle;
 } MMPFN, *PMMPFN;
 
 extern PMMPFN MmPfnDatabase;
@@ -427,6 +391,7 @@ typedef struct _MM_REGION
     LIST_ENTRY RegionListEntry;
 } MM_REGION, *PMM_REGION;
 
+// Mm internal
 /* Entry describing free pool memory */
 typedef struct _MMFREE_POOL_ENTRY
 {
@@ -502,6 +467,12 @@ MmGetSessionId(
     IN PEPROCESS Process
 );
 
+ULONG
+NTAPI
+MmGetSessionIdEx(
+    IN PEPROCESS Process
+);
+
 /* marea.c *******************************************************************/
 
 NTSTATUS
@@ -513,9 +484,8 @@ MmCreateMemoryArea(
     SIZE_T Length,
     ULONG Protection,
     PMEMORY_AREA *Result,
-    BOOLEAN FixedAddress,
     ULONG AllocationFlags,
-    PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
+    ULONG AllocationGranularity
 );
 
 PMEMORY_AREA
@@ -525,13 +495,6 @@ MmLocateMemoryAreaByAddress(
     PVOID Address
 );
 
-ULONG_PTR
-NTAPI
-MmFindGapAtAddress(
-    PMMSUPPORT AddressSpace,
-    PVOID Address
-);
-
 NTSTATUS
 NTAPI
 MmFreeMemoryArea(
@@ -541,18 +504,11 @@ MmFreeMemoryArea(
     PVOID FreePageContext
 );
 
-NTSTATUS
-NTAPI
-MmFreeMemoryAreaByPtr(
-    PMMSUPPORT AddressSpace,
-    PVOID BaseAddress,
-    PMM_FREE_PAGE_FUNC FreePage,
-    PVOID FreePageContext
-);
-
 VOID
 NTAPI
-MmDumpMemoryAreas(PMMSUPPORT AddressSpace);
+MiRosCleanupMemoryArea(
+    PEPROCESS Process,
+    PMMVAD Vad);
 
 PMEMORY_AREA
 NTAPI
@@ -573,29 +529,15 @@ MmFindGap(
 
 VOID
 NTAPI
-MmReleaseMemoryAreaIfDecommitted(
-    struct _EPROCESS *Process,
-    PMMSUPPORT AddressSpace,
-    PVOID BaseAddress
-);
+MiRosCheckMemoryAreas(
+   PMMSUPPORT AddressSpace);
 
 VOID
 NTAPI
-MmMapMemoryArea(PVOID BaseAddress,
-                SIZE_T Length,
-                ULONG Consumer,
-                ULONG Protection);
+MiCheckAllProcessMemoryAreas(VOID);
 
 /* npool.c *******************************************************************/
 
-VOID
-NTAPI
-MiDebugDumpNonPagedPool(BOOLEAN NewOnly);
-
-VOID
-NTAPI
-MiDebugDumpNonPagedPoolStats(BOOLEAN NewOnly);
-
 VOID
 NTAPI
 MiInitializeNonPagedPool(VOID);
@@ -619,71 +561,8 @@ MiFreePoolPages(
     IN PVOID StartingAddress
 );
 
-PVOID
-NTAPI
-MmGetMdlPageAddress(
-    PMDL Mdl,
-    PVOID Offset
-);
-
 /* pool.c *******************************************************************/
 
-PVOID
-NTAPI
-ExAllocateNonPagedPoolWithTag(
-    POOL_TYPE type,
-    ULONG size,
-    ULONG Tag,
-    PVOID Caller
-);
-
-PVOID
-NTAPI
-ExAllocatePagedPoolWithTag(
-    POOL_TYPE Type,
-    ULONG size,
-    ULONG Tag
-);
-
-VOID
-NTAPI
-ExFreeNonPagedPool(PVOID block);
-
-VOID
-NTAPI
-ExFreePagedPool(IN PVOID Block);
-
-BOOLEAN
-NTAPI
-ExpIsPoolTagDebuggable(ULONG Tag);
-
-PVOID
-NTAPI
-ExpAllocateDebugPool(
-    POOL_TYPE Type,
-    ULONG Size,
-    ULONG Tag,
-    PVOID Caller,
-    BOOLEAN EndOfPage
-);
-
-VOID
-NTAPI
-ExpFreeDebugPool(PVOID Block, BOOLEAN PagedPool);
-
-VOID
-NTAPI
-MmInitializePagedPool(VOID);
-
-PVOID
-NTAPI
-MiAllocateSpecialPool(
-    IN POOL_TYPE PoolType,
-    IN SIZE_T NumberOfBytes,
-    IN ULONG Tag,
-    IN ULONG Underrun
-);
-
 BOOLEAN
 NTAPI
 MiRaisePoolQuota(
@@ -703,10 +582,6 @@ MmBuildMdlFromPages(
 
 /* mminit.c ******************************************************************/
 
-VOID
-NTAPI
-MiShutdownMemoryManager(VOID);
-
 VOID
 NTAPI
 MmInit1(
@@ -718,13 +593,6 @@ NTAPI
 MmInitSystem(IN ULONG Phase,
              IN PLOADER_PARAMETER_BLOCK LoaderBlock);
 
-VOID
-NTAPI
-MiFreeInitMemory(VOID);
-
-VOID
-NTAPI
-MmInitializeMdlImplementation(VOID);
 
 /* pagefile.c ****************************************************************/
 
@@ -732,10 +600,6 @@ SWAPENTRY
 NTAPI
 MmAllocSwapPage(VOID);
 
-VOID
-NTAPI
-MmDereserveSwapPages(ULONG Nr);
-
 VOID
 NTAPI
 MmFreeSwapPage(SWAPENTRY Entry);
@@ -755,10 +619,6 @@ MmReadFromSwapPage(
     PFN_NUMBER Page
 );
 
-BOOLEAN
-NTAPI
-MmReserveSwapPages(ULONG Nr);
-
 NTSTATUS
 NTAPI
 MmWriteToSwapPage(
@@ -766,25 +626,17 @@ MmWriteToSwapPage(
     PFN_NUMBER Page
 );
 
-NTSTATUS
-NTAPI
-MmDumpToPagingFile(
-    ULONG BugCode,
-    ULONG BugCodeParameter1,
-    ULONG BugCodeParameter2,
-    ULONG BugCodeParameter3,
-    ULONG BugCodeParameter4,
-    struct _KTRAP_FRAME* TrapFrame
-);
-
-BOOLEAN
-NTAPI
-MmIsAvailableSwapPage(VOID);
-
 VOID
 NTAPI
 MmShowOutOfSpaceMessagePagingFile(VOID);
 
+NTSTATUS
+NTAPI
+MiReadPageFile(
+    _In_ PFN_NUMBER Page,
+    _In_ ULONG PageFileIndex,
+    _In_ ULONG_PTR PageFileOffset);
+
 /* process.c ****************************************************************/
 
 NTSTATUS
@@ -856,7 +708,7 @@ MmPageFault(
 
 VOID
 NTAPI
-MiInitializeSpecialPool();
+MiInitializeSpecialPool(VOID);
 
 BOOLEAN
 NTAPI
@@ -869,6 +721,11 @@ NTAPI
 MmIsSpecialPoolAddress(
     IN PVOID P);
 
+BOOLEAN
+NTAPI
+MmIsSpecialPoolAddressFree(
+    IN PVOID P);
+
 PVOID
 NTAPI
 MmAllocateSpecialPool(
@@ -893,75 +750,8 @@ MmAccessFault(
     IN PVOID TrapInformation
 );
 
-/* anonmem.c *****************************************************************/
-
-NTSTATUS
-NTAPI
-MmNotPresentFaultVirtualMemory(
-    PMMSUPPORT AddressSpace,
-    MEMORY_AREA* MemoryArea,
-    PVOID Address
-);
-
-NTSTATUS
-NTAPI
-MmPageOutVirtualMemory(
-    PMMSUPPORT AddressSpace,
-    PMEMORY_AREA MemoryArea,
-    PVOID Address,
-    PFN_NUMBER Page
-);
-
-NTSTATUS
-NTAPI
-MmQueryAnonMem(
-    PMEMORY_AREA MemoryArea,
-    PVOID Address,
-    PMEMORY_BASIC_INFORMATION Info,
-    PSIZE_T ResultLength
-);
-
-VOID
-NTAPI
-MmFreeVirtualMemory(
-    struct _EPROCESS* Process,
-    PMEMORY_AREA MemoryArea
-);
-
-NTSTATUS
-NTAPI
-MmProtectAnonMem(
-    PMMSUPPORT AddressSpace,
-    PMEMORY_AREA MemoryArea,
-    PVOID BaseAddress,
-    SIZE_T Length,
-    ULONG Protect,
-    PULONG OldProtect
-);
-
-NTSTATUS
-NTAPI
-MmWritePageVirtualMemory(
-    PMMSUPPORT AddressSpace,
-    PMEMORY_AREA MArea,
-    PVOID Address,
-    PFN_NUMBER Page
-);
-
 /* kmap.c ********************************************************************/
 
-PVOID
-NTAPI
-ExAllocatePage(VOID);
-
-VOID
-NTAPI
-ExUnmapPage(PVOID Addr);
-
-PVOID
-NTAPI
-ExAllocatePageWithPhysPage(PFN_NUMBER Page);
-
 NTSTATUS
 NTAPI
 MiCopyFromUserPage(
@@ -969,16 +759,6 @@ MiCopyFromUserPage(
     PFN_NUMBER OldPage
 );
 
-NTSTATUS
-NTAPI
-MiZeroPage(PFN_NUMBER Page);
-
-/* memsafe.s *****************************************************************/
-
-PVOID
-FASTCALL
-MmSafeReadPtr(PVOID Source);
-
 /* process.c *****************************************************************/
 
 PVOID
@@ -1134,40 +914,12 @@ VOID
 NTAPI
 MmRemoveLRUUserPage(PFN_NUMBER Page);
 
-VOID
-NTAPI
-MmLockPage(PFN_NUMBER Page);
-
-VOID
-NTAPI
-MmUnlockPage(PFN_NUMBER Page);
-
-ULONG
-NTAPI
-MmGetLockCountPage(PFN_NUMBER Page);
-
-VOID
-NTAPI
-MmInitializePageList(
-    VOID
-);
-
 VOID
 NTAPI
 MmDumpArmPfnDatabase(
    IN BOOLEAN StatusOnly
 );
 
-PFN_NUMBER
-NTAPI
-MmGetContinuousPages(
-    ULONG NumberOfBytes,
-    PHYSICAL_ADDRESS LowestAcceptableAddress,
-    PHYSICAL_ADDRESS HighestAcceptableAddress,
-    PHYSICAL_ADDRESS BoundaryAddressMultiple,
-    BOOLEAN ZeroPages
-);
-
 VOID
 NTAPI
 MmZeroPageThread(
@@ -1216,22 +968,6 @@ MmCreateHyperspaceMapping(IN PFN_NUMBER Page)
 
 /* i386/page.c *********************************************************/
 
-NTSTATUS
-NTAPI
-MmCreateVirtualMappingForKernel(
-    PVOID Address,
-    ULONG flProtect,
-    PPFN_NUMBER Pages,
-    ULONG PageCount
-);
-
-NTSTATUS
-NTAPI
-MmCommitPagedPoolAddress(
-    PVOID Address,
-    BOOLEAN Locked
-);
-
 NTSTATUS
 NTAPI
 MmCreateVirtualMapping(
@@ -1284,27 +1020,6 @@ VOID
 NTAPI
 MmInitGlobalKernelPageDirectory(VOID);
 
-VOID
-NTAPI
-MmDisableVirtualMapping(
-    struct _EPROCESS *Process,
-    PVOID Address,
-    BOOLEAN* WasDirty,
-    PPFN_NUMBER Page
-);
-
-VOID
-NTAPI
-MmEnableVirtualMapping(
-    struct _EPROCESS *Process,
-    PVOID Address
-);
-
-VOID
-NTAPI
-MmRawDeleteVirtualMapping(PVOID Address);
-
-
 VOID
 NTAPI
 MmGetPageFileMapping(
@@ -1335,13 +1050,6 @@ MmIsPageSwapEntry(
     PVOID Address
 );
 
-VOID
-NTAPI
-MmTransferOwnershipPage(
-    PFN_NUMBER Page,
-    ULONG NewConsumer
-);
-
 VOID
 NTAPI
 MmSetDirtyPage(
@@ -1355,16 +1063,6 @@ MmAllocPage(
     ULONG Consumer
 );
 
-LONG
-NTAPI
-MmAllocPagesSpecifyRange(
-    ULONG Consumer,
-    PHYSICAL_ADDRESS LowestAddress,
-    PHYSICAL_ADDRESS HighestAddress,
-    ULONG NumberOfPages,
-    PPFN_NUMBER Pages
-);
-
 VOID
 NTAPI
 MmDereferencePage(PFN_NUMBER Page);
@@ -1398,10 +1096,6 @@ MmSetCleanPage(
     PVOID Address
 );
 
-NTSTATUS
-NTAPI
-MmCreatePageTable(PVOID PAddress);
-
 VOID
 NTAPI
 MmDeletePageTable(
@@ -1438,10 +1132,6 @@ MmInitializeHandBuiltProcess2(
     IN PEPROCESS Process
 );
 
-NTSTATUS
-NTAPI
-MmReleaseMmInfo(struct _EPROCESS *Process);
-
 NTSTATUS
 NTAPI
 MmSetExecuteOptions(IN ULONG ExecuteOptions);
@@ -1450,16 +1140,11 @@ NTSTATUS
 NTAPI
 MmGetExecuteOptions(IN PULONG ExecuteOptions);
 
-VOID
-NTAPI
-MmDeleteProcessPageDirectory(struct _EPROCESS *Process);
-
 VOID
 NTAPI
 MmDeleteVirtualMapping(
     struct _EPROCESS *Process,
     PVOID Address,
-    BOOLEAN FreePage,
     BOOLEAN* WasDirty,
     PPFN_NUMBER Page
 );
@@ -1471,30 +1156,6 @@ MmIsDirtyPage(
     PVOID Address
 );
 
-VOID
-NTAPI
-MmMarkPageMapped(PFN_NUMBER Page);
-
-VOID
-NTAPI
-MmMarkPageUnmapped(PFN_NUMBER Page);
-
-VOID
-NTAPI
-MmUpdatePageDir(
-    struct _EPROCESS *Process,
-    PVOID Address,
-    ULONG Size
-);
-
-VOID
-NTAPI
-MiInitPageDirectoryMap(VOID);
-
-ULONG
-NTAPI
-MiGetUserPageDirectoryCount(VOID);
-
 /* wset.c ********************************************************************/
 
 NTSTATUS
@@ -1539,6 +1200,12 @@ MmFindRegion(
 
 /* section.c *****************************************************************/
 
+VOID
+NTAPI
+MmGetImageInformation(
+    OUT PSECTION_IMAGE_INFORMATION ImageInformation
+);
+
 PFILE_OBJECT
 NTAPI
 MmGetFileObjectForSection(
@@ -1558,13 +1225,6 @@ MmGetFileNameForSection(
     OUT POBJECT_NAME_INFORMATION *ModuleName
 );
 
-PVOID
-NTAPI
-MmAllocateSection(
-    IN SIZE_T Length,
-    PVOID BaseAddress
-);
-
 NTSTATUS
 NTAPI
 MmQuerySectionView(
@@ -1623,41 +1283,6 @@ VOID
 NTAPI
 MmFreeSectionSegments(PFILE_OBJECT FileObject);
 
-/* mpw.c *********************************************************************/
-
-NTSTATUS
-NTAPI
-MmInitMpwThread(VOID);
-
-NTSTATUS
-NTAPI
-MmInitBsmThread(VOID);
-
-/* pager.c *******************************************************************/
-
-BOOLEAN
-NTAPI
-MiIsPagerThread(VOID);
-
-VOID
-NTAPI
-MiStartPagerThread(VOID);
-
-VOID
-NTAPI
-MiStopPagerThread(VOID);
-
-NTSTATUS
-FASTCALL
-MiQueryVirtualMemory(
-    IN HANDLE ProcessHandle,
-    IN PVOID Address,
-    IN MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass,
-    OUT PVOID VirtualMemoryInformation,
-    IN SIZE_T Length,
-    OUT PSIZE_T ResultLength
-);
-
 /* sysldr.c ******************************************************************/
 
 VOID
@@ -1748,3 +1373,76 @@ MmGetKernelAddressSpace(VOID)
 {
     return MmKernelAddressSpace;
 }
+
+
+/* expool.c ******************************************************************/
+
+VOID
+NTAPI
+ExpCheckPoolAllocation(
+    PVOID P,
+    POOL_TYPE PoolType,
+    ULONG Tag);
+
+VOID
+NTAPI
+ExReturnPoolQuota(
+    IN PVOID P);
+
+
+/* mmsup.c *****************************************************************/
+
+NTSTATUS
+NTAPI
+MmAdjustWorkingSetSize(
+    IN SIZE_T WorkingSetMinimumInBytes,
+    IN SIZE_T WorkingSetMaximumInBytes,
+    IN ULONG SystemCache,
+    IN BOOLEAN IncreaseOkay);
+
+
+/* session.c *****************************************************************/
+
+_IRQL_requires_max_(APC_LEVEL)
+NTSTATUS
+NTAPI
+MmAttachSession(
+    _Inout_ PVOID SessionEntry,
+    _Out_ PKAPC_STATE ApcState);
+
+_IRQL_requires_max_(APC_LEVEL)
+VOID
+NTAPI
+MmDetachSession(
+    _Inout_ PVOID SessionEntry,
+    _Out_ PKAPC_STATE ApcState);
+
+VOID
+NTAPI
+MmQuitNextSession(
+    _Inout_ PVOID SessionEntry);
+
+PVOID
+NTAPI
+MmGetSessionById(
+    _In_ ULONG SessionId);
+
+_IRQL_requires_max_(APC_LEVEL)
+VOID
+NTAPI
+MmSetSessionLocaleId(
+    _In_ LCID LocaleId);
+
+
+/* virtual.c *****************************************************************/
+
+NTSTATUS
+NTAPI
+MmCopyVirtualMemory(IN PEPROCESS SourceProcess,
+                    IN PVOID SourceAddress,
+                    IN PEPROCESS TargetProcess,
+                    OUT PVOID TargetAddress,
+                    IN SIZE_T BufferSize,
+                    IN KPROCESSOR_MODE PreviousMode,
+                    OUT PSIZE_T ReturnSize);
+