* Sync up to trunk r55544.
[reactos.git] / include / xdk / mmtypes.h
1 /******************************************************************************
2 * Memory manager Types *
3 ******************************************************************************/
4 $if (_WDMDDK_)
5
6 #if (NTDDI_VERSION >= NTDDI_WIN2K)
7 typedef ULONG NODE_REQUIREMENT;
8 #define MM_ANY_NODE_OK 0x80000000
9 #endif
10
11 #define MM_DONT_ZERO_ALLOCATION 0x00000001
12 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
13 #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
14 #define MM_ALLOCATE_NO_WAIT 0x00000008
15 #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
16 #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
17
18 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
19 #define MDL_PAGES_LOCKED 0x0002
20 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
21 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
22 #define MDL_PARTIAL 0x0010
23 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
24 #define MDL_IO_PAGE_READ 0x0040
25 #define MDL_WRITE_OPERATION 0x0080
26 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
27 #define MDL_FREE_EXTRA_PTES 0x0200
28 #define MDL_DESCRIBES_AWE 0x0400
29 #define MDL_IO_SPACE 0x0800
30 #define MDL_NETWORK_HEADER 0x1000
31 #define MDL_MAPPING_CAN_FAIL 0x2000
32 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
33 #define MDL_INTERNAL 0x8000
34
35 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
36 MDL_PAGES_LOCKED | \
37 MDL_SOURCE_IS_NONPAGED_POOL | \
38 MDL_PARTIAL_HAS_BEEN_MAPPED | \
39 MDL_PARENT_MAPPED_SYSTEM_VA | \
40 MDL_SYSTEM_VA | \
41 MDL_IO_SPACE)
42
43 #define FLUSH_MULTIPLE_MAXIMUM 32
44
45 /* Section access rights */
46 #define SECTION_QUERY 0x0001
47 #define SECTION_MAP_WRITE 0x0002
48 #define SECTION_MAP_READ 0x0004
49 #define SECTION_MAP_EXECUTE 0x0008
50 #define SECTION_EXTEND_SIZE 0x0010
51 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
52
53 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \
54 SECTION_MAP_WRITE | \
55 SECTION_MAP_READ | \
56 SECTION_MAP_EXECUTE | \
57 SECTION_EXTEND_SIZE)
58
59 #define SESSION_QUERY_ACCESS 0x0001
60 #define SESSION_MODIFY_ACCESS 0x0002
61
62 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
63 SESSION_QUERY_ACCESS | \
64 SESSION_MODIFY_ACCESS)
65
66 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
67
68 #define PAGE_NOACCESS 0x01
69 #define PAGE_READONLY 0x02
70 #define PAGE_READWRITE 0x04
71 #define PAGE_WRITECOPY 0x08
72 #define PAGE_EXECUTE 0x10
73 #define PAGE_EXECUTE_READ 0x20
74 #define PAGE_EXECUTE_READWRITE 0x40
75 #define PAGE_EXECUTE_WRITECOPY 0x80
76 #define PAGE_GUARD 0x100
77 #define PAGE_NOCACHE 0x200
78 #define PAGE_WRITECOMBINE 0x400
79
80 #define MEM_COMMIT 0x1000
81 #define MEM_RESERVE 0x2000
82 #define MEM_DECOMMIT 0x4000
83 #define MEM_RELEASE 0x8000
84 #define MEM_FREE 0x10000
85 #define MEM_PRIVATE 0x20000
86 #define MEM_MAPPED 0x40000
87 #define MEM_RESET 0x80000
88 #define MEM_TOP_DOWN 0x100000
89 #define MEM_LARGE_PAGES 0x20000000
90 #define MEM_4MB_PAGES 0x80000000
91
92 #define SEC_RESERVE 0x4000000
93 #define SEC_COMMIT 0x8000000
94 #define SEC_LARGE_PAGES 0x80000000
95
96 /* Section map options */
97 typedef enum _SECTION_INHERIT {
98 ViewShare = 1,
99 ViewUnmap = 2
100 } SECTION_INHERIT;
101
102 typedef ULONG PFN_COUNT;
103 typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER;
104 typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER;
105
106 _Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL) +
107 (ByteOffset + ByteCount + PAGE_SIZE-1) / PAGE_SIZE * sizeof(PFN_NUMBER)))
108 typedef struct _MDL {
109 struct _MDL *Next;
110 CSHORT Size;
111 CSHORT MdlFlags;
112 struct _EPROCESS *Process;
113 PVOID MappedSystemVa;
114 PVOID StartVa;
115 ULONG ByteCount;
116 ULONG ByteOffset;
117 } MDL, *PMDL;
118 #if (_MSC_VER >= 1600)
119 typedef _Readable_bytes_(_Inexpressible_(polymorphism)) MDL *PMDLX;
120 #else
121 typedef MDL *PMDLX;
122 #endif
123
124 typedef enum _MEMORY_CACHING_TYPE_ORIG {
125 MmFrameBufferCached = 2
126 } MEMORY_CACHING_TYPE_ORIG;
127
128 typedef enum _MEMORY_CACHING_TYPE {
129 MmNonCached = FALSE,
130 MmCached = TRUE,
131 MmWriteCombined = MmFrameBufferCached,
132 MmHardwareCoherentCached,
133 MmNonCachedUnordered,
134 MmUSWCCached,
135 MmMaximumCacheType
136 } MEMORY_CACHING_TYPE;
137
138 typedef enum _MM_PAGE_PRIORITY {
139 LowPagePriority,
140 NormalPagePriority = 16,
141 HighPagePriority = 32
142 } MM_PAGE_PRIORITY;
143
144 typedef enum _MM_SYSTEM_SIZE {
145 MmSmallSystem,
146 MmMediumSystem,
147 MmLargeSystem
148 } MM_SYSTEMSIZE;
149
150 extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress;
151 extern PVOID MmBadPointer;
152
153 $endif (_WDMDDK_)
154 $if (_NTDDK_)
155
156 typedef struct _PHYSICAL_MEMORY_RANGE {
157 PHYSICAL_ADDRESS BaseAddress;
158 LARGE_INTEGER NumberOfBytes;
159 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
160
161 typedef NTSTATUS
162 (NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)(
163 _In_ PMDL DestinationMdl,
164 _In_ PMDL SourceMdl,
165 _In_ PVOID Context);
166
167 typedef enum _MM_ROTATE_DIRECTION {
168 MmToFrameBuffer,
169 MmToFrameBufferNoCopy,
170 MmToRegularMemory,
171 MmToRegularMemoryNoCopy,
172 MmMaximumRotateDirection
173 } MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION;
174
175 $endif (_NTDDK_)
176 $if (_NTIFS_)
177 typedef enum _MMFLUSH_TYPE {
178 MmFlushForDelete,
179 MmFlushForWrite
180 } MMFLUSH_TYPE;
181
182 typedef struct _READ_LIST {
183 PFILE_OBJECT FileObject;
184 ULONG NumberOfEntries;
185 LOGICAL IsImage;
186 FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
187 } READ_LIST, *PREAD_LIST;
188
189 #if (NTDDI_VERSION >= NTDDI_WINXP)
190
191 typedef union _MM_PREFETCH_FLAGS {
192 struct {
193 ULONG Priority : SYSTEM_PAGE_PRIORITY_BITS;
194 ULONG RepurposePriority : SYSTEM_PAGE_PRIORITY_BITS;
195 } Flags;
196 ULONG AllFlags;
197 } MM_PREFETCH_FLAGS, *PMM_PREFETCH_FLAGS;
198
199 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
200
201 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
202
203 #define HEAP_NO_SERIALIZE 0x00000001
204 #define HEAP_GROWABLE 0x00000002
205 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
206 #define HEAP_ZERO_MEMORY 0x00000008
207 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
208 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
209 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
210 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
211
212 #define HEAP_CREATE_ALIGN_16 0x00010000
213 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
214 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
215
216 #define HEAP_SETTABLE_USER_VALUE 0x00000100
217 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
218 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
219 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
220 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
221
222 #define HEAP_CLASS_0 0x00000000
223 #define HEAP_CLASS_1 0x00001000
224 #define HEAP_CLASS_2 0x00002000
225 #define HEAP_CLASS_3 0x00003000
226 #define HEAP_CLASS_4 0x00004000
227 #define HEAP_CLASS_5 0x00005000
228 #define HEAP_CLASS_6 0x00006000
229 #define HEAP_CLASS_7 0x00007000
230 #define HEAP_CLASS_8 0x00008000
231 #define HEAP_CLASS_MASK 0x0000F000
232
233 #define HEAP_MAXIMUM_TAG 0x0FFF
234 #define HEAP_GLOBAL_TAG 0x0800
235 #define HEAP_PSEUDO_TAG_FLAG 0x8000
236 #define HEAP_TAG_SHIFT 18
237 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
238
239 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
240 HEAP_GROWABLE | \
241 HEAP_GENERATE_EXCEPTIONS | \
242 HEAP_ZERO_MEMORY | \
243 HEAP_REALLOC_IN_PLACE_ONLY | \
244 HEAP_TAIL_CHECKING_ENABLED | \
245 HEAP_FREE_CHECKING_ENABLED | \
246 HEAP_DISABLE_COALESCE_ON_FREE | \
247 HEAP_CLASS_MASK | \
248 HEAP_CREATE_ALIGN_16 | \
249 HEAP_CREATE_ENABLE_TRACING | \
250 HEAP_CREATE_ENABLE_EXECUTE)
251 $endif (_NTIFS_)
252