1 /******************************************************************************
2 * Memory manager Types *
3 ******************************************************************************/
6 #if (NTDDI_VERSION >= NTDDI_WIN2K)
7 typedef ULONG NODE_REQUIREMENT
;
8 #define MM_ANY_NODE_OK 0x80000000
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
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
35 #define MDL_MAPPING_FLAGS ( \
36 MDL_MAPPED_TO_SYSTEM_VA | \
38 MDL_SOURCE_IS_NONPAGED_POOL | \
39 MDL_PARTIAL_HAS_BEEN_MAPPED | \
40 MDL_PARENT_MAPPED_SYSTEM_VA | \
44 #define FLUSH_MULTIPLE_MAXIMUM 32
46 /* Section access rights */
47 #define SECTION_QUERY 0x0001
48 #define SECTION_MAP_WRITE 0x0002
49 #define SECTION_MAP_READ 0x0004
50 #define SECTION_MAP_EXECUTE 0x0008
51 #define SECTION_EXTEND_SIZE 0x0010
52 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
54 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
57 SECTION_MAP_EXECUTE | \
60 #define SESSION_QUERY_ACCESS 0x0001
61 #define SESSION_MODIFY_ACCESS 0x0002
63 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
64 SESSION_QUERY_ACCESS | \
65 SESSION_MODIFY_ACCESS)
67 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
69 #define PAGE_NOACCESS 0x01
70 #define PAGE_READONLY 0x02
71 #define PAGE_READWRITE 0x04
72 #define PAGE_WRITECOPY 0x08
73 #define PAGE_EXECUTE 0x10
74 #define PAGE_EXECUTE_READ 0x20
75 #define PAGE_EXECUTE_READWRITE 0x40
76 #define PAGE_EXECUTE_WRITECOPY 0x80
77 #define PAGE_GUARD 0x100
78 #define PAGE_NOCACHE 0x200
79 #define PAGE_WRITECOMBINE 0x400
81 #define MEM_COMMIT 0x1000
82 #define MEM_RESERVE 0x2000
83 #define MEM_DECOMMIT 0x4000
84 #define MEM_RELEASE 0x8000
85 #define MEM_FREE 0x10000
86 #define MEM_PRIVATE 0x20000
87 #define MEM_MAPPED 0x40000
88 #define MEM_RESET 0x80000
89 #define MEM_TOP_DOWN 0x100000
90 #define MEM_LARGE_PAGES 0x20000000
91 #define MEM_4MB_PAGES 0x80000000
93 #define SEC_RESERVE 0x4000000
94 #define SEC_COMMIT 0x8000000
95 #define SEC_LARGE_PAGES 0x80000000
97 /* Section map options */
98 typedef enum _SECTION_INHERIT
{
103 typedef ULONG PFN_COUNT
;
104 typedef LONG_PTR SPFN_NUMBER
, *PSPFN_NUMBER
;
105 typedef ULONG_PTR PFN_NUMBER
, *PPFN_NUMBER
;
107 typedef struct _MDL
{
111 struct _EPROCESS
*Process
;
112 PVOID MappedSystemVa
;
119 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
120 MmFrameBufferCached
= 2
121 } MEMORY_CACHING_TYPE_ORIG
;
123 typedef enum _MEMORY_CACHING_TYPE
{
126 MmWriteCombined
= MmFrameBufferCached
,
127 MmHardwareCoherentCached
,
128 MmNonCachedUnordered
,
131 } MEMORY_CACHING_TYPE
;
133 typedef enum _MM_PAGE_PRIORITY
{
135 NormalPagePriority
= 16,
136 HighPagePriority
= 32
139 typedef enum _MM_SYSTEM_SIZE
{
145 extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress
;
146 extern PVOID MmBadPointer
;
151 typedef struct _PHYSICAL_MEMORY_RANGE
{
152 PHYSICAL_ADDRESS BaseAddress
;
153 LARGE_INTEGER NumberOfBytes
;
154 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
157 (NTAPI
*PMM_ROTATE_COPY_CALLBACK_FUNCTION
)(
158 IN PMDL DestinationMdl
,
162 typedef enum _MM_ROTATE_DIRECTION
{
164 MmToFrameBufferNoCopy
,
166 MmToRegularMemoryNoCopy
,
167 MmMaximumRotateDirection
168 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
172 typedef enum _MMFLUSH_TYPE
{
177 typedef struct _READ_LIST
{
178 PFILE_OBJECT FileObject
;
179 ULONG NumberOfEntries
;
181 FILE_SEGMENT_ELEMENT List
[ANYSIZE_ARRAY
];
182 } READ_LIST
, *PREAD_LIST
;
184 #if (NTDDI_VERSION >= NTDDI_WINXP)
186 typedef union _MM_PREFETCH_FLAGS
{
188 ULONG Priority
: SYSTEM_PAGE_PRIORITY_BITS
;
189 ULONG RepurposePriority
: SYSTEM_PAGE_PRIORITY_BITS
;
192 } MM_PREFETCH_FLAGS
, *PMM_PREFETCH_FLAGS
;
194 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
196 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
198 #define HEAP_NO_SERIALIZE 0x00000001
199 #define HEAP_GROWABLE 0x00000002
200 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
201 #define HEAP_ZERO_MEMORY 0x00000008
202 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
203 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
204 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
205 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
207 #define HEAP_CREATE_ALIGN_16 0x00010000
208 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
209 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
211 #define HEAP_SETTABLE_USER_VALUE 0x00000100
212 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
213 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
214 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
215 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
217 #define HEAP_CLASS_0 0x00000000
218 #define HEAP_CLASS_1 0x00001000
219 #define HEAP_CLASS_2 0x00002000
220 #define HEAP_CLASS_3 0x00003000
221 #define HEAP_CLASS_4 0x00004000
222 #define HEAP_CLASS_5 0x00005000
223 #define HEAP_CLASS_6 0x00006000
224 #define HEAP_CLASS_7 0x00007000
225 #define HEAP_CLASS_8 0x00008000
226 #define HEAP_CLASS_MASK 0x0000F000
228 #define HEAP_MAXIMUM_TAG 0x0FFF
229 #define HEAP_GLOBAL_TAG 0x0800
230 #define HEAP_PSEUDO_TAG_FLAG 0x8000
231 #define HEAP_TAG_SHIFT 18
232 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
234 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
236 HEAP_GENERATE_EXCEPTIONS | \
238 HEAP_REALLOC_IN_PLACE_ONLY | \
239 HEAP_TAIL_CHECKING_ENABLED | \
240 HEAP_FREE_CHECKING_ENABLED | \
241 HEAP_DISABLE_COALESCE_ON_FREE | \
243 HEAP_CREATE_ALIGN_16 | \
244 HEAP_CREATE_ENABLE_TRACING | \
245 HEAP_CREATE_ENABLE_EXECUTE)