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
;
17 extern PVOID MmPagedPoolBase
;
18 extern ULONG MmPagedPoolSize
;
22 struct _MM_RMAP_ENTRY
;
24 typedef ULONG SWAPENTRY
;
25 typedef ULONG PFN_TYPE
, *PPFN_TYPE
;
27 #define MEMORY_AREA_INVALID (0)
28 #define MEMORY_AREA_SECTION_VIEW (1)
29 #define MEMORY_AREA_CONTINUOUS_MEMORY (2)
30 #define MEMORY_AREA_NO_CACHE (3)
31 #define MEMORY_AREA_IO_MAPPING (4)
32 #define MEMORY_AREA_SYSTEM (5)
33 #define MEMORY_AREA_MDL_MAPPING (7)
34 #define MEMORY_AREA_VIRTUAL_MEMORY (8)
35 #define MEMORY_AREA_CACHE_SEGMENT (9)
36 #define MEMORY_AREA_SHARED_DATA (10)
37 #define MEMORY_AREA_KERNEL_STACK (11)
38 #define MEMORY_AREA_PAGED_POOL (12)
39 #define MEMORY_AREA_NO_ACCESS (13)
40 #define MEMORY_AREA_PEB_OR_TEB (14)
42 #define MM_PHYSICAL_PAGE_MPW_PENDING (0x8)
44 #define MM_CORE_DUMP_TYPE_NONE (0x0)
45 #define MM_CORE_DUMP_TYPE_MINIMAL (0x1)
46 #define MM_CORE_DUMP_TYPE_FULL (0x2)
48 #define MM_PAGEOP_PAGEIN (1)
49 #define MM_PAGEOP_PAGEOUT (2)
50 #define MM_PAGEOP_PAGESYNCH (3)
51 #define MM_PAGEOP_ACCESSFAULT (4)
53 #define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) \
56 #define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \
57 ((((x)) % (4*1024*1024)) / (4*1024))
59 #define NR_SECTION_PAGE_TABLES 1024
60 #define NR_SECTION_PAGE_ENTRIES 1024
62 #define TEB_BASE 0x7FFDE000
63 #define KPCR_BASE 0xFF000000
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 LONGLONG 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 ULONG 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
;
255 ULONG NrReservedPages
;
260 ULONG PagingRequestsInLastMinute
;
261 ULONG PagingRequestsInLastFiveMinutes
;
262 ULONG PagingRequestsInLastFifteenMinutes
;
265 extern MM_STATS MmStats
;
267 typedef struct _MM_PAGEOP
269 /* Type of operation. */
271 /* Number of threads interested in this operation. */
272 ULONG ReferenceCount
;
273 /* Event that will be set when the operation is completed. */
274 KEVENT CompletionEvent
;
275 /* Status of the operation once it is completed. */
277 /* TRUE if the operation was abandoned. */
279 /* The memory area to be affected by the operation. */
282 struct _MM_PAGEOP
* Next
;
283 struct _ETHREAD
* Thread
;
285 * These fields are used to identify the operation if it is against a
286 * virtual memory area.
291 * These fields are used to identify the operation if it is against a
294 PMM_SECTION_SEGMENT Segment
;
296 } MM_PAGEOP
, *PMM_PAGEOP
;
298 typedef struct _MM_MEMORY_CONSUMER
302 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
);
303 } MM_MEMORY_CONSUMER
, *PMM_MEMORY_CONSUMER
;
305 typedef struct _MM_REGION
310 LIST_ENTRY RegionListEntry
;
311 } MM_REGION
, *PMM_REGION
;
313 extern MM_MEMORY_CONSUMER MiMemoryConsumers
[MC_MAXIMUM
];
316 (*PMM_ALTER_REGION_FUNC
)(
317 PMADDRESS_SPACE AddressSpace
,
327 (*PMM_FREE_PAGE_FUNC
)(
329 PMEMORY_AREA MemoryArea
,
336 /* aspace.c ******************************************************************/
340 MmLockAddressSpace(PMADDRESS_SPACE AddressSpace
);
344 MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace
);
348 MmInitializeKernelAddressSpace(VOID
);
352 MmGetCurrentAddressSpace(VOID
);
356 MmGetKernelAddressSpace(VOID
);
360 MmInitializeAddressSpace(
361 struct _EPROCESS
* Process
,
362 PMADDRESS_SPACE AddressSpace
);
366 MmDestroyAddressSpace(PMADDRESS_SPACE AddressSpace
);
368 /* marea.c *******************************************************************/
372 MmInitMemoryAreas(VOID
);
377 PMADDRESS_SPACE AddressSpace
,
382 PMEMORY_AREA
*Result
,
383 BOOLEAN FixedAddress
,
384 ULONG AllocationFlags
,
385 PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
390 MmLocateMemoryAreaByAddress(
391 PMADDRESS_SPACE AddressSpace
,
398 PMADDRESS_SPACE AddressSpace
,
405 PMADDRESS_SPACE AddressSpace
,
406 PMEMORY_AREA MemoryArea
,
407 PMM_FREE_PAGE_FUNC FreePage
,
408 PVOID FreePageContext
413 MmFreeMemoryAreaByPtr(
414 PMADDRESS_SPACE AddressSpace
,
416 PMM_FREE_PAGE_FUNC FreePage
,
417 PVOID FreePageContext
422 MmDumpMemoryAreas(PMADDRESS_SPACE AddressSpace
);
426 MmLocateMemoryAreaByRegion(
427 PMADDRESS_SPACE AddressSpace
,
435 PMADDRESS_SPACE AddressSpace
,
437 ULONG_PTR Granularity
,
443 MmReleaseMemoryAreaIfDecommitted(
444 struct _EPROCESS
*Process
,
445 PMADDRESS_SPACE AddressSpace
,
449 /* npool.c *******************************************************************/
453 MiDebugDumpNonPagedPool(BOOLEAN NewOnly
);
457 MiDebugDumpNonPagedPoolStats(BOOLEAN NewOnly
);
461 MiInitializeNonPagedPool(VOID
);
470 /* pool.c *******************************************************************/
474 ExAllocateNonPagedPoolWithTag(
483 ExAllocatePagedPoolWithTag(
491 ExFreeNonPagedPool(PVOID block
);
495 ExFreePagedPool(IN PVOID Block
);
499 MmInitializePagedPool(VOID
);
503 MiAllocateSpecialPool(
504 IN POOL_TYPE PoolType
,
505 IN SIZE_T NumberOfBytes
,
513 IN POOL_TYPE PoolType
,
514 IN ULONG CurrentMaxQuota
,
515 OUT PULONG NewMaxQuota
518 /* mdl.c *********************************************************************/
527 /* mminit.c ******************************************************************/
531 MiShutdownMemoryManager(VOID
);
536 ULONG_PTR FirstKernelPhysAddress
,
537 ULONG_PTR LastKernelPhysAddress
,
538 ULONG_PTR LastKernelAddress
,
539 PADDRESS_RANGE BIOSMemoryMap
,
540 ULONG AddressRangeCount
,
546 MmInitSystem(IN ULONG Phase
,
547 IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
551 MiFreeInitMemory(VOID
);
555 MmInitializeMdlImplementation(VOID
);
557 /* pagefile.c ****************************************************************/
561 MmAllocSwapPage(VOID
);
565 MmDereserveSwapPages(ULONG Nr
);
569 MmFreeSwapPage(SWAPENTRY Entry
);
573 MmInitPagingFile(VOID
);
584 MmReserveSwapPages(ULONG Nr
);
597 ULONG BugCodeParameter1
,
598 ULONG BugCodeParameter2
,
599 ULONG BugCodeParameter3
,
600 ULONG BugCodeParameter4
,
601 struct _KTRAP_FRAME
* TrapFrame
606 MmIsAvailableSwapPage(VOID
);
610 MmShowOutOfSpaceMessagePagingFile(VOID
);
612 /* process.c ****************************************************************/
616 MmCreateProcessAddressSpace(
617 IN PEPROCESS Process
,
618 IN PROS_SECTION_OBJECT Section OPTIONAL
,
619 IN POBJECT_NAME_INFORMATION
*AuditName OPTIONAL
624 MmCreatePeb(struct _EPROCESS
*Process
);
629 struct _EPROCESS
*Process
,
631 PINITIAL_TEB InitialTeb
637 struct _EPROCESS
*Process
,
643 MmCleanProcessAddressSpace(IN PEPROCESS Process
);
647 MmDeleteProcessAddressSpace(IN PEPROCESS Process
);
651 MmGetSessionLocaleId(VOID
);
655 MmSetMemoryPriorityProcess(
656 IN PEPROCESS Process
,
657 IN UCHAR MemoryPriority
660 /* i386/pfault.c *************************************************************/
672 /* mm.c **********************************************************************/
677 IN BOOLEAN StoreInstruction
,
679 IN KPROCESSOR_MODE Mode
,
680 IN PVOID TrapInformation
683 /* anonmem.c *****************************************************************/
687 MmNotPresentFaultVirtualMemory(
688 PMADDRESS_SPACE AddressSpace
,
689 MEMORY_AREA
* MemoryArea
,
696 MmPageOutVirtualMemory(
697 PMADDRESS_SPACE AddressSpace
,
698 PMEMORY_AREA MemoryArea
,
700 struct _MM_PAGEOP
* PageOp
706 PMEMORY_AREA MemoryArea
,
708 PMEMORY_BASIC_INFORMATION Info
,
715 struct _EPROCESS
* Process
,
716 PMEMORY_AREA MemoryArea
722 PMADDRESS_SPACE AddressSpace
,
723 PMEMORY_AREA MemoryArea
,
732 MmWritePageVirtualMemory(
733 PMADDRESS_SPACE AddressSpace
,
739 /* kmap.c ********************************************************************/
743 ExAllocatePage(VOID
);
747 ExUnmapPage(PVOID Addr
);
751 ExAllocatePageWithPhysPage(PFN_TYPE Page
);
762 MiZeroPage(PFN_TYPE Page
);
764 /* memsafe.s *****************************************************************/
768 MmSafeReadPtr(PVOID Source
);
770 /* pageop.c ******************************************************************/
774 MmReleasePageOp(PMM_PAGEOP PageOp
);
782 PMM_SECTION_SEGMENT Segment
,
794 PMM_SECTION_SEGMENT Segment
,
800 MmInitializePageOp(VOID
);
802 /* process.c *****************************************************************/
806 MmCreateKernelStack(BOOLEAN GuiStack
);
810 MmDeleteKernelStack(PVOID Stack
,
813 /* balace.c ******************************************************************/
817 MmInitializeMemoryConsumer(
819 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
)
824 MmInitializeBalancer(
825 ULONG NrAvailablePages
,
831 MmReleasePageMemoryConsumer(
838 MmRequestPageMemoryConsumer(
841 PPFN_TYPE AllocatedPage
846 MiInitBalancerThread(VOID
);
850 MmRebalanceMemoryConsumers(VOID
);
852 /* rmap.c **************************************************************/
856 MmSetRmapListHeadPage(
858 struct _MM_RMAP_ENTRY
* ListHead
861 struct _MM_RMAP_ENTRY
*
863 MmGetRmapListHeadPage(PFN_TYPE Page
);
869 struct _EPROCESS
*Process
,
878 VOID (*DeleteMapping
)(PVOID Context
, struct _EPROCESS
*Process
, PVOID Address
)
885 struct _EPROCESS
*Process
,
891 MmInitializeRmapList(VOID
);
895 MmSetCleanAllRmaps(PFN_TYPE Page
);
899 MmSetDirtyAllRmaps(PFN_TYPE Page
);
903 MmIsDirtyPageRmap(PFN_TYPE Page
);
907 MmWritePagePhysicalAddress(PFN_TYPE Page
);
911 MmPageOutPhysicalAddress(PFN_TYPE Page
);
913 /* freelist.c **********************************************************/
917 MmGetLRUNextUserPage(PFN_TYPE PreviousPage
);
921 MmGetLRUFirstUserPage(VOID
);
925 MmSetLRULastPage(PFN_TYPE Page
);
929 MmLockPage(PFN_TYPE Page
);
933 MmLockPageUnsafe(PFN_TYPE Page
);
937 MmUnlockPage(PFN_TYPE Page
);
941 MmGetLockCountPage(PFN_TYPE Page
);
945 MmInitializePageList(
946 ULONG_PTR FirstPhysKernelAddress
,
947 ULONG_PTR LastPhysKernelAddress
,
948 ULONG MemorySizeInPages
,
949 ULONG_PTR LastKernelBase
,
950 PADDRESS_RANGE BIOSMemoryMap
,
951 ULONG AddressRangeCount
956 MmGetContinuousPages(
958 PHYSICAL_ADDRESS LowestAcceptableAddress
,
959 PHYSICAL_ADDRESS HighestAcceptableAddress
,
960 PHYSICAL_ADDRESS BoundaryAddressMultiple
965 MmZeroPageThreadMain(
969 /* i386/page.c *********************************************************/
973 MmCreateHyperspaceMapping(PFN_TYPE Page
);
977 MmChangeHyperspaceMapping(
984 MmDeleteHyperspaceMapping(PVOID Address
);
988 MmCreateVirtualMappingForKernel(
997 MmCommitPagedPoolAddress(
1004 MmCreateVirtualMapping(
1005 struct _EPROCESS
* Process
,
1014 MmCreateVirtualMappingUnsafe(
1015 struct _EPROCESS
* Process
,
1025 struct _EPROCESS
* Process
,
1031 struct _EPROCESS
* Process
,
1039 struct _EPROCESS
* Process
,
1045 MmInitGlobalKernelPageDirectory(VOID
);
1049 MmDisableVirtualMapping(
1050 struct _EPROCESS
*Process
,
1058 MmEnableVirtualMapping(
1059 struct _EPROCESS
*Process
,
1065 MmRawDeleteVirtualMapping(PVOID Address
);
1069 MmDeletePageFileMapping(
1070 struct _EPROCESS
*Process
,
1072 SWAPENTRY
* SwapEntry
1077 MmCreatePageFileMapping(
1078 struct _EPROCESS
*Process
,
1086 struct _EPROCESS
*Process
,
1092 MmTransferOwnershipPage(
1100 struct _EPROCESS
*Process
,
1108 SWAPENTRY SavedSwapEntry
1113 MmAllocPagesSpecifyRange(
1115 PHYSICAL_ADDRESS LowestAddress
,
1116 PHYSICAL_ADDRESS HighestAddress
,
1117 ULONG NumberOfPages
,
1123 MmDereferencePage(PFN_TYPE Page
);
1127 MmReferencePage(PFN_TYPE Page
);
1131 MmReferencePageUnsafe(PFN_TYPE Page
);
1135 MmIsAccessedAndResetAccessPage(
1136 struct _EPROCESS
*Process
,
1142 MmGetReferenceCountPage(PFN_TYPE Page
);
1146 MmIsUsablePage(PFN_TYPE Page
);
1156 MmGetFlagsPage(PFN_TYPE Page
);
1160 MmSetSavedSwapEntryPage(
1162 SWAPENTRY SavedSwapEntry
);
1166 MmGetSavedSwapEntryPage(PFN_TYPE Page
);
1171 struct _EPROCESS
*Process
,
1177 MmCreatePageTable(PVOID PAddress
);
1182 struct _EPROCESS
*Process
,
1189 struct _EPROCESS
*Process
,
1196 struct _EPROCESS
*Src
,
1197 struct _EPROCESS
*Dest
,
1198 PPHYSICAL_ADDRESS DirectoryTableBase
1203 MmReleaseMmInfo(struct _EPROCESS
*Process
);
1207 Mmi386ReleaseMmInfo(struct _EPROCESS
*Process
);
1211 MmDeleteVirtualMapping(
1212 struct _EPROCESS
*Process
,
1222 struct _EPROCESS
*Process
,
1228 MmMarkPageMapped(PFN_TYPE Page
);
1232 MmMarkPageUnmapped(PFN_TYPE Page
);
1237 struct _EPROCESS
*Process
,
1244 MiInitPageDirectoryMap(VOID
);
1248 MiGetUserPageDirectoryCount(VOID
);
1250 /* wset.c ********************************************************************/
1259 /* region.c ************************************************************/
1264 PMADDRESS_SPACE AddressSpace
,
1266 PLIST_ENTRY RegionListHead
,
1271 PMM_ALTER_REGION_FUNC AlterFunc
1277 PLIST_ENTRY RegionListHead
,
1287 PLIST_ENTRY RegionListHead
,
1289 PVOID
* RegionBaseAddress
1292 /* section.c *****************************************************************/
1296 MmGetFileObjectForSection(
1297 IN PROS_SECTION_OBJECT Section
1301 MmGetFileNameForAddress(
1303 OUT PUNICODE_STRING ModuleName
1308 MmGetFileNameForSection(
1309 IN PROS_SECTION_OBJECT Section
,
1310 OUT POBJECT_NAME_INFORMATION
*ModuleName
1323 PMEMORY_AREA MemoryArea
,
1325 PMEMORY_BASIC_INFORMATION Info
,
1331 MmProtectSectionView(
1332 PMADDRESS_SPACE AddressSpace
,
1333 PMEMORY_AREA MemoryArea
,
1342 MmWritePageSectionView(
1343 PMADDRESS_SPACE AddressSpace
,
1351 MmInitSectionImplementation(VOID
);
1355 MmNotPresentFaultSectionView(
1356 PMADDRESS_SPACE AddressSpace
,
1357 MEMORY_AREA
* MemoryArea
,
1364 MmPageOutSectionView(
1365 PMADDRESS_SPACE AddressSpace
,
1366 PMEMORY_AREA MemoryArea
,
1368 struct _MM_PAGEOP
*PageOp
1373 MmCreatePhysicalMemorySection(VOID
);
1377 MmAccessFaultSectionView(
1378 PMADDRESS_SPACE AddressSpace
,
1379 MEMORY_AREA
* MemoryArea
,
1386 MmFreeSectionSegments(PFILE_OBJECT FileObject
);
1388 /* mpw.c *********************************************************************/
1392 MmInitMpwThread(VOID
);
1396 MmInitBsmThread(VOID
);
1398 /* pager.c *******************************************************************/
1402 MiIsPagerThread(VOID
);
1406 MiStartPagerThread(VOID
);
1410 MiStopPagerThread(VOID
);
1414 MiQueryVirtualMemory(
1415 IN HANDLE ProcessHandle
,
1417 IN MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass
,
1418 OUT PVOID VirtualMemoryInformation
,
1420 OUT PULONG ResultLength
1423 /* sysldr.c ******************************************************************/
1427 MiReloadBootLoadedDrivers(
1428 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1433 MiInitializeLoadedModuleList(
1434 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1440 IN PUNICODE_STRING FileName
,
1441 IN PUNICODE_STRING NamePrefix OPTIONAL
,
1442 IN PUNICODE_STRING LoadedName OPTIONAL
,
1444 OUT PVOID
*ModuleObject
,
1445 OUT PVOID
*ImageBaseAddress
1450 MmUnloadSystemImage(
1451 IN PVOID ImageHandle
1457 IN HANDLE ImageHandle
,
1458 IN BOOLEAN PurgeSection