2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/mmtypes.h
4 * PURPOSE: Definitions for Memory Manager Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
12 /* DEPENDENCIES **************************************************************/
13 #include "arch/mmtypes.h"
15 /* EXPORTED DATA *************************************************************/
17 /* CONSTANTS *****************************************************************/
19 #define SEC_BASED 0x00200000
20 #define SEC_NO_CHANGE 0x00400000
23 /* ENUMERATIONS **************************************************************/
26 typedef enum _SECTION_INHERIT
32 typedef enum _POOL_TYPE
36 NonPagedPoolMustSucceed
,
38 NonPagedPoolCacheAligned
,
39 PagedPoolCacheAligned
,
40 NonPagedPoolCacheAlignedMustS
,
42 NonPagedPoolSession
= 32,
44 NonPagedPoolMustSucceedSession
,
45 DontUseThisTypeSession
,
46 NonPagedPoolCacheAlignedSession
,
47 PagedPoolCacheAlignedSession
,
48 NonPagedPoolCacheAlignedMustSSession
52 typedef enum _PP_NPAGED_LOOKASIDE_NUMBER
54 LookasideSmallIrpList
= 0,
55 LookasideLargeIrpList
= 1,
57 LookasideCreateInfoList
= 3,
58 LookasideNameBufferList
= 4,
59 LookasideTwilightList
= 5,
60 LookasideCompletionList
= 6,
61 LookasideMaximumList
= 7
62 } PP_NPAGED_LOOKASIDE_NUMBER
;
64 typedef enum _MEMORY_INFORMATION_CLASS
66 MemoryBasicInformation
,
69 MemoryBasicVlmInformation
70 } MEMORY_INFORMATION_CLASS
;
72 typedef enum _SECTION_INFORMATION_CLASS
74 SectionBasicInformation
,
75 SectionImageInformation
,
76 } SECTION_INFORMATION_CLASS
;
78 /* TYPES *********************************************************************/
81 typedef struct _VM_COUNTERS
83 SIZE_T PeakVirtualSize
;
86 SIZE_T PeakWorkingSetSize
;
87 SIZE_T WorkingSetSize
;
88 SIZE_T QuotaPeakPagedPoolUsage
;
89 SIZE_T QuotaPagedPoolUsage
;
90 SIZE_T QuotaPeakNonPagedPoolUsage
;
91 SIZE_T QuotaNonPagedPoolUsage
;
93 SIZE_T PeakPagefileUsage
;
94 } VM_COUNTERS
, *PVM_COUNTERS
;
96 typedef struct _VM_COUNTERS_EX
98 SIZE_T PeakVirtualSize
;
100 ULONG PageFaultCount
;
101 SIZE_T PeakWorkingSetSize
;
102 SIZE_T WorkingSetSize
;
103 SIZE_T QuotaPeakPagedPoolUsage
;
104 SIZE_T QuotaPagedPoolUsage
;
105 SIZE_T QuotaPeakNonPagedPoolUsage
;
106 SIZE_T QuotaNonPagedPoolUsage
;
107 SIZE_T PagefileUsage
;
108 SIZE_T PeakPagefileUsage
;
110 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
113 typedef struct _MEMORY_WORKING_SET_LIST
116 ULONG WorkingSetList
[1];
117 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
121 UNICODE_STRING SectionFileName
;
122 WCHAR NameBuffer
[ANYSIZE_ARRAY
];
123 } MEMORY_SECTION_NAME
, *PMEMORY_SECTION_NAME
;
125 typedef struct _SECTION_BASIC_INFORMATION
130 } SECTION_BASIC_INFORMATION
, *PSECTION_BASIC_INFORMATION
;
132 typedef struct _SECTION_IMAGE_INFORMATION
134 PVOID TransferAddress
;
136 ULONG MaximumStackSize
;
137 ULONG CommittedStackSize
;
139 USHORT SubSystemMinorVersion
;
140 USHORT SubSystemMajorVersion
;
142 USHORT ImageCharacteristics
;
143 USHORT DllChracteristics
;
145 UCHAR ImageContainsCode
;
150 } SECTION_IMAGE_INFORMATION
, *PSECTION_IMAGE_INFORMATION
;
152 #ifndef NTOS_MODE_USER
153 /* FIXME: Forced to do this for now, because of EPROCESS, will go away before 0.3.0 */
154 typedef struct _MADDRESS_SPACE
156 struct _MEMORY_AREA
*MemoryAreaRoot
;
159 struct _EPROCESS
* Process
;
160 PUSHORT PageTableRefCountTable
;
161 ULONG PageTableRefCountTableSize
;
162 } MADDRESS_SPACE
, *PMADDRESS_SPACE
;
164 typedef struct _ADDRESS_RANGE
171 } ADDRESS_RANGE
, *PADDRESS_RANGE
;
173 typedef struct _MMADDRESS_NODE
178 struct _MMADDRESS_NODE
*Parent
;
180 struct _MMADDRESS_NODE
*LeftChild
;
181 struct _MMADDRESS_NODE
*RightChild
;
184 } MMADDRESS_NODE
, *PMMADDRESS_NODE
;
186 typedef struct _MM_AVL_TABLE
188 MMADDRESS_NODE BalancedRoot
;
191 ULONG NumberGenericTableElements
:24;
194 } MM_AVL_TABLE
, *PMM_AVL_TABLE
;
196 typedef struct _MMWSLENTRY
200 ULONG LockedInMemory
:1;
205 ULONG VirtualPageNumber
:14;
206 } MMWSLENTRY
, *PMMWSLENTRY
;
208 typedef struct _MMWSLE
212 PVOID VirtualAddress
;
218 typedef struct _MMWSLE_HASH
222 } MMWSLE_HASH
, *PMMWSLE_HASH
;
224 typedef struct _MMWSL
231 ULONG LastInitializedWsle
;
233 PMMWSLE_HASH HashTable
;
235 ULONG NumberOfCommittedPageTables
;
236 PVOID HashTableStart
;
237 PVOID HighestPermittedHashAddress
;
238 ULONG NumberOfImageWaiters
;
240 USHORT UsedPageTableEntries
[768];
241 ULONG CommittedPageTables
[24];
244 typedef struct _MMSUPPORT_FLAGS
246 ULONG SessionSpace
:1;
247 ULONG BeingTrimmed
:1;
248 ULONG SessionLeader
:1;
250 ULONG WorkingSetHard
:1;
251 ULONG AddressSpaceBeingDeleted
:1;
253 ULONG AllowWorkingSetAdjustment
:8;
254 ULONG MemoryPriority
:8;
255 } MMSUPPORT_FLAGS
, *PMMSUPPORT_FLAGS
;
257 typedef struct _MMSUPPORT
259 LARGE_INTEGER LastTrimTime
;
260 MMSUPPORT_FLAGS Flags
;
261 ULONG PageFaultCount
;
262 ULONG PeakWorkingSetSize
;
263 ULONG WorkingSetSize
;
264 ULONG MinimumWorkingSetSize
;
265 ULONG MaximumWorkingSetSize
;
266 PMMWSL MmWorkingSetList
;
267 LIST_ENTRY WorkingSetExpansionLinks
;
269 ULONG NextEstimationSlot
;
271 ULONG EstimatedAvailable
;
272 ULONG GrowthSinceLastEstimate
;
273 } MMSUPPORT
, *PMMSUPPORT
;