2 * Higher level memory managment definitions
5 #ifndef __INCLUDE_INTERNAL_MM_H
6 #define __INCLUDE_INTERNAL_MM_H
8 #include <internal/linkage.h>
9 #include <internal/ntoskrnl.h>
12 /* TYPES *********************************************************************/
17 MEMORY_AREA_SECTION_VIEW_COMMIT
,
18 MEMORY_AREA_CONTINUOUS_MEMORY
,
20 MEMORY_AREA_IO_MAPPING
,
22 MEMORY_AREA_MDL_MAPPING
,
25 MEMORY_AREA_SECTION_VIEW_RESERVE
,
26 MEMORY_AREA_CACHE_SEGMENT
,
29 #define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) ((x) / (4*1024*1024))
30 #define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) (((x) % 4*1024*1024) / (4*1024))
32 #define NR_SECTION_PAGE_TABLES (1024)
33 #define NR_SECTION_PAGE_ENTRIES (1024)
37 PVOID Pages
[NR_SECTION_PAGE_ENTRIES
];
38 } SECTION_PAGE_TABLE
, *PSECTION_PAGE_TABLE
;
42 PSECTION_PAGE_TABLE PageTables
[NR_SECTION_PAGE_TABLES
];
43 } SECTION_PAGE_DIRECTORY
, *PSECTION_PAGE_DIRECTORY
;
49 LARGE_INTEGER MaximumSize
;
50 ULONG SectionPageProtection
;
51 ULONG AllocateAttributes
;
52 PFILE_OBJECT FileObject
;
53 LIST_ENTRY ViewListHead
;
54 KSPIN_LOCK ViewListLock
;
56 SECTION_PAGE_DIRECTORY PageDirectory
;
57 } SECTION_OBJECT
, *PSECTION_OBJECT
;
72 SECTION_OBJECT
* Section
;
74 LIST_ENTRY ViewListEntry
;
77 } MEMORY_AREA
, *PMEMORY_AREA
;
82 VOID
MmLockAddressSpace(PMADDRESS_SPACE AddressSpace
);
83 VOID
MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace
);
84 VOID
MmInitializeKernelAddressSpace(VOID
);
85 PMADDRESS_SPACE
MmGetCurrentAddressSpace(VOID
);
86 PMADDRESS_SPACE
MmGetKernelAddressSpace(VOID
);
87 NTSTATUS
MmInitializeAddressSpace(PEPROCESS Process
,
88 PMADDRESS_SPACE AddressSpace
);
89 NTSTATUS
MmDestroyAddressSpace(PMADDRESS_SPACE AddressSpace
);
90 PVOID STDCALL
MmAllocateSection (IN ULONG Length
);
91 NTSTATUS
MmCreateMemoryArea(PEPROCESS Process
,
92 PMADDRESS_SPACE AddressSpace
,
97 MEMORY_AREA
** Result
);
98 MEMORY_AREA
* MmOpenMemoryAreaByAddress(PMADDRESS_SPACE AddressSpace
,
100 NTSTATUS
MmInitMemoryAreas(VOID
);
101 VOID
ExInitNonPagedPool(ULONG BaseAddress
);
102 NTSTATUS
MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace
,
106 VOID
MmDumpMemoryAreas(PLIST_ENTRY ListHead
);
107 NTSTATUS
MmLockMemoryArea(MEMORY_AREA
* MemoryArea
);
108 NTSTATUS
MmUnlockMemoryArea(MEMORY_AREA
* MemoryArea
);
109 NTSTATUS
MmInitSectionImplementation(VOID
);
111 /*void VirtualInit(boot_param* bp);*/
113 #define MM_LOWEST_USER_ADDRESS (4096)
115 PMEMORY_AREA
MmSplitMemoryArea(PEPROCESS Process
,
116 PMADDRESS_SPACE AddressSpace
,
117 PMEMORY_AREA OriginalMemoryArea
,
121 ULONG NewAttributes
);
122 PVOID
MmInitializePageList(PVOID FirstPhysKernelAddress
,
123 PVOID LastPhysKernelAddress
,
124 ULONG MemorySizeInPages
,
125 ULONG LastKernelBase
);
127 PVOID
MmAllocPage(VOID
);
128 VOID
MmDereferencePage(PVOID PhysicalAddress
);
129 VOID
MmReferencePage(PVOID PhysicalAddress
);
130 VOID
MmDeletePageTable(PEPROCESS Process
, PVOID Address
);
131 NTSTATUS
MmCopyMmInfo(PEPROCESS Src
, PEPROCESS Dest
);
132 NTSTATUS
MmReleaseMmInfo(PEPROCESS Process
);
133 NTSTATUS
Mmi386ReleaseMmInfo(PEPROCESS Process
);
134 VOID
MmDeletePageEntry(PEPROCESS Process
, PVOID Address
, BOOL FreePage
);
136 VOID
MmBuildMdlFromPages(PMDL Mdl
);
137 PVOID
MmGetMdlPageAddress(PMDL Mdl
, PVOID Offset
);
138 VOID
MiShutdownMemoryManager(VOID
);
139 ULONG
MmGetPhysicalAddressForProcess(PEPROCESS Process
,
141 NTSTATUS STDCALL
MmUnmapViewOfSection(PEPROCESS Process
,
142 PMEMORY_AREA MemoryArea
);
143 PVOID
MiTryToSharePageInSection(PSECTION_OBJECT Section
, ULONG Offset
);
145 NTSTATUS
MmSafeCopyFromUser(PVOID Dest
, PVOID Src
, ULONG NumberOfBytes
);
146 NTSTATUS
MmSafeCopyToUser(PVOID Dest
, PVOID Src
, ULONG NumberOfBytes
);
147 VOID
MmInitPagingFile(VOID
);
149 /* FIXME: it should be in ddk/mmfuncs.h */
153 OUT PSECTION_OBJECT
* SectionObject
,
154 IN ACCESS_MASK DesiredAccess
,
155 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
156 IN PLARGE_INTEGER MaximumSize
,
157 IN ULONG SectionPageProtection
,
158 IN ULONG AllocationAttributes
,
159 IN HANDLE FileHandle OPTIONAL
,
160 IN PFILE_OBJECT File OPTIONAL
163 NTSTATUS
MmPageFault(ULONG Cs
,
169 NTSTATUS
MmAccessFault(KPROCESSOR_MODE Mode
,
171 NTSTATUS
MmNotPresentFault(KPROCESSOR_MODE Mode
,