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 MEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptorOrg
;
23 extern ULONG MmHighestPhysicalPage
;
24 extern PVOID MmPfnDatabase
;
28 struct _MM_RMAP_ENTRY
;
30 typedef ULONG SWAPENTRY
;
31 typedef ULONG PFN_TYPE
, *PPFN_TYPE
;
33 #define MEMORY_AREA_INVALID (0)
34 #define MEMORY_AREA_SECTION_VIEW (1)
35 #define MEMORY_AREA_CONTINUOUS_MEMORY (2)
36 #define MEMORY_AREA_NO_CACHE (3)
37 #define MEMORY_AREA_IO_MAPPING (4)
38 #define MEMORY_AREA_SYSTEM (5)
39 #define MEMORY_AREA_MDL_MAPPING (7)
40 #define MEMORY_AREA_VIRTUAL_MEMORY (8)
41 #define MEMORY_AREA_CACHE_SEGMENT (9)
42 #define MEMORY_AREA_SHARED_DATA (10)
43 #define MEMORY_AREA_KERNEL_STACK (11)
44 #define MEMORY_AREA_PAGED_POOL (12)
45 #define MEMORY_AREA_NO_ACCESS (13)
46 #define MEMORY_AREA_PEB_OR_TEB (14)
48 #define MM_PHYSICAL_PAGE_MPW_PENDING (0x8)
50 #define MM_CORE_DUMP_TYPE_NONE (0x0)
51 #define MM_CORE_DUMP_TYPE_MINIMAL (0x1)
52 #define MM_CORE_DUMP_TYPE_FULL (0x2)
54 #define MM_PAGEOP_PAGEIN (1)
55 #define MM_PAGEOP_PAGEOUT (2)
56 #define MM_PAGEOP_PAGESYNCH (3)
57 #define MM_PAGEOP_ACCESSFAULT (4)
59 /* Number of list heads to use */
60 #define MI_FREE_POOL_LISTS 4
62 /* Signature of free pool blocks */
63 #define MM_FREE_POOL_TAG TAG('F', 'r', 'p', 'l')
65 #define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) \
68 #define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \
69 ((((x)) % (4*1024*1024)) / (4*1024))
71 #define NR_SECTION_PAGE_TABLES 1024
72 #define NR_SECTION_PAGE_ENTRIES 1024
74 #define TEB_BASE 0x7FFDE000
76 /* Although Microsoft says this isn't hardcoded anymore,
77 they won't be able to change it. Stuff depends on it */
78 #define MM_VIRTMEM_GRANULARITY (64 * 1024)
80 #define STATUS_MM_RESTART_OPERATION ((NTSTATUS)0xD0000001)
83 * Additional flags for protection attributes
85 #define PAGE_WRITETHROUGH (1024)
86 #define PAGE_SYSTEM (2048)
88 #define SEC_PHYSICALMEMORY (0x80000000)
90 #define MM_PAGEFILE_SEGMENT (0x1)
91 #define MM_DATAFILE_SEGMENT (0x2)
97 #define MC_MAXIMUM (4)
99 #define PAGED_POOL_MASK 1
100 #define MUST_SUCCEED_POOL_MASK 2
101 #define CACHE_ALIGNED_POOL_MASK 4
102 #define QUOTA_POOL_MASK 8
103 #define SESSION_POOL_MASK 32
104 #define VERIFIER_POOL_MASK 64
106 #define MM_PAGED_POOL_SIZE (100*1024*1024)
107 #define MM_NONPAGED_POOL_SIZE (100*1024*1024)
110 * Paged and non-paged pools are 8-byte aligned
112 #define MM_POOL_ALIGNMENT 8
115 * Maximum size of the kmalloc area (this is totally arbitary)
117 #define MM_KERNEL_MAP_SIZE (16*1024*1024)
118 #define MM_KERNEL_MAP_BASE (0xf0c00000)
121 * FIXME - different architectures have different cache line sizes...
123 #define MM_CACHE_LINE_SIZE 32
125 #define MM_ROUND_UP(x,s) \
126 ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
128 #define MM_ROUND_DOWN(x,s) \
129 ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
131 #define PAGE_FLAGS_VALID_FROM_USER_MODE \
136 PAGE_EXECUTE_READ | \
137 PAGE_EXECUTE_READWRITE | \
138 PAGE_EXECUTE_WRITECOPY | \
143 #define PAGE_IS_READABLE \
147 PAGE_EXECUTE_READ | \
148 PAGE_EXECUTE_READWRITE | \
149 PAGE_EXECUTE_WRITECOPY)
151 #define PAGE_IS_WRITABLE \
154 PAGE_EXECUTE_READWRITE | \
155 PAGE_EXECUTE_WRITECOPY)
157 #define PAGE_IS_EXECUTABLE \
159 PAGE_EXECUTE_READ | \
160 PAGE_EXECUTE_READWRITE | \
161 PAGE_EXECUTE_WRITECOPY)
163 #define PAGE_IS_WRITECOPY \
165 PAGE_EXECUTE_WRITECOPY)
169 ULONG Entry
[NR_SECTION_PAGE_ENTRIES
];
170 } SECTION_PAGE_TABLE
, *PSECTION_PAGE_TABLE
;
174 PSECTION_PAGE_TABLE PageTables
[NR_SECTION_PAGE_TABLES
];
175 } SECTION_PAGE_DIRECTORY
, *PSECTION_PAGE_DIRECTORY
;
177 typedef struct _MM_SECTION_SEGMENT
179 LONG FileOffset
; /* start offset into the file for image sections */
180 ULONG_PTR VirtualAddress
; /* dtart offset into the address range for image sections */
181 ULONG RawLength
; /* length of the segment which is part of the mapped file */
182 ULONG Length
; /* absolute length of the segment */
184 FAST_MUTEX Lock
; /* lock which protects the page directory */
185 ULONG ReferenceCount
;
186 SECTION_PAGE_DIRECTORY PageDirectory
;
188 ULONG Characteristics
;
190 } MM_SECTION_SEGMENT
, *PMM_SECTION_SEGMENT
;
192 typedef struct _MM_IMAGE_SECTION_OBJECT
195 ULONG_PTR StackReserve
;
196 ULONG_PTR StackCommit
;
197 ULONG_PTR EntryPoint
;
199 USHORT ImageCharacteristics
;
200 USHORT MinorSubsystemVersion
;
201 USHORT MajorSubsystemVersion
;
206 PMM_SECTION_SEGMENT Segments
;
207 } MM_IMAGE_SECTION_OBJECT
, *PMM_IMAGE_SECTION_OBJECT
;
209 typedef struct _ROS_SECTION_OBJECT
213 LARGE_INTEGER MaximumSize
;
214 ULONG SectionPageProtection
;
215 ULONG AllocationAttributes
;
216 PFILE_OBJECT FileObject
;
219 PMM_IMAGE_SECTION_OBJECT ImageSection
;
220 PMM_SECTION_SEGMENT Segment
;
222 } ROS_SECTION_OBJECT
, *PROS_SECTION_OBJECT
;
224 typedef struct _MEMORY_AREA
226 PVOID StartingAddress
;
228 struct _MEMORY_AREA
*Parent
;
229 struct _MEMORY_AREA
*LeftChild
;
230 struct _MEMORY_AREA
*RightChild
;
234 BOOLEAN DeleteInProgress
;
240 ROS_SECTION_OBJECT
* Section
;
242 PMM_SECTION_SEGMENT Segment
;
243 BOOLEAN WriteCopyView
;
244 LIST_ENTRY RegionListHead
;
248 LIST_ENTRY RegionListHead
;
251 } MEMORY_AREA
, *PMEMORY_AREA
;
253 typedef struct _MADDRESS_SPACE
255 PMEMORY_AREA MemoryAreaRoot
;
257 struct _EPROCESS
* Process
;
258 PUSHORT PageTableRefCountTable
;
259 ULONG PageTableRefCountTableSize
;
260 } MADDRESS_SPACE
, *PMADDRESS_SPACE
;
270 ULONG PagingRequestsInLastMinute
;
271 ULONG PagingRequestsInLastFiveMinutes
;
272 ULONG PagingRequestsInLastFifteenMinutes
;
275 typedef struct _PHYSICAL_PAGE
284 ULONG StartOfAllocation
: 1;
285 ULONG EndOfAllocation
: 1;
291 LIST_ENTRY ListEntry
;
292 ULONG ReferenceCount
;
293 SWAPENTRY SavedSwapEntry
;
296 struct _MM_RMAP_ENTRY
* RmapListHead
;
298 PHYSICAL_PAGE
, *PPHYSICAL_PAGE
;
300 extern MM_STATS MmStats
;
302 typedef struct _MM_PAGEOP
304 /* Type of operation. */
306 /* Number of threads interested in this operation. */
307 ULONG ReferenceCount
;
308 /* Event that will be set when the operation is completed. */
309 KEVENT CompletionEvent
;
310 /* Status of the operation once it is completed. */
312 /* TRUE if the operation was abandoned. */
314 /* The memory area to be affected by the operation. */
317 struct _MM_PAGEOP
* Next
;
318 struct _ETHREAD
* Thread
;
320 * These fields are used to identify the operation if it is against a
321 * virtual memory area.
326 * These fields are used to identify the operation if it is against a
329 PMM_SECTION_SEGMENT Segment
;
331 } MM_PAGEOP
, *PMM_PAGEOP
;
333 typedef struct _MM_MEMORY_CONSUMER
337 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
);
338 } MM_MEMORY_CONSUMER
, *PMM_MEMORY_CONSUMER
;
340 typedef struct _MM_REGION
345 LIST_ENTRY RegionListEntry
;
346 } MM_REGION
, *PMM_REGION
;
348 /* Entry describing free pool memory */
349 typedef struct _MMFREE_POOL_ENTRY
354 struct _MMFREE_POOL_ENTRY
*Owner
;
355 } MMFREE_POOL_ENTRY
, *PMMFREE_POOL_ENTRY
;
357 /* Paged pool information */
358 typedef struct _MM_PAGED_POOL_INFO
360 PRTL_BITMAP PagedPoolAllocationMap
;
361 PRTL_BITMAP EndOfPagedPoolBitmap
;
362 PMMPTE FirstPteForPagedPool
;
363 PMMPTE LastPteForPagedPool
;
364 PMMPTE NextPdeForPagedPoolExpansion
;
366 SIZE_T PagedPoolCommit
;
367 SIZE_T AllocatedPagedPool
;
368 } MM_PAGED_POOL_INFO
, *PMM_PAGED_POOL_INFO
;
370 extern MM_MEMORY_CONSUMER MiMemoryConsumers
[MC_MAXIMUM
];
373 (*PMM_ALTER_REGION_FUNC
)(
374 PMADDRESS_SPACE AddressSpace
,
384 (*PMM_FREE_PAGE_FUNC
)(
386 PMEMORY_AREA MemoryArea
,
393 /* aspace.c ******************************************************************/
397 MmLockAddressSpace(PMADDRESS_SPACE AddressSpace
);
401 MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace
);
405 MmInitializeKernelAddressSpace(VOID
);
409 MmGetCurrentAddressSpace(VOID
);
413 MmGetKernelAddressSpace(VOID
);
417 MmInitializeAddressSpace(
418 struct _EPROCESS
* Process
,
419 PMADDRESS_SPACE AddressSpace
);
423 MmDestroyAddressSpace(PMADDRESS_SPACE AddressSpace
);
425 /* marea.c *******************************************************************/
429 MmInitMemoryAreas(VOID
);
434 PMADDRESS_SPACE AddressSpace
,
439 PMEMORY_AREA
*Result
,
440 BOOLEAN FixedAddress
,
441 ULONG AllocationFlags
,
442 PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
447 MmLocateMemoryAreaByAddress(
448 PMADDRESS_SPACE AddressSpace
,
455 PMADDRESS_SPACE AddressSpace
,
462 PMADDRESS_SPACE AddressSpace
,
463 PMEMORY_AREA MemoryArea
,
464 PMM_FREE_PAGE_FUNC FreePage
,
465 PVOID FreePageContext
470 MmFreeMemoryAreaByPtr(
471 PMADDRESS_SPACE AddressSpace
,
473 PMM_FREE_PAGE_FUNC FreePage
,
474 PVOID FreePageContext
479 MmDumpMemoryAreas(PMADDRESS_SPACE AddressSpace
);
483 MmLocateMemoryAreaByRegion(
484 PMADDRESS_SPACE AddressSpace
,
492 PMADDRESS_SPACE AddressSpace
,
494 ULONG_PTR Granularity
,
500 MmReleaseMemoryAreaIfDecommitted(
501 struct _EPROCESS
*Process
,
502 PMADDRESS_SPACE AddressSpace
,
508 MmMapMemoryArea(PVOID BaseAddress
,
513 /* npool.c *******************************************************************/
517 MiDebugDumpNonPagedPool(BOOLEAN NewOnly
);
521 MiDebugDumpNonPagedPoolStats(BOOLEAN NewOnly
);
525 MiInitializeNonPagedPool(VOID
);
530 IN POOL_TYPE PoolType
,
531 IN SIZE_T SizeInBytes
537 IN PVOID VirtualAddress
543 IN PVOID StartingAddress
553 /* pool.c *******************************************************************/
557 ExAllocateNonPagedPoolWithTag(
566 ExAllocatePagedPoolWithTag(
574 ExFreeNonPagedPool(PVOID block
);
578 ExFreePagedPool(IN PVOID Block
);
582 MmInitializePagedPool(VOID
);
586 MiAllocateSpecialPool(
587 IN POOL_TYPE PoolType
,
588 IN SIZE_T NumberOfBytes
,
596 IN POOL_TYPE PoolType
,
597 IN ULONG CurrentMaxQuota
,
598 OUT PULONG NewMaxQuota
601 /* mdl.c *********************************************************************/
610 /* mminit.c ******************************************************************/
614 MiShutdownMemoryManager(VOID
);
624 MmInitSystem(IN ULONG Phase
,
625 IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
629 MiFreeInitMemory(VOID
);
633 MmInitializeMdlImplementation(VOID
);
635 /* pagefile.c ****************************************************************/
639 MmAllocSwapPage(VOID
);
643 MmDereserveSwapPages(ULONG Nr
);
647 MmFreeSwapPage(SWAPENTRY Entry
);
651 MmInitPagingFile(VOID
);
662 MmReserveSwapPages(ULONG Nr
);
675 ULONG BugCodeParameter1
,
676 ULONG BugCodeParameter2
,
677 ULONG BugCodeParameter3
,
678 ULONG BugCodeParameter4
,
679 struct _KTRAP_FRAME
* TrapFrame
684 MmIsAvailableSwapPage(VOID
);
688 MmShowOutOfSpaceMessagePagingFile(VOID
);
690 /* process.c ****************************************************************/
694 MmInitializeProcessAddressSpace(
695 IN PEPROCESS Process
,
696 IN PEPROCESS Clone OPTIONAL
,
697 IN PVOID Section OPTIONAL
,
699 IN POBJECT_NAME_INFORMATION
*AuditName OPTIONAL
704 MmCreatePeb(struct _EPROCESS
*Process
);
709 struct _EPROCESS
*Process
,
711 PINITIAL_TEB InitialTeb
717 struct _EPROCESS
*Process
,
723 MmCleanProcessAddressSpace(IN PEPROCESS Process
);
727 MmDeleteProcessAddressSpace(IN PEPROCESS Process
);
731 MmGetSessionLocaleId(VOID
);
735 MmSetMemoryPriorityProcess(
736 IN PEPROCESS Process
,
737 IN UCHAR MemoryPriority
740 /* i386/pfault.c *************************************************************/
752 /* mm.c **********************************************************************/
757 IN BOOLEAN StoreInstruction
,
759 IN KPROCESSOR_MODE Mode
,
760 IN PVOID TrapInformation
763 /* anonmem.c *****************************************************************/
767 MmNotPresentFaultVirtualMemory(
768 PMADDRESS_SPACE AddressSpace
,
769 MEMORY_AREA
* MemoryArea
,
776 MmPageOutVirtualMemory(
777 PMADDRESS_SPACE AddressSpace
,
778 PMEMORY_AREA MemoryArea
,
780 struct _MM_PAGEOP
* PageOp
786 PMEMORY_AREA MemoryArea
,
788 PMEMORY_BASIC_INFORMATION Info
,
795 struct _EPROCESS
* Process
,
796 PMEMORY_AREA MemoryArea
802 PMADDRESS_SPACE AddressSpace
,
803 PMEMORY_AREA MemoryArea
,
812 MmWritePageVirtualMemory(
813 PMADDRESS_SPACE AddressSpace
,
819 /* kmap.c ********************************************************************/
823 ExAllocatePage(VOID
);
827 ExUnmapPage(PVOID Addr
);
831 ExAllocatePageWithPhysPage(PFN_TYPE Page
);
842 MiZeroPage(PFN_TYPE Page
);
844 /* memsafe.s *****************************************************************/
848 MmSafeReadPtr(PVOID Source
);
850 /* pageop.c ******************************************************************/
854 MmReleasePageOp(PMM_PAGEOP PageOp
);
862 PMM_SECTION_SEGMENT Segment
,
874 PMM_SECTION_SEGMENT Segment
,
880 MmInitializePageOp(VOID
);
882 /* process.c *****************************************************************/
886 MmCreateKernelStack(BOOLEAN GuiStack
, UCHAR Node
);
890 MmDeleteKernelStack(PVOID Stack
,
893 /* balace.c ******************************************************************/
897 MmInitializeMemoryConsumer(
899 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
)
904 MmInitializeBalancer(
905 ULONG NrAvailablePages
,
911 MmReleasePageMemoryConsumer(
918 MmRequestPageMemoryConsumer(
921 PPFN_TYPE AllocatedPage
926 MiInitBalancerThread(VOID
);
930 MmRebalanceMemoryConsumers(VOID
);
932 /* rmap.c **************************************************************/
936 MmSetRmapListHeadPage(
938 struct _MM_RMAP_ENTRY
* ListHead
941 struct _MM_RMAP_ENTRY
*
943 MmGetRmapListHeadPage(PFN_TYPE Page
);
949 struct _EPROCESS
*Process
,
958 VOID (*DeleteMapping
)(PVOID Context
, struct _EPROCESS
*Process
, PVOID Address
)
965 struct _EPROCESS
*Process
,
971 MmInitializeRmapList(VOID
);
975 MmSetCleanAllRmaps(PFN_TYPE Page
);
979 MmSetDirtyAllRmaps(PFN_TYPE Page
);
983 MmIsDirtyPageRmap(PFN_TYPE Page
);
987 MmWritePagePhysicalAddress(PFN_TYPE Page
);
991 MmPageOutPhysicalAddress(PFN_TYPE Page
);
993 /* freelist.c **********************************************************/
995 #define ASSERT_PFN(x) ASSERT((x)->Flags.Type != 0)
999 MiGetPfnEntry(IN PFN_TYPE Pfn
)
1001 PPHYSICAL_PAGE Page
;
1002 extern PPHYSICAL_PAGE MmPageArray
;
1003 extern ULONG MmPageArraySize
;
1005 /* Make sure the PFN number is valid */
1006 ASSERT(Pfn
<= MmPageArraySize
);
1009 Page
= &MmPageArray
[Pfn
];
1011 /* Make sure it's valid */
1020 MmGetLRUNextUserPage(PFN_TYPE PreviousPage
);
1024 MmGetLRUFirstUserPage(VOID
);
1028 MmInsertLRULastUserPage(PFN_TYPE Page
);
1032 MmRemoveLRUUserPage(PFN_TYPE Page
);
1036 MmLockPage(PFN_TYPE Page
);
1040 MmLockPageUnsafe(PFN_TYPE Page
);
1044 MmUnlockPage(PFN_TYPE Page
);
1048 MmGetLockCountPage(PFN_TYPE Page
);
1052 MmInitializePageList(
1058 MmGetContinuousPages(
1059 ULONG NumberOfBytes
,
1060 PHYSICAL_ADDRESS LowestAcceptableAddress
,
1061 PHYSICAL_ADDRESS HighestAcceptableAddress
,
1062 PHYSICAL_ADDRESS BoundaryAddressMultiple
1067 MmZeroPageThreadMain(
1071 /* i386/page.c *********************************************************/
1075 MmCreateHyperspaceMapping(PFN_TYPE Page
);
1079 MmChangeHyperspaceMapping(
1086 MmDeleteHyperspaceMapping(PVOID Address
);
1090 MmCreateVirtualMappingForKernel(
1099 MmCommitPagedPoolAddress(
1106 MmCreateVirtualMapping(
1107 struct _EPROCESS
* Process
,
1116 MmCreateVirtualMappingUnsafe(
1117 struct _EPROCESS
* Process
,
1127 struct _EPROCESS
* Process
,
1133 struct _EPROCESS
* Process
,
1141 struct _EPROCESS
* Process
,
1147 MmInitGlobalKernelPageDirectory(VOID
);
1151 MmDisableVirtualMapping(
1152 struct _EPROCESS
*Process
,
1160 MmEnableVirtualMapping(
1161 struct _EPROCESS
*Process
,
1167 MmRawDeleteVirtualMapping(PVOID Address
);
1171 MmDeletePageFileMapping(
1172 struct _EPROCESS
*Process
,
1174 SWAPENTRY
* SwapEntry
1179 MmCreatePageFileMapping(
1180 struct _EPROCESS
*Process
,
1188 struct _EPROCESS
*Process
,
1194 MmTransferOwnershipPage(
1202 struct _EPROCESS
*Process
,
1210 SWAPENTRY SavedSwapEntry
1215 MmAllocPagesSpecifyRange(
1217 PHYSICAL_ADDRESS LowestAddress
,
1218 PHYSICAL_ADDRESS HighestAddress
,
1219 ULONG NumberOfPages
,
1225 MmDereferencePage(PFN_TYPE Page
);
1229 MmReferencePage(PFN_TYPE Page
);
1233 MmReferencePageUnsafe(PFN_TYPE Page
);
1237 MmIsAccessedAndResetAccessPage(
1238 struct _EPROCESS
*Process
,
1244 MmGetReferenceCountPage(PFN_TYPE Page
);
1248 MmIsPageInUse(PFN_TYPE Page
);
1258 MmGetFlagsPage(PFN_TYPE Page
);
1262 MmSetSavedSwapEntryPage(
1264 SWAPENTRY SavedSwapEntry
);
1268 MmGetSavedSwapEntryPage(PFN_TYPE Page
);
1273 struct _EPROCESS
*Process
,
1279 MmCreatePageTable(PVOID PAddress
);
1284 struct _EPROCESS
*Process
,
1291 struct _EPROCESS
*Process
,
1297 MmCreateProcessAddressSpace(
1300 IN PLARGE_INTEGER DirectoryTableBase
1305 MmInitializeHandBuiltProcess(
1306 IN PEPROCESS Process
,
1307 IN PLARGE_INTEGER DirectoryTableBase
1313 MmInitializeHandBuiltProcess2(
1314 IN PEPROCESS Process
1319 MmReleaseMmInfo(struct _EPROCESS
*Process
);
1323 Mmi386ReleaseMmInfo(struct _EPROCESS
*Process
);
1327 MmDeleteVirtualMapping(
1328 struct _EPROCESS
*Process
,
1338 struct _EPROCESS
*Process
,
1344 MmMarkPageMapped(PFN_TYPE Page
);
1348 MmMarkPageUnmapped(PFN_TYPE Page
);
1353 struct _EPROCESS
*Process
,
1360 MiInitPageDirectoryMap(VOID
);
1364 MiGetUserPageDirectoryCount(VOID
);
1366 /* wset.c ********************************************************************/
1375 /* region.c ************************************************************/
1380 PMADDRESS_SPACE AddressSpace
,
1382 PLIST_ENTRY RegionListHead
,
1387 PMM_ALTER_REGION_FUNC AlterFunc
1393 PLIST_ENTRY RegionListHead
,
1403 PLIST_ENTRY RegionListHead
,
1405 PVOID
* RegionBaseAddress
1408 /* section.c *****************************************************************/
1412 MmGetFileObjectForSection(
1413 IN PROS_SECTION_OBJECT Section
1417 MmGetFileNameForAddress(
1419 OUT PUNICODE_STRING ModuleName
1424 MmGetFileNameForSection(
1425 IN PROS_SECTION_OBJECT Section
,
1426 OUT POBJECT_NAME_INFORMATION
*ModuleName
1439 PMEMORY_AREA MemoryArea
,
1441 PMEMORY_BASIC_INFORMATION Info
,
1447 MmProtectSectionView(
1448 PMADDRESS_SPACE AddressSpace
,
1449 PMEMORY_AREA MemoryArea
,
1458 MmWritePageSectionView(
1459 PMADDRESS_SPACE AddressSpace
,
1467 MmInitSectionImplementation(VOID
);
1471 MmNotPresentFaultSectionView(
1472 PMADDRESS_SPACE AddressSpace
,
1473 MEMORY_AREA
* MemoryArea
,
1480 MmPageOutSectionView(
1481 PMADDRESS_SPACE AddressSpace
,
1482 PMEMORY_AREA MemoryArea
,
1484 struct _MM_PAGEOP
*PageOp
1489 MmCreatePhysicalMemorySection(VOID
);
1493 MmAccessFaultSectionView(
1494 PMADDRESS_SPACE AddressSpace
,
1495 MEMORY_AREA
* MemoryArea
,
1502 MmFreeSectionSegments(PFILE_OBJECT FileObject
);
1504 /* mpw.c *********************************************************************/
1508 MmInitMpwThread(VOID
);
1512 MmInitBsmThread(VOID
);
1514 /* pager.c *******************************************************************/
1518 MiIsPagerThread(VOID
);
1522 MiStartPagerThread(VOID
);
1526 MiStopPagerThread(VOID
);
1530 MiQueryVirtualMemory(
1531 IN HANDLE ProcessHandle
,
1533 IN MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass
,
1534 OUT PVOID VirtualMemoryInformation
,
1536 OUT PULONG ResultLength
1539 /* sysldr.c ******************************************************************/
1543 MiReloadBootLoadedDrivers(
1544 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1549 MiInitializeLoadedModuleList(
1550 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1556 IN PUNICODE_STRING FileName
,
1557 IN PUNICODE_STRING NamePrefix OPTIONAL
,
1558 IN PUNICODE_STRING LoadedName OPTIONAL
,
1560 OUT PVOID
*ModuleObject
,
1561 OUT PVOID
*ImageBaseAddress
1566 MmUnloadSystemImage(
1567 IN PVOID ImageHandle
1573 IN HANDLE ImageHandle
,
1574 IN BOOLEAN PurgeSection
1580 MiSyncThreadProcessViews(IN PVOID Process
,
1584 MmUpdatePageDir((PEPROCESS
)Process
, Address
, Size
);