disabled warning 4214
[reactos.git] / reactos / include / ndk / mmtypes.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 mmtypes.h
8
9 Abstract:
10
11 Type definitions for the Memory Manager
12
13 Author:
14
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
16
17 --*/
18
19 #ifndef _MMTYPES_H
20 #define _MMTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <arch/mmtypes.h>
27
28 //
29 // Page-Rounding Macros
30 //
31 #define PAGE_ROUND_DOWN(x) (((ULONG_PTR)x)&(~(PAGE_SIZE-1)))
32 #define PAGE_ROUND_UP(x) \
33 ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
34
35 //
36 // Macro for generating pool tags
37 //
38 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
39
40 #ifdef NTOS_MODE_USER
41
42 //
43 // Section Flags for NtCreateSection
44 //
45 #define SEC_BASED 0x00200000
46 #define SEC_NO_CHANGE 0x00400000
47
48 //
49 // Section Inherit Flags for NtCreateSection
50 //
51 typedef enum _SECTION_INHERIT
52 {
53 ViewShare = 1,
54 ViewUnmap = 2
55 } SECTION_INHERIT;
56
57 //
58 // Pool Types
59 //
60 typedef enum _POOL_TYPE
61 {
62 NonPagedPool,
63 PagedPool,
64 NonPagedPoolMustSucceed,
65 DontUseThisType,
66 NonPagedPoolCacheAligned,
67 PagedPoolCacheAligned,
68 NonPagedPoolCacheAlignedMustS,
69 MaxPoolType,
70 NonPagedPoolSession = 32,
71 PagedPoolSession,
72 NonPagedPoolMustSucceedSession,
73 DontUseThisTypeSession,
74 NonPagedPoolCacheAlignedSession,
75 PagedPoolCacheAlignedSession,
76 NonPagedPoolCacheAlignedMustSSession
77 } POOL_TYPE;
78 #endif
79
80 //
81 // Per Processor Non Paged Lookaside List IDs
82 //
83 typedef enum _PP_NPAGED_LOOKASIDE_NUMBER
84 {
85 LookasideSmallIrpList = 0,
86 LookasideLargeIrpList = 1,
87 LookasideMdlList = 2,
88 LookasideCreateInfoList = 3,
89 LookasideNameBufferList = 4,
90 LookasideTwilightList = 5,
91 LookasideCompletionList = 6,
92 LookasideMaximumList = 7
93 } PP_NPAGED_LOOKASIDE_NUMBER;
94
95 //
96 // Memory Information Classes for NtQueryVirtualMemory
97 //
98 typedef enum _MEMORY_INFORMATION_CLASS
99 {
100 MemoryBasicInformation,
101 MemoryWorkingSetList,
102 MemorySectionName,
103 MemoryBasicVlmInformation
104 } MEMORY_INFORMATION_CLASS;
105
106 //
107 // Section Information Clasess for NtQuerySection
108 //
109 typedef enum _SECTION_INFORMATION_CLASS
110 {
111 SectionBasicInformation,
112 SectionImageInformation,
113 } SECTION_INFORMATION_CLASS;
114
115 #ifdef NTOS_MODE_USER
116
117 //
118 // Virtual Memory Counters
119 //
120 typedef struct _VM_COUNTERS
121 {
122 SIZE_T PeakVirtualSize;
123 SIZE_T VirtualSize;
124 ULONG PageFaultCount;
125 SIZE_T PeakWorkingSetSize;
126 SIZE_T WorkingSetSize;
127 SIZE_T QuotaPeakPagedPoolUsage;
128 SIZE_T QuotaPagedPoolUsage;
129 SIZE_T QuotaPeakNonPagedPoolUsage;
130 SIZE_T QuotaNonPagedPoolUsage;
131 SIZE_T PagefileUsage;
132 SIZE_T PeakPagefileUsage;
133 } VM_COUNTERS, *PVM_COUNTERS;
134
135 typedef struct _VM_COUNTERS_EX
136 {
137 SIZE_T PeakVirtualSize;
138 SIZE_T VirtualSize;
139 ULONG PageFaultCount;
140 SIZE_T PeakWorkingSetSize;
141 SIZE_T WorkingSetSize;
142 SIZE_T QuotaPeakPagedPoolUsage;
143 SIZE_T QuotaPagedPoolUsage;
144 SIZE_T QuotaPeakNonPagedPoolUsage;
145 SIZE_T QuotaNonPagedPoolUsage;
146 SIZE_T PagefileUsage;
147 SIZE_T PeakPagefileUsage;
148 SIZE_T PrivateUsage;
149 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
150 #endif
151
152 //
153 // List of Working Sets
154 //
155 typedef struct _MEMORY_WORKING_SET_LIST
156 {
157 ULONG NumberOfPages;
158 ULONG WorkingSetList[1];
159 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
160
161 //
162 // Memory Information Structures for NtQueryVirtualMemory
163 //
164 typedef struct
165 {
166 UNICODE_STRING SectionFileName;
167 WCHAR NameBuffer[ANYSIZE_ARRAY];
168 } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
169
170 //
171 // Section Information Structures for NtQuerySection
172 //
173 typedef struct _SECTION_BASIC_INFORMATION
174 {
175 PVOID BaseAddress;
176 ULONG Attributes;
177 LARGE_INTEGER Size;
178 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
179
180 typedef struct _SECTION_IMAGE_INFORMATION
181 {
182 PVOID TransferAddress;
183 ULONG ZeroBits;
184 ULONG MaximumStackSize;
185 ULONG CommittedStackSize;
186 ULONG SubsystemType;
187 USHORT SubSystemMinorVersion;
188 USHORT SubSystemMajorVersion;
189 ULONG GpValue;
190 USHORT ImageCharacteristics;
191 USHORT DllChracteristics;
192 USHORT Machine;
193 UCHAR ImageContainsCode;
194 UCHAR Spare1;
195 ULONG LoaderFlags;
196 ULONG ImageFileSIze;
197 ULONG Reserved[1];
198 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
199
200 #ifndef NTOS_MODE_USER
201
202 //
203 // FIXME: REACTOS SPECIFIC HACK IN EPROCESS
204 //
205 #ifdef _REACTOS_
206 typedef struct _MADDRESS_SPACE
207 {
208 struct _MEMORY_AREA *MemoryAreaRoot;
209 FAST_MUTEX Lock;
210 PVOID LowestAddress;
211 struct _EPROCESS* Process;
212 PUSHORT PageTableRefCountTable;
213 ULONG PageTableRefCountTableSize;
214 } MADDRESS_SPACE, *PMADDRESS_SPACE;
215 #endif
216
217 //
218 // Generic Address Range Structure
219 //
220 typedef struct _ADDRESS_RANGE
221 {
222 ULONG BaseAddrLow;
223 ULONG BaseAddrHigh;
224 ULONG LengthLow;
225 ULONG LengthHigh;
226 ULONG Type;
227 } ADDRESS_RANGE, *PADDRESS_RANGE;
228
229 //
230 // Node in Memory Manager's AVL Table
231 //
232 typedef struct _MMADDRESS_NODE
233 {
234 union
235 {
236 ULONG Balance:2;
237 struct _MMADDRESS_NODE *Parent;
238 } u1;
239 struct _MMADDRESS_NODE *LeftChild;
240 struct _MMADDRESS_NODE *RightChild;
241 ULONG StartingVpn;
242 ULONG EndingVpn;
243 } MMADDRESS_NODE, *PMMADDRESS_NODE;
244
245 //
246 // Memory Manager AVL Table for VADs and other descriptors
247 //
248 typedef struct _MM_AVL_TABLE
249 {
250 MMADDRESS_NODE BalancedRoot;
251 ULONG DepthOfTree:5;
252 ULONG Unused:3;
253 ULONG NumberGenericTableElements:24;
254 PVOID NodeHint;
255 PVOID NodeFreeHint;
256 } MM_AVL_TABLE, *PMM_AVL_TABLE;
257
258 //
259 // Memory Manager Working Set Structures
260 //
261 typedef struct _MMWSLENTRY
262 {
263 ULONG Valid:1;
264 ULONG LockedInWs:1;
265 ULONG LockedInMemory:1;
266 ULONG Protection:5;
267 ULONG Hashed:1;
268 ULONG Direct:1;
269 ULONG Age:2;
270 ULONG VirtualPageNumber:14;
271 } MMWSLENTRY, *PMMWSLENTRY;
272
273 typedef struct _MMWSLE
274 {
275 union
276 {
277 PVOID VirtualAddress;
278 ULONG Long;
279 MMWSLENTRY e1;
280 };
281 } MMWSLE, *PMMWSLE;
282
283 typedef struct _MMWSLE_HASH
284 {
285 PVOID Key;
286 ULONG Index;
287 } MMWSLE_HASH, *PMMWSLE_HASH;
288
289 typedef struct _MMWSL
290 {
291 ULONG FirstFree;
292 ULONG FirstDynamic;
293 ULONG LastEntry;
294 ULONG NextSlot;
295 PMMWSLE Wsle;
296 ULONG LastInitializedWsle;
297 ULONG NonDirectcout;
298 PMMWSLE_HASH HashTable;
299 ULONG HashTableSize;
300 ULONG NumberOfCommittedPageTables;
301 PVOID HashTableStart;
302 PVOID HighestPermittedHashAddress;
303 ULONG NumberOfImageWaiters;
304 ULONG VadBitMapHint;
305 USHORT UsedPageTableEntries[768];
306 ULONG CommittedPageTables[24];
307 } MMWSL, *PMMWSL;
308
309 //
310 // Flags for Memory Support Structure
311 //
312 typedef struct _MMSUPPORT_FLAGS
313 {
314 ULONG SessionSpace:1;
315 ULONG BeingTrimmed:1;
316 ULONG SessionLeader:1;
317 ULONG TrimHard:1;
318 ULONG WorkingSetHard:1;
319 ULONG AddressSpaceBeingDeleted :1;
320 ULONG Available:10;
321 ULONG AllowWorkingSetAdjustment:8;
322 ULONG MemoryPriority:8;
323 } MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS;
324
325 //
326 // Per-Process Memory Manager Data
327 //
328 typedef struct _MMSUPPORT
329 {
330 LARGE_INTEGER LastTrimTime;
331 MMSUPPORT_FLAGS Flags;
332 ULONG PageFaultCount;
333 ULONG PeakWorkingSetSize;
334 ULONG WorkingSetSize;
335 ULONG MinimumWorkingSetSize;
336 ULONG MaximumWorkingSetSize;
337 PMMWSL MmWorkingSetList;
338 LIST_ENTRY WorkingSetExpansionLinks;
339 ULONG Claim;
340 ULONG NextEstimationSlot;
341 ULONG NextAgingSlot;
342 ULONG EstimatedAvailable;
343 ULONG GrowthSinceLastEstimate;
344 } MMSUPPORT, *PMMSUPPORT;
345
346 #endif // !NTOS_MODE_USER
347
348 #endif // _MMTYPES_H