1 #ifndef __INCLUDE_INTERNAL_MM_H
2 #define __INCLUDE_INTERNAL_MM_H
4 #include <internal/arch/mm.h>
6 /* TYPES *********************************************************************/
10 extern ULONG MiFreeSwapPages
;
11 extern ULONG MiUsedSwapPages
;
12 extern ULONG MmPagedPoolSize
;
13 extern ULONG MmTotalPagedPoolQuota
;
14 extern ULONG MmTotalNonPagedPoolQuota
;
15 extern PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress
;
16 extern ULONG MmNumberOfPhysicalPages
;
18 extern PVOID MmPagedPoolBase
;
19 extern ULONG MmPagedPoolSize
;
21 extern PMEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptor
;
22 extern ULONG MmHighestPhysicalPage
;
23 extern PVOID MmPfnDatabase
;
27 struct _MM_RMAP_ENTRY
;
29 typedef ULONG SWAPENTRY
;
30 typedef ULONG PFN_TYPE
, *PPFN_TYPE
;
32 #define MEMORY_AREA_INVALID (0)
33 #define MEMORY_AREA_SECTION_VIEW (1)
34 #define MEMORY_AREA_CONTINUOUS_MEMORY (2)
35 #define MEMORY_AREA_NO_CACHE (3)
36 #define MEMORY_AREA_IO_MAPPING (4)
37 #define MEMORY_AREA_SYSTEM (5)
38 #define MEMORY_AREA_MDL_MAPPING (7)
39 #define MEMORY_AREA_VIRTUAL_MEMORY (8)
40 #define MEMORY_AREA_CACHE_SEGMENT (9)
41 #define MEMORY_AREA_SHARED_DATA (10)
42 #define MEMORY_AREA_KERNEL_STACK (11)
43 #define MEMORY_AREA_PAGED_POOL (12)
44 #define MEMORY_AREA_NO_ACCESS (13)
45 #define MEMORY_AREA_PEB_OR_TEB (14)
47 #define MM_PHYSICAL_PAGE_MPW_PENDING (0x8)
49 #define MM_CORE_DUMP_TYPE_NONE (0x0)
50 #define MM_CORE_DUMP_TYPE_MINIMAL (0x1)
51 #define MM_CORE_DUMP_TYPE_FULL (0x2)
53 #define MM_PAGEOP_PAGEIN (1)
54 #define MM_PAGEOP_PAGEOUT (2)
55 #define MM_PAGEOP_PAGESYNCH (3)
56 #define MM_PAGEOP_ACCESSFAULT (4)
58 #define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) \
61 #define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \
62 ((((x)) % (4*1024*1024)) / (4*1024))
64 #define NR_SECTION_PAGE_TABLES 1024
65 #define NR_SECTION_PAGE_ENTRIES 1024
67 #define TEB_BASE 0x7FFDE000
69 /* Although Microsoft says this isn't hardcoded anymore,
70 they won't be able to change it. Stuff depends on it */
71 #define MM_VIRTMEM_GRANULARITY (64 * 1024)
73 #define STATUS_MM_RESTART_OPERATION ((NTSTATUS)0xD0000001)
76 * Additional flags for protection attributes
78 #define PAGE_WRITETHROUGH (1024)
79 #define PAGE_SYSTEM (2048)
81 #define SEC_PHYSICALMEMORY (0x80000000)
83 #define MM_PAGEFILE_SEGMENT (0x1)
84 #define MM_DATAFILE_SEGMENT (0x2)
90 #define MC_MAXIMUM (4)
92 #define PAGED_POOL_MASK 1
93 #define MUST_SUCCEED_POOL_MASK 2
94 #define CACHE_ALIGNED_POOL_MASK 4
95 #define QUOTA_POOL_MASK 8
96 #define SESSION_POOL_MASK 32
97 #define VERIFIER_POOL_MASK 64
99 #define MM_PAGED_POOL_SIZE (100*1024*1024)
100 #define MM_NONPAGED_POOL_SIZE (100*1024*1024)
103 * Paged and non-paged pools are 8-byte aligned
105 #define MM_POOL_ALIGNMENT 8
108 * Maximum size of the kmalloc area (this is totally arbitary)
110 #define MM_KERNEL_MAP_SIZE (16*1024*1024)
111 #define MM_KERNEL_MAP_BASE (0xf0c00000)
114 * FIXME - different architectures have different cache line sizes...
116 #define MM_CACHE_LINE_SIZE 32
118 #define MM_ROUND_UP(x,s) \
119 ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
121 #define MM_ROUND_DOWN(x,s) \
122 ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
124 #define PAGE_FLAGS_VALID_FROM_USER_MODE \
129 PAGE_EXECUTE_READ | \
130 PAGE_EXECUTE_READWRITE | \
131 PAGE_EXECUTE_WRITECOPY | \
136 #define PAGE_IS_READABLE \
140 PAGE_EXECUTE_READ | \
141 PAGE_EXECUTE_READWRITE | \
142 PAGE_EXECUTE_WRITECOPY)
144 #define PAGE_IS_WRITABLE \
147 PAGE_EXECUTE_READWRITE | \
148 PAGE_EXECUTE_WRITECOPY)
150 #define PAGE_IS_EXECUTABLE \
152 PAGE_EXECUTE_READ | \
153 PAGE_EXECUTE_READWRITE | \
154 PAGE_EXECUTE_WRITECOPY)
156 #define PAGE_IS_WRITECOPY \
158 PAGE_EXECUTE_WRITECOPY)
162 ULONG Entry
[NR_SECTION_PAGE_ENTRIES
];
163 } SECTION_PAGE_TABLE
, *PSECTION_PAGE_TABLE
;
167 PSECTION_PAGE_TABLE PageTables
[NR_SECTION_PAGE_TABLES
];
168 } SECTION_PAGE_DIRECTORY
, *PSECTION_PAGE_DIRECTORY
;
170 typedef struct _MM_SECTION_SEGMENT
172 LONG FileOffset
; /* start offset into the file for image sections */
173 ULONG_PTR VirtualAddress
; /* dtart offset into the address range for image sections */
174 ULONG RawLength
; /* length of the segment which is part of the mapped file */
175 ULONG Length
; /* absolute length of the segment */
177 FAST_MUTEX Lock
; /* lock which protects the page directory */
178 ULONG ReferenceCount
;
179 SECTION_PAGE_DIRECTORY PageDirectory
;
181 ULONG Characteristics
;
183 } MM_SECTION_SEGMENT
, *PMM_SECTION_SEGMENT
;
185 typedef struct _MM_IMAGE_SECTION_OBJECT
188 ULONG_PTR StackReserve
;
189 ULONG_PTR StackCommit
;
190 ULONG_PTR EntryPoint
;
192 USHORT ImageCharacteristics
;
193 USHORT MinorSubsystemVersion
;
194 USHORT MajorSubsystemVersion
;
199 PMM_SECTION_SEGMENT Segments
;
200 } MM_IMAGE_SECTION_OBJECT
, *PMM_IMAGE_SECTION_OBJECT
;
202 typedef struct _ROS_SECTION_OBJECT
206 LARGE_INTEGER MaximumSize
;
207 ULONG SectionPageProtection
;
208 ULONG AllocationAttributes
;
209 PFILE_OBJECT FileObject
;
212 PMM_IMAGE_SECTION_OBJECT ImageSection
;
213 PMM_SECTION_SEGMENT Segment
;
215 } ROS_SECTION_OBJECT
, *PROS_SECTION_OBJECT
;
217 typedef struct _MEMORY_AREA
219 PVOID StartingAddress
;
221 struct _MEMORY_AREA
*Parent
;
222 struct _MEMORY_AREA
*LeftChild
;
223 struct _MEMORY_AREA
*RightChild
;
227 BOOLEAN DeleteInProgress
;
233 ROS_SECTION_OBJECT
* Section
;
235 PMM_SECTION_SEGMENT Segment
;
236 BOOLEAN WriteCopyView
;
237 LIST_ENTRY RegionListHead
;
241 LIST_ENTRY RegionListHead
;
244 } MEMORY_AREA
, *PMEMORY_AREA
;
246 typedef struct _MADDRESS_SPACE
248 PMEMORY_AREA MemoryAreaRoot
;
250 struct _EPROCESS
* Process
;
251 PUSHORT PageTableRefCountTable
;
252 ULONG PageTableRefCountTableSize
;
253 } MADDRESS_SPACE
, *PMADDRESS_SPACE
;
263 ULONG PagingRequestsInLastMinute
;
264 ULONG PagingRequestsInLastFiveMinutes
;
265 ULONG PagingRequestsInLastFifteenMinutes
;
268 typedef struct _PHYSICAL_PAGE
282 LIST_ENTRY ListEntry
;
283 ULONG ReferenceCount
;
284 SWAPENTRY SavedSwapEntry
;
287 struct _MM_RMAP_ENTRY
* RmapListHead
;
289 PHYSICAL_PAGE
, *PPHYSICAL_PAGE
;
291 extern MM_STATS MmStats
;
293 typedef struct _MM_PAGEOP
295 /* Type of operation. */
297 /* Number of threads interested in this operation. */
298 ULONG ReferenceCount
;
299 /* Event that will be set when the operation is completed. */
300 KEVENT CompletionEvent
;
301 /* Status of the operation once it is completed. */
303 /* TRUE if the operation was abandoned. */
305 /* The memory area to be affected by the operation. */
308 struct _MM_PAGEOP
* Next
;
309 struct _ETHREAD
* Thread
;
311 * These fields are used to identify the operation if it is against a
312 * virtual memory area.
317 * These fields are used to identify the operation if it is against a
320 PMM_SECTION_SEGMENT Segment
;
322 } MM_PAGEOP
, *PMM_PAGEOP
;
324 typedef struct _MM_MEMORY_CONSUMER
328 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
);
329 } MM_MEMORY_CONSUMER
, *PMM_MEMORY_CONSUMER
;
331 typedef struct _MM_REGION
336 LIST_ENTRY RegionListEntry
;
337 } MM_REGION
, *PMM_REGION
;
339 extern MM_MEMORY_CONSUMER MiMemoryConsumers
[MC_MAXIMUM
];
342 (*PMM_ALTER_REGION_FUNC
)(
343 PMADDRESS_SPACE AddressSpace
,
353 (*PMM_FREE_PAGE_FUNC
)(
355 PMEMORY_AREA MemoryArea
,
362 /* aspace.c ******************************************************************/
366 MmLockAddressSpace(PMADDRESS_SPACE AddressSpace
);
370 MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace
);
374 MmInitializeKernelAddressSpace(VOID
);
378 MmGetCurrentAddressSpace(VOID
);
382 MmGetKernelAddressSpace(VOID
);
386 MmInitializeAddressSpace(
387 struct _EPROCESS
* Process
,
388 PMADDRESS_SPACE AddressSpace
);
392 MmDestroyAddressSpace(PMADDRESS_SPACE AddressSpace
);
394 /* marea.c *******************************************************************/
398 MmInitMemoryAreas(VOID
);
403 PMADDRESS_SPACE AddressSpace
,
408 PMEMORY_AREA
*Result
,
409 BOOLEAN FixedAddress
,
410 ULONG AllocationFlags
,
411 PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
416 MmLocateMemoryAreaByAddress(
417 PMADDRESS_SPACE AddressSpace
,
424 PMADDRESS_SPACE AddressSpace
,
431 PMADDRESS_SPACE AddressSpace
,
432 PMEMORY_AREA MemoryArea
,
433 PMM_FREE_PAGE_FUNC FreePage
,
434 PVOID FreePageContext
439 MmFreeMemoryAreaByPtr(
440 PMADDRESS_SPACE AddressSpace
,
442 PMM_FREE_PAGE_FUNC FreePage
,
443 PVOID FreePageContext
448 MmDumpMemoryAreas(PMADDRESS_SPACE AddressSpace
);
452 MmLocateMemoryAreaByRegion(
453 PMADDRESS_SPACE AddressSpace
,
461 PMADDRESS_SPACE AddressSpace
,
463 ULONG_PTR Granularity
,
469 MmReleaseMemoryAreaIfDecommitted(
470 struct _EPROCESS
*Process
,
471 PMADDRESS_SPACE AddressSpace
,
475 /* npool.c *******************************************************************/
479 MiDebugDumpNonPagedPool(BOOLEAN NewOnly
);
483 MiDebugDumpNonPagedPoolStats(BOOLEAN NewOnly
);
487 MiInitializeNonPagedPool(VOID
);
496 /* pool.c *******************************************************************/
500 ExAllocateNonPagedPoolWithTag(
509 ExAllocatePagedPoolWithTag(
517 ExFreeNonPagedPool(PVOID block
);
521 ExFreePagedPool(IN PVOID Block
);
525 MmInitializePagedPool(VOID
);
529 MiAllocateSpecialPool(
530 IN POOL_TYPE PoolType
,
531 IN SIZE_T NumberOfBytes
,
539 IN POOL_TYPE PoolType
,
540 IN ULONG CurrentMaxQuota
,
541 OUT PULONG NewMaxQuota
544 /* mdl.c *********************************************************************/
553 /* mminit.c ******************************************************************/
557 MiShutdownMemoryManager(VOID
);
567 MmInitSystem(IN ULONG Phase
,
568 IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
572 MiFreeInitMemory(VOID
);
576 MmInitializeMdlImplementation(VOID
);
578 /* pagefile.c ****************************************************************/
582 MmAllocSwapPage(VOID
);
586 MmDereserveSwapPages(ULONG Nr
);
590 MmFreeSwapPage(SWAPENTRY Entry
);
594 MmInitPagingFile(VOID
);
605 MmReserveSwapPages(ULONG Nr
);
618 ULONG BugCodeParameter1
,
619 ULONG BugCodeParameter2
,
620 ULONG BugCodeParameter3
,
621 ULONG BugCodeParameter4
,
622 struct _KTRAP_FRAME
* TrapFrame
627 MmIsAvailableSwapPage(VOID
);
631 MmShowOutOfSpaceMessagePagingFile(VOID
);
633 /* process.c ****************************************************************/
637 MmInitializeProcessAddressSpace(
638 IN PEPROCESS Process
,
639 IN PEPROCESS Clone OPTIONAL
,
640 IN PVOID Section OPTIONAL
,
642 IN POBJECT_NAME_INFORMATION
*AuditName OPTIONAL
647 MmCreatePeb(struct _EPROCESS
*Process
);
652 struct _EPROCESS
*Process
,
654 PINITIAL_TEB InitialTeb
660 struct _EPROCESS
*Process
,
666 MmCleanProcessAddressSpace(IN PEPROCESS Process
);
670 MmDeleteProcessAddressSpace(IN PEPROCESS Process
);
674 MmGetSessionLocaleId(VOID
);
678 MmSetMemoryPriorityProcess(
679 IN PEPROCESS Process
,
680 IN UCHAR MemoryPriority
683 /* i386/pfault.c *************************************************************/
695 /* mm.c **********************************************************************/
700 IN BOOLEAN StoreInstruction
,
702 IN KPROCESSOR_MODE Mode
,
703 IN PVOID TrapInformation
706 /* anonmem.c *****************************************************************/
710 MmNotPresentFaultVirtualMemory(
711 PMADDRESS_SPACE AddressSpace
,
712 MEMORY_AREA
* MemoryArea
,
719 MmPageOutVirtualMemory(
720 PMADDRESS_SPACE AddressSpace
,
721 PMEMORY_AREA MemoryArea
,
723 struct _MM_PAGEOP
* PageOp
729 PMEMORY_AREA MemoryArea
,
731 PMEMORY_BASIC_INFORMATION Info
,
738 struct _EPROCESS
* Process
,
739 PMEMORY_AREA MemoryArea
745 PMADDRESS_SPACE AddressSpace
,
746 PMEMORY_AREA MemoryArea
,
755 MmWritePageVirtualMemory(
756 PMADDRESS_SPACE AddressSpace
,
762 /* kmap.c ********************************************************************/
766 ExAllocatePage(VOID
);
770 ExUnmapPage(PVOID Addr
);
774 ExAllocatePageWithPhysPage(PFN_TYPE Page
);
785 MiZeroPage(PFN_TYPE Page
);
787 /* memsafe.s *****************************************************************/
791 MmSafeReadPtr(PVOID Source
);
793 /* pageop.c ******************************************************************/
797 MmReleasePageOp(PMM_PAGEOP PageOp
);
805 PMM_SECTION_SEGMENT Segment
,
817 PMM_SECTION_SEGMENT Segment
,
823 MmInitializePageOp(VOID
);
825 /* process.c *****************************************************************/
829 MmCreateKernelStack(BOOLEAN GuiStack
, UCHAR Node
);
833 MmDeleteKernelStack(PVOID Stack
,
836 /* balace.c ******************************************************************/
840 MmInitializeMemoryConsumer(
842 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
)
847 MmInitializeBalancer(
848 ULONG NrAvailablePages
,
854 MmReleasePageMemoryConsumer(
861 MmRequestPageMemoryConsumer(
864 PPFN_TYPE AllocatedPage
869 MiInitBalancerThread(VOID
);
873 MmRebalanceMemoryConsumers(VOID
);
875 /* rmap.c **************************************************************/
879 MmSetRmapListHeadPage(
881 struct _MM_RMAP_ENTRY
* ListHead
884 struct _MM_RMAP_ENTRY
*
886 MmGetRmapListHeadPage(PFN_TYPE Page
);
892 struct _EPROCESS
*Process
,
901 VOID (*DeleteMapping
)(PVOID Context
, struct _EPROCESS
*Process
, PVOID Address
)
908 struct _EPROCESS
*Process
,
914 MmInitializeRmapList(VOID
);
918 MmSetCleanAllRmaps(PFN_TYPE Page
);
922 MmSetDirtyAllRmaps(PFN_TYPE Page
);
926 MmIsDirtyPageRmap(PFN_TYPE Page
);
930 MmWritePagePhysicalAddress(PFN_TYPE Page
);
934 MmPageOutPhysicalAddress(PFN_TYPE Page
);
936 /* freelist.c **********************************************************/
940 MmGetLRUNextUserPage(PFN_TYPE PreviousPage
);
944 MmGetLRUFirstUserPage(VOID
);
948 MmSetLRULastPage(PFN_TYPE Page
);
952 MmLockPage(PFN_TYPE Page
);
956 MmLockPageUnsafe(PFN_TYPE Page
);
960 MmUnlockPage(PFN_TYPE Page
);
964 MmGetLockCountPage(PFN_TYPE Page
);
968 MmInitializePageList(
974 MmGetContinuousPages(
976 PHYSICAL_ADDRESS LowestAcceptableAddress
,
977 PHYSICAL_ADDRESS HighestAcceptableAddress
,
978 PHYSICAL_ADDRESS BoundaryAddressMultiple
983 MmZeroPageThreadMain(
987 /* i386/page.c *********************************************************/
991 MmCreateHyperspaceMapping(PFN_TYPE Page
);
995 MmChangeHyperspaceMapping(
1002 MmDeleteHyperspaceMapping(PVOID Address
);
1006 MmCreateVirtualMappingForKernel(
1015 MmCommitPagedPoolAddress(
1022 MmCreateVirtualMapping(
1023 struct _EPROCESS
* Process
,
1032 MmCreateVirtualMappingUnsafe(
1033 struct _EPROCESS
* Process
,
1043 struct _EPROCESS
* Process
,
1049 struct _EPROCESS
* Process
,
1057 struct _EPROCESS
* Process
,
1063 MmInitGlobalKernelPageDirectory(VOID
);
1067 MmDisableVirtualMapping(
1068 struct _EPROCESS
*Process
,
1076 MmEnableVirtualMapping(
1077 struct _EPROCESS
*Process
,
1083 MmRawDeleteVirtualMapping(PVOID Address
);
1087 MmDeletePageFileMapping(
1088 struct _EPROCESS
*Process
,
1090 SWAPENTRY
* SwapEntry
1095 MmCreatePageFileMapping(
1096 struct _EPROCESS
*Process
,
1104 struct _EPROCESS
*Process
,
1110 MmTransferOwnershipPage(
1118 struct _EPROCESS
*Process
,
1126 SWAPENTRY SavedSwapEntry
1131 MmAllocPagesSpecifyRange(
1133 PHYSICAL_ADDRESS LowestAddress
,
1134 PHYSICAL_ADDRESS HighestAddress
,
1135 ULONG NumberOfPages
,
1141 MmDereferencePage(PFN_TYPE Page
);
1145 MmReferencePage(PFN_TYPE Page
);
1149 MmReferencePageUnsafe(PFN_TYPE Page
);
1153 MmIsAccessedAndResetAccessPage(
1154 struct _EPROCESS
*Process
,
1160 MmGetReferenceCountPage(PFN_TYPE Page
);
1164 MmIsPageInUse(PFN_TYPE Page
);
1174 MmGetFlagsPage(PFN_TYPE Page
);
1178 MmSetSavedSwapEntryPage(
1180 SWAPENTRY SavedSwapEntry
);
1184 MmGetSavedSwapEntryPage(PFN_TYPE Page
);
1189 struct _EPROCESS
*Process
,
1195 MmCreatePageTable(PVOID PAddress
);
1200 struct _EPROCESS
*Process
,
1207 struct _EPROCESS
*Process
,
1213 MmCreateProcessAddressSpace(
1216 IN PLARGE_INTEGER DirectoryTableBase
1221 MmInitializeHandBuiltProcess(
1222 IN PEPROCESS Process
,
1223 IN PLARGE_INTEGER DirectoryTableBase
1229 MmInitializeHandBuiltProcess2(
1230 IN PEPROCESS Process
1235 MmReleaseMmInfo(struct _EPROCESS
*Process
);
1239 Mmi386ReleaseMmInfo(struct _EPROCESS
*Process
);
1243 MmDeleteVirtualMapping(
1244 struct _EPROCESS
*Process
,
1254 struct _EPROCESS
*Process
,
1260 MmMarkPageMapped(PFN_TYPE Page
);
1264 MmMarkPageUnmapped(PFN_TYPE Page
);
1269 struct _EPROCESS
*Process
,
1276 MiInitPageDirectoryMap(VOID
);
1280 MiGetUserPageDirectoryCount(VOID
);
1282 /* wset.c ********************************************************************/
1291 /* region.c ************************************************************/
1296 PMADDRESS_SPACE AddressSpace
,
1298 PLIST_ENTRY RegionListHead
,
1303 PMM_ALTER_REGION_FUNC AlterFunc
1309 PLIST_ENTRY RegionListHead
,
1319 PLIST_ENTRY RegionListHead
,
1321 PVOID
* RegionBaseAddress
1324 /* section.c *****************************************************************/
1328 MmGetFileObjectForSection(
1329 IN PROS_SECTION_OBJECT Section
1333 MmGetFileNameForAddress(
1335 OUT PUNICODE_STRING ModuleName
1340 MmGetFileNameForSection(
1341 IN PROS_SECTION_OBJECT Section
,
1342 OUT POBJECT_NAME_INFORMATION
*ModuleName
1355 PMEMORY_AREA MemoryArea
,
1357 PMEMORY_BASIC_INFORMATION Info
,
1363 MmProtectSectionView(
1364 PMADDRESS_SPACE AddressSpace
,
1365 PMEMORY_AREA MemoryArea
,
1374 MmWritePageSectionView(
1375 PMADDRESS_SPACE AddressSpace
,
1383 MmInitSectionImplementation(VOID
);
1387 MmNotPresentFaultSectionView(
1388 PMADDRESS_SPACE AddressSpace
,
1389 MEMORY_AREA
* MemoryArea
,
1396 MmPageOutSectionView(
1397 PMADDRESS_SPACE AddressSpace
,
1398 PMEMORY_AREA MemoryArea
,
1400 struct _MM_PAGEOP
*PageOp
1405 MmCreatePhysicalMemorySection(VOID
);
1409 MmAccessFaultSectionView(
1410 PMADDRESS_SPACE AddressSpace
,
1411 MEMORY_AREA
* MemoryArea
,
1418 MmFreeSectionSegments(PFILE_OBJECT FileObject
);
1420 /* mpw.c *********************************************************************/
1424 MmInitMpwThread(VOID
);
1428 MmInitBsmThread(VOID
);
1430 /* pager.c *******************************************************************/
1434 MiIsPagerThread(VOID
);
1438 MiStartPagerThread(VOID
);
1442 MiStopPagerThread(VOID
);
1446 MiQueryVirtualMemory(
1447 IN HANDLE ProcessHandle
,
1449 IN MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass
,
1450 OUT PVOID VirtualMemoryInformation
,
1452 OUT PULONG ResultLength
1455 /* sysldr.c ******************************************************************/
1459 MiReloadBootLoadedDrivers(
1460 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1465 MiInitializeLoadedModuleList(
1466 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1472 IN PUNICODE_STRING FileName
,
1473 IN PUNICODE_STRING NamePrefix OPTIONAL
,
1474 IN PUNICODE_STRING LoadedName OPTIONAL
,
1476 OUT PVOID
*ModuleObject
,
1477 OUT PVOID
*ImageBaseAddress
1482 MmUnloadSystemImage(
1483 IN PVOID ImageHandle
1489 IN HANDLE ImageHandle
,
1490 IN BOOLEAN PurgeSection
1496 MiSyncThreadProcessViews(IN PVOID Process
,
1500 MmUpdatePageDir((PEPROCESS
)Process
, Address
, Size
);