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
;
23 struct _MM_RMAP_ENTRY
;
25 typedef ULONG SWAPENTRY
;
26 typedef ULONG PFN_TYPE
, *PPFN_TYPE
;
28 #define MEMORY_AREA_INVALID (0)
29 #define MEMORY_AREA_SECTION_VIEW (1)
30 #define MEMORY_AREA_CONTINUOUS_MEMORY (2)
31 #define MEMORY_AREA_NO_CACHE (3)
32 #define MEMORY_AREA_IO_MAPPING (4)
33 #define MEMORY_AREA_SYSTEM (5)
34 #define MEMORY_AREA_MDL_MAPPING (7)
35 #define MEMORY_AREA_VIRTUAL_MEMORY (8)
36 #define MEMORY_AREA_CACHE_SEGMENT (9)
37 #define MEMORY_AREA_SHARED_DATA (10)
38 #define MEMORY_AREA_KERNEL_STACK (11)
39 #define MEMORY_AREA_PAGED_POOL (12)
40 #define MEMORY_AREA_NO_ACCESS (13)
41 #define MEMORY_AREA_PEB_OR_TEB (14)
43 #define MM_PHYSICAL_PAGE_MPW_PENDING (0x8)
45 #define MM_CORE_DUMP_TYPE_NONE (0x0)
46 #define MM_CORE_DUMP_TYPE_MINIMAL (0x1)
47 #define MM_CORE_DUMP_TYPE_FULL (0x2)
49 #define MM_PAGEOP_PAGEIN (1)
50 #define MM_PAGEOP_PAGEOUT (2)
51 #define MM_PAGEOP_PAGESYNCH (3)
52 #define MM_PAGEOP_ACCESSFAULT (4)
54 #define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) \
57 #define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \
58 ((((x)) % (4*1024*1024)) / (4*1024))
60 #define NR_SECTION_PAGE_TABLES 1024
61 #define NR_SECTION_PAGE_ENTRIES 1024
63 #define TEB_BASE 0x7FFDE000
65 /* Although Microsoft says this isn't hardcoded anymore,
66 they won't be able to change it. Stuff depends on it */
67 #define MM_VIRTMEM_GRANULARITY (64 * 1024)
69 #define STATUS_MM_RESTART_OPERATION ((NTSTATUS)0xD0000001)
72 * Additional flags for protection attributes
74 #define PAGE_WRITETHROUGH (1024)
75 #define PAGE_SYSTEM (2048)
77 #define SEC_PHYSICALMEMORY (0x80000000)
79 #define MM_PAGEFILE_SEGMENT (0x1)
80 #define MM_DATAFILE_SEGMENT (0x2)
86 #define MC_MAXIMUM (4)
88 #define PAGED_POOL_MASK 1
89 #define MUST_SUCCEED_POOL_MASK 2
90 #define CACHE_ALIGNED_POOL_MASK 4
91 #define QUOTA_POOL_MASK 8
92 #define SESSION_POOL_MASK 32
93 #define VERIFIER_POOL_MASK 64
95 #define MM_PAGED_POOL_SIZE (100*1024*1024)
96 #define MM_NONPAGED_POOL_SIZE (100*1024*1024)
99 * Paged and non-paged pools are 8-byte aligned
101 #define MM_POOL_ALIGNMENT 8
104 * Maximum size of the kmalloc area (this is totally arbitary)
106 #define MM_KERNEL_MAP_SIZE (16*1024*1024)
107 #define MM_KERNEL_MAP_BASE (0xf0c00000)
110 * FIXME - different architectures have different cache line sizes...
112 #define MM_CACHE_LINE_SIZE 32
114 #define MM_ROUND_UP(x,s) \
115 ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
117 #define MM_ROUND_DOWN(x,s) \
118 ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
120 #define PAGE_FLAGS_VALID_FROM_USER_MODE \
125 PAGE_EXECUTE_READ | \
126 PAGE_EXECUTE_READWRITE | \
127 PAGE_EXECUTE_WRITECOPY | \
132 #define PAGE_IS_READABLE \
136 PAGE_EXECUTE_READ | \
137 PAGE_EXECUTE_READWRITE | \
138 PAGE_EXECUTE_WRITECOPY)
140 #define PAGE_IS_WRITABLE \
143 PAGE_EXECUTE_READWRITE | \
144 PAGE_EXECUTE_WRITECOPY)
146 #define PAGE_IS_EXECUTABLE \
148 PAGE_EXECUTE_READ | \
149 PAGE_EXECUTE_READWRITE | \
150 PAGE_EXECUTE_WRITECOPY)
152 #define PAGE_IS_WRITECOPY \
154 PAGE_EXECUTE_WRITECOPY)
158 ULONG Entry
[NR_SECTION_PAGE_ENTRIES
];
159 } SECTION_PAGE_TABLE
, *PSECTION_PAGE_TABLE
;
163 PSECTION_PAGE_TABLE PageTables
[NR_SECTION_PAGE_TABLES
];
164 } SECTION_PAGE_DIRECTORY
, *PSECTION_PAGE_DIRECTORY
;
166 typedef struct _MM_SECTION_SEGMENT
168 LONG FileOffset
; /* start offset into the file for image sections */
169 ULONG_PTR VirtualAddress
; /* dtart offset into the address range for image sections */
170 ULONG RawLength
; /* length of the segment which is part of the mapped file */
171 ULONG Length
; /* absolute length of the segment */
173 FAST_MUTEX Lock
; /* lock which protects the page directory */
174 ULONG ReferenceCount
;
175 SECTION_PAGE_DIRECTORY PageDirectory
;
177 ULONG Characteristics
;
179 } MM_SECTION_SEGMENT
, *PMM_SECTION_SEGMENT
;
181 typedef struct _MM_IMAGE_SECTION_OBJECT
184 ULONG_PTR StackReserve
;
185 ULONG_PTR StackCommit
;
186 ULONG_PTR EntryPoint
;
188 USHORT ImageCharacteristics
;
189 USHORT MinorSubsystemVersion
;
190 USHORT MajorSubsystemVersion
;
195 PMM_SECTION_SEGMENT Segments
;
196 } MM_IMAGE_SECTION_OBJECT
, *PMM_IMAGE_SECTION_OBJECT
;
198 typedef struct _ROS_SECTION_OBJECT
202 LARGE_INTEGER MaximumSize
;
203 ULONG SectionPageProtection
;
204 ULONG AllocationAttributes
;
205 PFILE_OBJECT FileObject
;
208 PMM_IMAGE_SECTION_OBJECT ImageSection
;
209 PMM_SECTION_SEGMENT Segment
;
211 } ROS_SECTION_OBJECT
, *PROS_SECTION_OBJECT
;
213 typedef struct _MEMORY_AREA
215 PVOID StartingAddress
;
217 struct _MEMORY_AREA
*Parent
;
218 struct _MEMORY_AREA
*LeftChild
;
219 struct _MEMORY_AREA
*RightChild
;
223 BOOLEAN DeleteInProgress
;
229 ROS_SECTION_OBJECT
* Section
;
231 PMM_SECTION_SEGMENT Segment
;
232 BOOLEAN WriteCopyView
;
233 LIST_ENTRY RegionListHead
;
237 LIST_ENTRY RegionListHead
;
240 } MEMORY_AREA
, *PMEMORY_AREA
;
242 typedef struct _MADDRESS_SPACE
244 PMEMORY_AREA MemoryAreaRoot
;
246 struct _EPROCESS
* Process
;
247 PUSHORT PageTableRefCountTable
;
248 ULONG PageTableRefCountTableSize
;
249 } MADDRESS_SPACE
, *PMADDRESS_SPACE
;
259 ULONG PagingRequestsInLastMinute
;
260 ULONG PagingRequestsInLastFiveMinutes
;
261 ULONG PagingRequestsInLastFifteenMinutes
;
264 extern MM_STATS MmStats
;
266 typedef struct _MM_PAGEOP
268 /* Type of operation. */
270 /* Number of threads interested in this operation. */
271 ULONG ReferenceCount
;
272 /* Event that will be set when the operation is completed. */
273 KEVENT CompletionEvent
;
274 /* Status of the operation once it is completed. */
276 /* TRUE if the operation was abandoned. */
278 /* The memory area to be affected by the operation. */
281 struct _MM_PAGEOP
* Next
;
282 struct _ETHREAD
* Thread
;
284 * These fields are used to identify the operation if it is against a
285 * virtual memory area.
290 * These fields are used to identify the operation if it is against a
293 PMM_SECTION_SEGMENT Segment
;
295 } MM_PAGEOP
, *PMM_PAGEOP
;
297 typedef struct _MM_MEMORY_CONSUMER
301 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
);
302 } MM_MEMORY_CONSUMER
, *PMM_MEMORY_CONSUMER
;
304 typedef struct _MM_REGION
309 LIST_ENTRY RegionListEntry
;
310 } MM_REGION
, *PMM_REGION
;
312 extern MM_MEMORY_CONSUMER MiMemoryConsumers
[MC_MAXIMUM
];
315 (*PMM_ALTER_REGION_FUNC
)(
316 PMADDRESS_SPACE AddressSpace
,
326 (*PMM_FREE_PAGE_FUNC
)(
328 PMEMORY_AREA MemoryArea
,
335 /* aspace.c ******************************************************************/
339 MmLockAddressSpace(PMADDRESS_SPACE AddressSpace
);
343 MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace
);
347 MmInitializeKernelAddressSpace(VOID
);
351 MmGetCurrentAddressSpace(VOID
);
355 MmGetKernelAddressSpace(VOID
);
359 MmInitializeAddressSpace(
360 struct _EPROCESS
* Process
,
361 PMADDRESS_SPACE AddressSpace
);
365 MmDestroyAddressSpace(PMADDRESS_SPACE AddressSpace
);
367 /* marea.c *******************************************************************/
371 MmInitMemoryAreas(VOID
);
376 PMADDRESS_SPACE AddressSpace
,
381 PMEMORY_AREA
*Result
,
382 BOOLEAN FixedAddress
,
383 ULONG AllocationFlags
,
384 PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
389 MmLocateMemoryAreaByAddress(
390 PMADDRESS_SPACE AddressSpace
,
397 PMADDRESS_SPACE AddressSpace
,
404 PMADDRESS_SPACE AddressSpace
,
405 PMEMORY_AREA MemoryArea
,
406 PMM_FREE_PAGE_FUNC FreePage
,
407 PVOID FreePageContext
412 MmFreeMemoryAreaByPtr(
413 PMADDRESS_SPACE AddressSpace
,
415 PMM_FREE_PAGE_FUNC FreePage
,
416 PVOID FreePageContext
421 MmDumpMemoryAreas(PMADDRESS_SPACE AddressSpace
);
425 MmLocateMemoryAreaByRegion(
426 PMADDRESS_SPACE AddressSpace
,
434 PMADDRESS_SPACE AddressSpace
,
436 ULONG_PTR Granularity
,
442 MmReleaseMemoryAreaIfDecommitted(
443 struct _EPROCESS
*Process
,
444 PMADDRESS_SPACE AddressSpace
,
448 /* npool.c *******************************************************************/
452 MiDebugDumpNonPagedPool(BOOLEAN NewOnly
);
456 MiDebugDumpNonPagedPoolStats(BOOLEAN NewOnly
);
460 MiInitializeNonPagedPool(VOID
);
469 /* pool.c *******************************************************************/
473 ExAllocateNonPagedPoolWithTag(
482 ExAllocatePagedPoolWithTag(
490 ExFreeNonPagedPool(PVOID block
);
494 ExFreePagedPool(IN PVOID Block
);
498 MmInitializePagedPool(VOID
);
502 MiAllocateSpecialPool(
503 IN POOL_TYPE PoolType
,
504 IN SIZE_T NumberOfBytes
,
512 IN POOL_TYPE PoolType
,
513 IN ULONG CurrentMaxQuota
,
514 OUT PULONG NewMaxQuota
517 /* mdl.c *********************************************************************/
526 /* mminit.c ******************************************************************/
530 MiShutdownMemoryManager(VOID
);
535 ULONG_PTR FirstKernelPhysAddress
,
536 ULONG_PTR LastKernelPhysAddress
,
537 ULONG_PTR LastKernelAddress
,
538 PADDRESS_RANGE BIOSMemoryMap
,
539 ULONG AddressRangeCount
,
545 MmInitSystem(IN ULONG Phase
,
546 IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
550 MiFreeInitMemory(VOID
);
554 MmInitializeMdlImplementation(VOID
);
556 /* pagefile.c ****************************************************************/
560 MmAllocSwapPage(VOID
);
564 MmDereserveSwapPages(ULONG Nr
);
568 MmFreeSwapPage(SWAPENTRY Entry
);
572 MmInitPagingFile(VOID
);
583 MmReserveSwapPages(ULONG Nr
);
596 ULONG BugCodeParameter1
,
597 ULONG BugCodeParameter2
,
598 ULONG BugCodeParameter3
,
599 ULONG BugCodeParameter4
,
600 struct _KTRAP_FRAME
* TrapFrame
605 MmIsAvailableSwapPage(VOID
);
609 MmShowOutOfSpaceMessagePagingFile(VOID
);
611 /* process.c ****************************************************************/
615 MmInitializeProcessAddressSpace(
616 IN PEPROCESS Process
,
617 IN PEPROCESS Clone OPTIONAL
,
618 IN PVOID Section OPTIONAL
,
620 IN POBJECT_NAME_INFORMATION
*AuditName OPTIONAL
625 MmCreatePeb(struct _EPROCESS
*Process
);
630 struct _EPROCESS
*Process
,
632 PINITIAL_TEB InitialTeb
638 struct _EPROCESS
*Process
,
644 MmCleanProcessAddressSpace(IN PEPROCESS Process
);
648 MmDeleteProcessAddressSpace(IN PEPROCESS Process
);
652 MmGetSessionLocaleId(VOID
);
656 MmSetMemoryPriorityProcess(
657 IN PEPROCESS Process
,
658 IN UCHAR MemoryPriority
661 /* i386/pfault.c *************************************************************/
673 /* mm.c **********************************************************************/
678 IN BOOLEAN StoreInstruction
,
680 IN KPROCESSOR_MODE Mode
,
681 IN PVOID TrapInformation
684 /* anonmem.c *****************************************************************/
688 MmNotPresentFaultVirtualMemory(
689 PMADDRESS_SPACE AddressSpace
,
690 MEMORY_AREA
* MemoryArea
,
697 MmPageOutVirtualMemory(
698 PMADDRESS_SPACE AddressSpace
,
699 PMEMORY_AREA MemoryArea
,
701 struct _MM_PAGEOP
* PageOp
707 PMEMORY_AREA MemoryArea
,
709 PMEMORY_BASIC_INFORMATION Info
,
716 struct _EPROCESS
* Process
,
717 PMEMORY_AREA MemoryArea
723 PMADDRESS_SPACE AddressSpace
,
724 PMEMORY_AREA MemoryArea
,
733 MmWritePageVirtualMemory(
734 PMADDRESS_SPACE AddressSpace
,
740 /* kmap.c ********************************************************************/
744 ExAllocatePage(VOID
);
748 ExUnmapPage(PVOID Addr
);
752 ExAllocatePageWithPhysPage(PFN_TYPE Page
);
763 MiZeroPage(PFN_TYPE Page
);
765 /* memsafe.s *****************************************************************/
769 MmSafeReadPtr(PVOID Source
);
771 /* pageop.c ******************************************************************/
775 MmReleasePageOp(PMM_PAGEOP PageOp
);
783 PMM_SECTION_SEGMENT Segment
,
795 PMM_SECTION_SEGMENT Segment
,
801 MmInitializePageOp(VOID
);
803 /* process.c *****************************************************************/
807 MmCreateKernelStack(BOOLEAN GuiStack
, UCHAR Node
);
811 MmDeleteKernelStack(PVOID Stack
,
814 /* balace.c ******************************************************************/
818 MmInitializeMemoryConsumer(
820 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
)
825 MmInitializeBalancer(
826 ULONG NrAvailablePages
,
832 MmReleasePageMemoryConsumer(
839 MmRequestPageMemoryConsumer(
842 PPFN_TYPE AllocatedPage
847 MiInitBalancerThread(VOID
);
851 MmRebalanceMemoryConsumers(VOID
);
853 /* rmap.c **************************************************************/
857 MmSetRmapListHeadPage(
859 struct _MM_RMAP_ENTRY
* ListHead
862 struct _MM_RMAP_ENTRY
*
864 MmGetRmapListHeadPage(PFN_TYPE Page
);
870 struct _EPROCESS
*Process
,
879 VOID (*DeleteMapping
)(PVOID Context
, struct _EPROCESS
*Process
, PVOID Address
)
886 struct _EPROCESS
*Process
,
892 MmInitializeRmapList(VOID
);
896 MmSetCleanAllRmaps(PFN_TYPE Page
);
900 MmSetDirtyAllRmaps(PFN_TYPE Page
);
904 MmIsDirtyPageRmap(PFN_TYPE Page
);
908 MmWritePagePhysicalAddress(PFN_TYPE Page
);
912 MmPageOutPhysicalAddress(PFN_TYPE Page
);
914 /* freelist.c **********************************************************/
918 MmGetLRUNextUserPage(PFN_TYPE PreviousPage
);
922 MmGetLRUFirstUserPage(VOID
);
926 MmSetLRULastPage(PFN_TYPE Page
);
930 MmLockPage(PFN_TYPE Page
);
934 MmLockPageUnsafe(PFN_TYPE Page
);
938 MmUnlockPage(PFN_TYPE Page
);
942 MmGetLockCountPage(PFN_TYPE Page
);
946 MmInitializePageList(
947 ULONG_PTR FirstPhysKernelAddress
,
948 ULONG_PTR LastPhysKernelAddress
,
949 ULONG MemorySizeInPages
,
950 ULONG_PTR LastKernelBase
,
951 PADDRESS_RANGE BIOSMemoryMap
,
952 ULONG AddressRangeCount
957 MmGetContinuousPages(
959 PHYSICAL_ADDRESS LowestAcceptableAddress
,
960 PHYSICAL_ADDRESS HighestAcceptableAddress
,
961 PHYSICAL_ADDRESS BoundaryAddressMultiple
966 MmZeroPageThreadMain(
970 /* i386/page.c *********************************************************/
974 MmCreateHyperspaceMapping(PFN_TYPE Page
);
978 MmChangeHyperspaceMapping(
985 MmDeleteHyperspaceMapping(PVOID Address
);
989 MmCreateVirtualMappingForKernel(
998 MmCommitPagedPoolAddress(
1005 MmCreateVirtualMapping(
1006 struct _EPROCESS
* Process
,
1015 MmCreateVirtualMappingUnsafe(
1016 struct _EPROCESS
* Process
,
1026 struct _EPROCESS
* Process
,
1032 struct _EPROCESS
* Process
,
1040 struct _EPROCESS
* Process
,
1046 MmInitGlobalKernelPageDirectory(VOID
);
1050 MmDisableVirtualMapping(
1051 struct _EPROCESS
*Process
,
1059 MmEnableVirtualMapping(
1060 struct _EPROCESS
*Process
,
1066 MmRawDeleteVirtualMapping(PVOID Address
);
1070 MmDeletePageFileMapping(
1071 struct _EPROCESS
*Process
,
1073 SWAPENTRY
* SwapEntry
1078 MmCreatePageFileMapping(
1079 struct _EPROCESS
*Process
,
1087 struct _EPROCESS
*Process
,
1093 MmTransferOwnershipPage(
1101 struct _EPROCESS
*Process
,
1109 SWAPENTRY SavedSwapEntry
1114 MmAllocPagesSpecifyRange(
1116 PHYSICAL_ADDRESS LowestAddress
,
1117 PHYSICAL_ADDRESS HighestAddress
,
1118 ULONG NumberOfPages
,
1124 MmDereferencePage(PFN_TYPE Page
);
1128 MmReferencePage(PFN_TYPE Page
);
1132 MmReferencePageUnsafe(PFN_TYPE Page
);
1136 MmIsAccessedAndResetAccessPage(
1137 struct _EPROCESS
*Process
,
1143 MmGetReferenceCountPage(PFN_TYPE Page
);
1147 MmIsPageInUse(PFN_TYPE Page
);
1157 MmGetFlagsPage(PFN_TYPE Page
);
1161 MmSetSavedSwapEntryPage(
1163 SWAPENTRY SavedSwapEntry
);
1167 MmGetSavedSwapEntryPage(PFN_TYPE Page
);
1172 struct _EPROCESS
*Process
,
1178 MmCreatePageTable(PVOID PAddress
);
1183 struct _EPROCESS
*Process
,
1190 struct _EPROCESS
*Process
,
1196 MmCreateProcessAddressSpace(
1199 IN PLARGE_INTEGER DirectoryTableBase
1204 MmInitializeHandBuiltProcess(
1205 IN PEPROCESS Process
,
1206 IN PLARGE_INTEGER DirectoryTableBase
1212 MmInitializeHandBuiltProcess2(
1213 IN PEPROCESS Process
1218 MmReleaseMmInfo(struct _EPROCESS
*Process
);
1222 Mmi386ReleaseMmInfo(struct _EPROCESS
*Process
);
1226 MmDeleteVirtualMapping(
1227 struct _EPROCESS
*Process
,
1237 struct _EPROCESS
*Process
,
1243 MmMarkPageMapped(PFN_TYPE Page
);
1247 MmMarkPageUnmapped(PFN_TYPE Page
);
1252 struct _EPROCESS
*Process
,
1259 MiInitPageDirectoryMap(VOID
);
1263 MiGetUserPageDirectoryCount(VOID
);
1265 /* wset.c ********************************************************************/
1274 /* region.c ************************************************************/
1279 PMADDRESS_SPACE AddressSpace
,
1281 PLIST_ENTRY RegionListHead
,
1286 PMM_ALTER_REGION_FUNC AlterFunc
1292 PLIST_ENTRY RegionListHead
,
1302 PLIST_ENTRY RegionListHead
,
1304 PVOID
* RegionBaseAddress
1307 /* section.c *****************************************************************/
1311 MmGetFileObjectForSection(
1312 IN PROS_SECTION_OBJECT Section
1316 MmGetFileNameForAddress(
1318 OUT PUNICODE_STRING ModuleName
1323 MmGetFileNameForSection(
1324 IN PROS_SECTION_OBJECT Section
,
1325 OUT POBJECT_NAME_INFORMATION
*ModuleName
1338 PMEMORY_AREA MemoryArea
,
1340 PMEMORY_BASIC_INFORMATION Info
,
1346 MmProtectSectionView(
1347 PMADDRESS_SPACE AddressSpace
,
1348 PMEMORY_AREA MemoryArea
,
1357 MmWritePageSectionView(
1358 PMADDRESS_SPACE AddressSpace
,
1366 MmInitSectionImplementation(VOID
);
1370 MmNotPresentFaultSectionView(
1371 PMADDRESS_SPACE AddressSpace
,
1372 MEMORY_AREA
* MemoryArea
,
1379 MmPageOutSectionView(
1380 PMADDRESS_SPACE AddressSpace
,
1381 PMEMORY_AREA MemoryArea
,
1383 struct _MM_PAGEOP
*PageOp
1388 MmCreatePhysicalMemorySection(VOID
);
1392 MmAccessFaultSectionView(
1393 PMADDRESS_SPACE AddressSpace
,
1394 MEMORY_AREA
* MemoryArea
,
1401 MmFreeSectionSegments(PFILE_OBJECT FileObject
);
1403 /* mpw.c *********************************************************************/
1407 MmInitMpwThread(VOID
);
1411 MmInitBsmThread(VOID
);
1413 /* pager.c *******************************************************************/
1417 MiIsPagerThread(VOID
);
1421 MiStartPagerThread(VOID
);
1425 MiStopPagerThread(VOID
);
1429 MiQueryVirtualMemory(
1430 IN HANDLE ProcessHandle
,
1432 IN MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass
,
1433 OUT PVOID VirtualMemoryInformation
,
1435 OUT PULONG ResultLength
1438 /* sysldr.c ******************************************************************/
1442 MiReloadBootLoadedDrivers(
1443 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1448 MiInitializeLoadedModuleList(
1449 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1455 IN PUNICODE_STRING FileName
,
1456 IN PUNICODE_STRING NamePrefix OPTIONAL
,
1457 IN PUNICODE_STRING LoadedName OPTIONAL
,
1459 OUT PVOID
*ModuleObject
,
1460 OUT PVOID
*ImageBaseAddress
1465 MmUnloadSystemImage(
1466 IN PVOID ImageHandle
1472 IN HANDLE ImageHandle
,
1473 IN BOOLEAN PurgeSection
1479 MiSyncThreadProcessViews(IN PVOID Process
,
1483 MmUpdatePageDir((PEPROCESS
)Process
, Address
, Size
);