2 * Higher level memory managment definitions
5 #ifndef __INCLUDE_INTERNAL_MM_H
6 #define __INCLUDE_INTERNAL_MM_H
8 #include <internal/ntoskrnl.h>
9 #include <internal/arch/mm.h>
11 /* TYPES *********************************************************************/
13 extern ULONG MiFreeSwapPages
;
14 extern ULONG MiUsedSwapPages
;
15 extern ULONG MmPagedPoolSize
;
16 extern ULONG MmTotalPagedPoolQuota
;
17 extern ULONG MmTotalNonPagedPoolQuota
;
21 struct _MM_RMAP_ENTRY
;
23 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)
41 #define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) \
43 #define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \
44 ((((x)) % (4*1024*1024)) / (4*1024))
46 #define NR_SECTION_PAGE_TABLES (1024)
47 #define NR_SECTION_PAGE_ENTRIES (1024)
50 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
53 #define MM_VIRTMEM_GRANULARITY (64 * 1024) /* Although Microsoft says this isn't hardcoded anymore,
54 they won't be able to change it. Stuff depends on it */
56 #define STATUS_MM_RESTART_OPERATION ((NTSTATUS)0xD0000001)
59 * Additional flags for protection attributes
61 #define PAGE_WRITETHROUGH (1024)
62 #define PAGE_SYSTEM (2048)
63 #define PAGE_FLAGS_VALID_FROM_USER_MODE (PAGE_READONLY | \
68 PAGE_EXECUTE_READWRITE | \
69 PAGE_EXECUTE_WRITECOPY | \
74 #define PAGE_IS_READABLE (PAGE_READONLY | \
78 PAGE_EXECUTE_READWRITE | \
79 PAGE_EXECUTE_WRITECOPY)
81 #define PAGE_IS_WRITABLE (PAGE_READWRITE | \
83 PAGE_EXECUTE_READWRITE | \
84 PAGE_EXECUTE_WRITECOPY)
86 #define PAGE_IS_EXECUTABLE (PAGE_EXECUTE | \
88 PAGE_EXECUTE_READWRITE | \
89 PAGE_EXECUTE_WRITECOPY)
91 #define PAGE_IS_WRITECOPY (PAGE_WRITECOPY | \
92 PAGE_EXECUTE_WRITECOPY)
96 ULONG Entry
[NR_SECTION_PAGE_ENTRIES
];
97 } SECTION_PAGE_TABLE
, *PSECTION_PAGE_TABLE
;
101 PSECTION_PAGE_TABLE PageTables
[NR_SECTION_PAGE_TABLES
];
102 } SECTION_PAGE_DIRECTORY
, *PSECTION_PAGE_DIRECTORY
;
104 #define SEC_PHYSICALMEMORY (0x80000000)
106 #define MM_PAGEFILE_SEGMENT (0x1)
107 #define MM_DATAFILE_SEGMENT (0x2)
109 typedef struct _MM_SECTION_SEGMENT
112 ULONG_PTR VirtualAddress
;
117 ULONG ReferenceCount
;
118 SECTION_PAGE_DIRECTORY PageDirectory
;
120 ULONG Characteristics
;
122 } MM_SECTION_SEGMENT
, *PMM_SECTION_SEGMENT
;
124 typedef struct _MM_IMAGE_SECTION_OBJECT
127 ULONG_PTR StackReserve
;
128 ULONG_PTR StackCommit
;
129 ULONG_PTR EntryPoint
;
131 ULONG ImageCharacteristics
;
132 USHORT MinorSubsystemVersion
;
133 USHORT MajorSubsystemVersion
;
137 PMM_SECTION_SEGMENT Segments
;
138 } MM_IMAGE_SECTION_OBJECT
, *PMM_IMAGE_SECTION_OBJECT
;
140 typedef struct _SECTION_OBJECT
144 LARGE_INTEGER MaximumSize
;
145 ULONG SectionPageProtection
;
146 ULONG AllocationAttributes
;
147 PFILE_OBJECT FileObject
;
148 LIST_ENTRY ViewListHead
;
149 KSPIN_LOCK ViewListLock
;
152 PMM_IMAGE_SECTION_OBJECT ImageSection
;
153 PMM_SECTION_SEGMENT Segment
;
159 typedef struct _SECTION_OBJECT
*PSECTION_OBJECT
;
161 typedef struct _EPROCESS_QUOTA_BLOCK
{
162 KSPIN_LOCK QuotaLock
;
163 ULONG ReferenceCount
;
164 ULONG QuotaPeakPoolUsage
[2];
165 ULONG QuotaPoolUsage
[2];
166 ULONG QuotaPoolLimit
[2];
167 ULONG PeakPagefileUsage
;
170 } EPROCESS_QUOTA_BLOCK
, *PEPROCESS_QUOTA_BLOCK
;
176 typedef struct _PAGEFAULT_HISTORY
182 struct _PROCESS_WS_WATCH_INFORMATION WatchInfo
[1];
183 } PAGEFAULT_HISTORY
, *PPAGEFAULT_HISTORY
;
185 #endif /* __USE_W32API */
187 typedef struct _MEMORY_AREA
189 PVOID StartingAddress
;
191 struct _MEMORY_AREA
*Parent
;
192 struct _MEMORY_AREA
*LeftChild
;
193 struct _MEMORY_AREA
*RightChild
;
197 struct _EPROCESS
* Process
; /* FIXME: We don't need this! */
198 BOOLEAN DeleteInProgress
;
204 SECTION_OBJECT
* Section
;
206 LIST_ENTRY ViewListEntry
;
207 PMM_SECTION_SEGMENT Segment
;
208 BOOLEAN WriteCopyView
;
209 LIST_ENTRY RegionListHead
;
213 LIST_ENTRY RegionListHead
;
216 } MEMORY_AREA
, *PMEMORY_AREA
;
218 typedef struct _MADDRESS_SPACE
220 PMEMORY_AREA MemoryAreaRoot
;
223 struct _EPROCESS
* Process
;
224 PUSHORT PageTableRefCountTable
;
225 ULONG PageTableRefCountTableSize
;
226 } MADDRESS_SPACE
, *PMADDRESS_SPACE
;
228 typedef struct _KNODE
{
231 ULONG MmShiftedColor
;
233 SLIST_HEADER DeadStackList
;
234 SLIST_HEADER PfnDereferenceSListHead
;
235 struct _SINGLE_LIST_ENTRY
*PfnDeferredList
;
245 extern PVOID EXPORTED MmSystemRangeStart
;
247 extern PVOID IMPORTED MmSystemRangeStart
;
250 #endif /* __USE_W32API */
256 ULONG NrReservedPages
;
261 ULONG PagingRequestsInLastMinute
;
262 ULONG PagingRequestsInLastFiveMinutes
;
263 ULONG PagingRequestsInLastFifteenMinutes
;
266 extern MM_STATS MmStats
;
268 #define MM_PHYSICAL_PAGE_MPW_PENDING (0x8)
270 #define MM_PAGEOP_PAGEIN (1)
271 #define MM_PAGEOP_PAGEOUT (2)
272 #define MM_PAGEOP_PAGESYNCH (3)
273 #define MM_PAGEOP_ACCESSFAULT (4)
275 typedef struct _MM_PAGEOP
277 /* Type of operation. */
279 /* Number of threads interested in this operation. */
280 ULONG ReferenceCount
;
281 /* Event that will be set when the operation is completed. */
282 KEVENT CompletionEvent
;
283 /* Status of the operation once it is completed. */
285 /* TRUE if the operation was abandoned. */
287 /* The memory area to be affected by the operation. */
290 struct _MM_PAGEOP
* Next
;
291 struct _ETHREAD
* Thread
;
293 * These fields are used to identify the operation if it is against a
294 * virtual memory area.
299 * These fields are used to identify the operation if it is against a
302 PMM_SECTION_SEGMENT Segment
;
304 } MM_PAGEOP
, *PMM_PAGEOP
;
309 #define MC_NPPOOL (3)
310 #define MC_MAXIMUM (4)
312 typedef struct _MM_MEMORY_CONSUMER
316 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
);
318 MM_MEMORY_CONSUMER
, *PMM_MEMORY_CONSUMER
;
320 extern MM_MEMORY_CONSUMER MiMemoryConsumers
[MC_MAXIMUM
];
322 extern PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress
;
325 typedef VOID (*PMM_ALTER_REGION_FUNC
)(PMADDRESS_SPACE AddressSpace
,
326 PVOID BaseAddress
, ULONG Length
,
327 ULONG OldType
, ULONG OldProtect
,
328 ULONG NewType
, ULONG NewProtect
);
330 typedef struct _MM_REGION
335 LIST_ENTRY RegionListEntry
;
336 } MM_REGION
, *PMM_REGION
;
338 typedef VOID (*PMM_FREE_PAGE_FUNC
)(PVOID Context
, PMEMORY_AREA MemoryArea
,
339 PVOID Address
, PFN_TYPE Page
,
340 SWAPENTRY SwapEntry
, BOOLEAN Dirty
);
344 /* aspace.c ******************************************************************/
346 VOID
MmLockAddressSpace(PMADDRESS_SPACE AddressSpace
);
348 VOID
MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace
);
350 VOID
MmInitializeKernelAddressSpace(VOID
);
352 PMADDRESS_SPACE
MmGetCurrentAddressSpace(VOID
);
354 PMADDRESS_SPACE
MmGetKernelAddressSpace(VOID
);
356 NTSTATUS
MmInitializeAddressSpace(struct _EPROCESS
* Process
,
357 PMADDRESS_SPACE AddressSpace
);
359 NTSTATUS
MmDestroyAddressSpace(PMADDRESS_SPACE AddressSpace
);
361 /* marea.c *******************************************************************/
363 NTSTATUS INIT_FUNCTION
364 MmInitMemoryAreas(VOID
);
368 struct _EPROCESS
* Process
,
369 PMADDRESS_SPACE AddressSpace
,
374 PMEMORY_AREA
*Result
,
375 BOOLEAN FixedAddress
,
377 PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
);
380 MmLocateMemoryAreaByAddress(
381 PMADDRESS_SPACE AddressSpace
,
386 PMADDRESS_SPACE AddressSpace
,
391 PMADDRESS_SPACE AddressSpace
,
392 PMEMORY_AREA MemoryArea
,
393 PMM_FREE_PAGE_FUNC FreePage
,
394 PVOID FreePageContext
);
397 MmFreeMemoryAreaByPtr(
398 PMADDRESS_SPACE AddressSpace
,
400 PMM_FREE_PAGE_FUNC FreePage
,
401 PVOID FreePageContext
);
404 MmDumpMemoryAreas(PMADDRESS_SPACE AddressSpace
);
407 MmLocateMemoryAreaByRegion(
408 PMADDRESS_SPACE AddressSpace
,
414 PMADDRESS_SPACE AddressSpace
,
416 ULONG_PTR Granularity
,
420 MmReleaseMemoryAreaIfDecommitted(
422 PMADDRESS_SPACE AddressSpace
,
425 /* npool.c *******************************************************************/
427 VOID
MiDebugDumpNonPagedPool(BOOLEAN NewOnly
);
429 VOID
MiDebugDumpNonPagedPoolStats(BOOLEAN NewOnly
);
431 VOID
MiInitializeNonPagedPool(VOID
);
433 PVOID
MmGetMdlPageAddress(PMDL Mdl
, PVOID Offset
);
435 /* pool.c *******************************************************************/
440 IN POOL_TYPE PoolType
,
441 IN ULONG CurrentMaxQuota
,
442 OUT PULONG NewMaxQuota
445 /* mdl.c *********************************************************************/
447 VOID
MmBuildMdlFromPages(PMDL Mdl
, PULONG Pages
);
449 /* mminit.c ******************************************************************/
451 VOID
MiShutdownMemoryManager(VOID
);
453 VOID
MmInit1(ULONG FirstKernelPhysAddress
,
454 ULONG LastKernelPhysAddress
,
455 ULONG LastKernelAddress
,
456 PADDRESS_RANGE BIOSMemoryMap
,
457 ULONG AddressRangeCount
,
464 VOID
MiFreeInitMemory(VOID
);
466 VOID
MmInitializeMdlImplementation(VOID
);
468 /* pagefile.c ****************************************************************/
470 SWAPENTRY
MmAllocSwapPage(VOID
);
472 VOID
MmDereserveSwapPages(ULONG Nr
);
474 VOID
MmFreeSwapPage(SWAPENTRY Entry
);
476 VOID
MmInitPagingFile(VOID
);
478 NTSTATUS
MmReadFromSwapPage(SWAPENTRY SwapEntry
, PFN_TYPE Page
);
480 BOOLEAN
MmReserveSwapPages(ULONG Nr
);
482 NTSTATUS
MmWriteToSwapPage(SWAPENTRY SwapEntry
, PFN_TYPE Page
);
485 MmDumpToPagingFile(ULONG BugCode
,
486 ULONG BugCodeParameter1
,
487 ULONG BugCodeParameter2
,
488 ULONG BugCodeParameter3
,
489 ULONG BugCodeParameter4
,
490 struct _KTRAP_FRAME
* TrapFrame
);
492 BOOLEAN
MmIsAvailableSwapPage(VOID
);
494 VOID
MmShowOutOfSpaceMessagePagingFile(VOID
);
496 /* i386/pfault.c *************************************************************/
498 NTSTATUS
MmPageFault(ULONG Cs
,
504 /* mm.c **********************************************************************/
506 NTSTATUS
MmAccessFault(KPROCESSOR_MODE Mode
,
510 NTSTATUS
MmNotPresentFault(KPROCESSOR_MODE Mode
,
514 /* anonmem.c *****************************************************************/
516 NTSTATUS
MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace
,
517 MEMORY_AREA
* MemoryArea
,
521 NTSTATUS
MmPageOutVirtualMemory(PMADDRESS_SPACE AddressSpace
,
522 PMEMORY_AREA MemoryArea
,
524 struct _MM_PAGEOP
* PageOp
);
526 MmQueryAnonMem(PMEMORY_AREA MemoryArea
,
528 PMEMORY_BASIC_INFORMATION Info
,
529 PULONG ResultLength
);
531 VOID
MmFreeVirtualMemory(struct _EPROCESS
* Process
, PMEMORY_AREA MemoryArea
);
533 NTSTATUS
MmProtectAnonMem(PMADDRESS_SPACE AddressSpace
,
534 PMEMORY_AREA MemoryArea
,
540 NTSTATUS
MmWritePageVirtualMemory(PMADDRESS_SPACE AddressSpace
,
545 /* kmap.c ********************************************************************/
547 PVOID
ExAllocatePage(VOID
);
549 VOID
ExUnmapPage(PVOID Addr
);
551 VOID
MiInitKernelMap(VOID
);
553 PVOID
ExAllocatePageWithPhysPage(PFN_TYPE Page
);
555 NTSTATUS
MiCopyFromUserPage(PFN_TYPE Page
, PVOID SourceAddress
);
557 NTSTATUS
MiZeroPage(PFN_TYPE Page
);
559 /* memsafe.s *****************************************************************/
561 NTSTATUS
MmSafeCopyFromUser(PVOID Dest
, const VOID
*Src
, ULONG Count
);
563 NTSTATUS
MmSafeCopyToUser(PVOID Dest
, const VOID
*Src
, ULONG Count
);
565 /* pageop.c ******************************************************************/
568 MmReleasePageOp(PMM_PAGEOP PageOp
);
571 MmGetPageOp(PMEMORY_AREA MArea
, ULONG Pid
, PVOID Address
,
572 PMM_SECTION_SEGMENT Segment
, ULONG Offset
, ULONG OpType
, BOOL First
);
574 MmCheckForPageOp(PMEMORY_AREA MArea
, ULONG Pid
, PVOID Address
,
575 PMM_SECTION_SEGMENT Segment
, ULONG Offset
);
577 MmInitializePageOp(VOID
);
579 /* balace.c ******************************************************************/
581 VOID
MmInitializeMemoryConsumer(ULONG Consumer
,
582 NTSTATUS (*Trim
)(ULONG Target
, ULONG Priority
, PULONG NrFreed
));
584 VOID
MmInitializeBalancer(ULONG NrAvailablePages
, ULONG NrSystemPages
);
586 NTSTATUS
MmReleasePageMemoryConsumer(ULONG Consumer
, PFN_TYPE Page
);
588 NTSTATUS
MmRequestPageMemoryConsumer(ULONG Consumer
, BOOLEAN MyWait
, PPFN_TYPE AllocatedPage
);
590 VOID
MiInitBalancerThread(VOID
);
592 VOID
MmRebalanceMemoryConsumers(VOID
);
594 /* rmap.c **************************************************************/
596 VOID
MmSetRmapListHeadPage(PFN_TYPE Page
, struct _MM_RMAP_ENTRY
* ListHead
);
598 struct _MM_RMAP_ENTRY
* MmGetRmapListHeadPage(PFN_TYPE Page
);
600 VOID
MmInsertRmap(PFN_TYPE Page
, PEPROCESS Process
, PVOID Address
);
602 VOID
MmDeleteAllRmaps(PFN_TYPE Page
, PVOID Context
,
603 VOID (*DeleteMapping
)(PVOID Context
, PEPROCESS Process
, PVOID Address
));
605 VOID
MmDeleteRmap(PFN_TYPE Page
, PEPROCESS Process
, PVOID Address
);
607 VOID
MmInitializeRmapList(VOID
);
609 VOID
MmSetCleanAllRmaps(PFN_TYPE Page
);
611 VOID
MmSetDirtyAllRmaps(PFN_TYPE Page
);
613 BOOL
MmIsDirtyPageRmap(PFN_TYPE Page
);
615 NTSTATUS
MmWritePagePhysicalAddress(PFN_TYPE Page
);
617 NTSTATUS
MmPageOutPhysicalAddress(PFN_TYPE Page
);
619 /* freelist.c **********************************************************/
621 PFN_TYPE
MmGetLRUNextUserPage(PFN_TYPE PreviousPage
);
623 PFN_TYPE
MmGetLRUFirstUserPage(VOID
);
625 VOID
MmSetLRULastPage(PFN_TYPE Page
);
627 VOID
MmLockPage(PFN_TYPE Page
);
629 VOID
MmUnlockPage(PFN_TYPE Page
);
631 ULONG
MmGetLockCountPage(PFN_TYPE Page
);
633 PVOID
MmInitializePageList(PVOID FirstPhysKernelAddress
,
634 PVOID LastPhysKernelAddress
,
635 ULONG MemorySizeInPages
,
636 ULONG LastKernelBase
,
637 PADDRESS_RANGE BIOSMemoryMap
,
638 ULONG AddressRangeCount
);
640 PFN_TYPE
MmGetContinuousPages(ULONG NumberOfBytes
,
641 PHYSICAL_ADDRESS LowestAcceptableAddress
,
642 PHYSICAL_ADDRESS HighestAcceptableAddress
,
645 NTSTATUS
MmInitZeroPageThread(VOID
);
647 /* i386/page.c *********************************************************/
649 NTSTATUS
MmCreateVirtualMappingForKernel(PVOID Address
,
654 NTSTATUS
MmCommitPagedPoolAddress(PVOID Address
, BOOLEAN Locked
);
656 NTSTATUS
MmCreateVirtualMapping(struct _EPROCESS
* Process
,
662 NTSTATUS
MmCreateVirtualMappingUnsafe(struct _EPROCESS
* Process
,
668 ULONG
MmGetPageProtect(struct _EPROCESS
* Process
, PVOID Address
);
670 VOID
MmSetPageProtect(struct _EPROCESS
* Process
,
674 BOOLEAN
MmIsPagePresent(struct _EPROCESS
* Process
,
677 VOID
MmInitGlobalKernelPageDirectory(VOID
);
679 VOID
MmDisableVirtualMapping(PEPROCESS Process
, PVOID Address
, BOOL
* WasDirty
, PPFN_TYPE Page
);
681 VOID
MmEnableVirtualMapping(PEPROCESS Process
, PVOID Address
);
683 VOID
MmRawDeleteVirtualMapping(PVOID Address
);
685 VOID
MmDeletePageFileMapping(PEPROCESS Process
, PVOID Address
, SWAPENTRY
* SwapEntry
);
687 NTSTATUS
MmCreatePageFileMapping(PEPROCESS Process
, PVOID Address
, SWAPENTRY SwapEntry
);
689 BOOLEAN
MmIsPageSwapEntry(PEPROCESS Process
, PVOID Address
);
691 VOID
MmTransferOwnershipPage(PFN_TYPE Page
, ULONG NewConsumer
);
693 VOID
MmSetDirtyPage(PEPROCESS Process
, PVOID Address
);
695 PFN_TYPE
MmAllocPage(ULONG Consumer
, SWAPENTRY SavedSwapEntry
);
697 VOID
MmDereferencePage(PFN_TYPE Page
);
699 VOID
MmReferencePage(PFN_TYPE Page
);
701 BOOLEAN
MmIsAccessedAndResetAccessPage(struct _EPROCESS
* Process
, PVOID Address
);
703 ULONG
MmGetReferenceCountPage(PFN_TYPE Page
);
705 BOOLEAN
MmIsUsablePage(PFN_TYPE Page
);
707 VOID
MmSetFlagsPage(PFN_TYPE Page
, ULONG Flags
);
709 ULONG
MmGetFlagsPage(PFN_TYPE Page
);
711 VOID
MmSetSavedSwapEntryPage(PFN_TYPE Page
, SWAPENTRY SavedSwapEntry
);
713 SWAPENTRY
MmGetSavedSwapEntryPage(PFN_TYPE Page
);
715 VOID
MmSetCleanPage(struct _EPROCESS
* Process
, PVOID Address
);
717 NTSTATUS
MmCreatePageTable(PVOID PAddress
);
719 VOID
MmDeletePageTable(struct _EPROCESS
* Process
, PVOID Address
);
721 PFN_TYPE
MmGetPfnForProcess(struct _EPROCESS
* Process
, PVOID Address
);
723 NTSTATUS
MmCopyMmInfo(struct _EPROCESS
* Src
, struct _EPROCESS
* Dest
);
725 NTSTATUS
MmReleaseMmInfo(struct _EPROCESS
* Process
);
727 NTSTATUS
Mmi386ReleaseMmInfo(struct _EPROCESS
* Process
);
729 VOID
MmDeleteVirtualMapping(struct _EPROCESS
* Process
,
735 BOOLEAN
MmIsDirtyPage(struct _EPROCESS
* Process
, PVOID Address
);
737 VOID
MmMarkPageMapped(PFN_TYPE Page
);
739 VOID
MmMarkPageUnmapped(PFN_TYPE Page
);
741 VOID
MmUpdatePageDir(PEPROCESS Process
, PVOID Address
, ULONG Size
);
743 VOID
MiInitPageDirectoryMap(VOID
);
745 ULONG
MiGetUserPageDirectoryCount(VOID
);
747 /* wset.c ********************************************************************/
749 NTSTATUS
MmTrimUserMemory(ULONG Target
, ULONG Priority
, PULONG NrFreedPages
);
751 /* region.c ************************************************************/
753 NTSTATUS
MmAlterRegion(PMADDRESS_SPACE AddressSpace
, PVOID BaseAddress
,
754 PLIST_ENTRY RegionListHead
, PVOID StartAddress
, ULONG Length
,
755 ULONG NewType
, ULONG NewProtect
,
756 PMM_ALTER_REGION_FUNC AlterFunc
);
758 VOID
MmInitialiseRegion(PLIST_ENTRY RegionListHead
, ULONG Length
, ULONG Type
,
761 PMM_REGION
MmFindRegion(PVOID BaseAddress
, PLIST_ENTRY RegionListHead
, PVOID Address
,
762 PVOID
* RegionBaseAddress
);
764 /* section.c *****************************************************************/
767 MmAllocateSection (IN ULONG Length
, PVOID BaseAddress
);
770 MmQuerySectionView(PMEMORY_AREA MemoryArea
,
772 PMEMORY_BASIC_INFORMATION Info
,
773 PULONG ResultLength
);
776 MmProtectSectionView(PMADDRESS_SPACE AddressSpace
,
777 PMEMORY_AREA MemoryArea
,
784 MmWritePageSectionView(PMADDRESS_SPACE AddressSpace
,
789 NTSTATUS
MmInitSectionImplementation(VOID
);
792 MmUnmapViewOfSection(struct _EPROCESS
* Process
, PVOID BaseAddress
);
794 /* FIXME: it should be in ddk/mmfuncs.h */
796 MmCreateSection (OUT PSECTION_OBJECT
* SectionObject
,
797 IN ACCESS_MASK DesiredAccess
,
798 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
799 IN PLARGE_INTEGER MaximumSize
,
800 IN ULONG SectionPageProtection
,
801 IN ULONG AllocationAttributes
,
802 IN HANDLE FileHandle OPTIONAL
,
803 IN PFILE_OBJECT File OPTIONAL
);
806 MmNotPresentFaultSectionView(PMADDRESS_SPACE AddressSpace
,
807 MEMORY_AREA
* MemoryArea
,
812 MmPageOutSectionView(PMADDRESS_SPACE AddressSpace
,
813 PMEMORY_AREA MemoryArea
,
815 struct _MM_PAGEOP
* PageOp
);
818 MmCreatePhysicalMemorySection(VOID
);
821 MmAccessFaultSectionView(PMADDRESS_SPACE AddressSpace
,
822 MEMORY_AREA
* MemoryArea
,
827 MmFreeSectionSegments(PFILE_OBJECT FileObject
);
829 /* mpw.c *********************************************************************/
831 NTSTATUS
MmInitMpwThread(VOID
);
833 /* pager.c *******************************************************************/
835 BOOLEAN
MiIsPagerThread(VOID
);
837 VOID
MiStartPagerThread(VOID
);
839 VOID
MiStopPagerThread(VOID
);