xref: /reactos/sdk/include/xdk/mmtypes.h (revision c2c66aff)
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 #ifndef _NTSYSTEM_
151 __CREATE_NTOS_DATA_IMPORT_ALIAS(Mm64BitPhysicalAddress)
152 extern PBOOLEAN Mm64BitPhysicalAddress;
153 #endif
154 extern NTKERNELAPI PVOID MmBadPointer;
155 
156 $endif (_WDMDDK_)
157 $if (_NTDDK_)
158 
159 typedef struct _PHYSICAL_MEMORY_RANGE {
160   PHYSICAL_ADDRESS BaseAddress;
161   LARGE_INTEGER NumberOfBytes;
162 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
163 
164 typedef NTSTATUS
165 (NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)(
166   _In_ PMDL DestinationMdl,
167   _In_ PMDL SourceMdl,
168   _In_ PVOID Context);
169 
170 typedef enum _MM_ROTATE_DIRECTION {
171   MmToFrameBuffer,
172   MmToFrameBufferNoCopy,
173   MmToRegularMemory,
174   MmToRegularMemoryNoCopy,
175   MmMaximumRotateDirection
176 } MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION;
177 
178 $endif (_NTDDK_)
179 $if (_NTIFS_)
180 typedef enum _MMFLUSH_TYPE {
181   MmFlushForDelete,
182   MmFlushForWrite
183 } MMFLUSH_TYPE;
184 
185 typedef struct _READ_LIST {
186   PFILE_OBJECT FileObject;
187   ULONG NumberOfEntries;
188   LOGICAL IsImage;
189   FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
190 } READ_LIST, *PREAD_LIST;
191 
192 #if (NTDDI_VERSION >= NTDDI_WINXP)
193 
194 typedef union _MM_PREFETCH_FLAGS {
195   struct {
196     ULONG Priority : SYSTEM_PAGE_PRIORITY_BITS;
197     ULONG RepurposePriority : SYSTEM_PAGE_PRIORITY_BITS;
198   } Flags;
199   ULONG AllFlags;
200 } MM_PREFETCH_FLAGS, *PMM_PREFETCH_FLAGS;
201 
202 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
203 
204 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
205 
206 #define HEAP_NO_SERIALIZE               0x00000001
207 #define HEAP_GROWABLE                   0x00000002
208 #define HEAP_GENERATE_EXCEPTIONS        0x00000004
209 #define HEAP_ZERO_MEMORY                0x00000008
210 #define HEAP_REALLOC_IN_PLACE_ONLY      0x00000010
211 #define HEAP_TAIL_CHECKING_ENABLED      0x00000020
212 #define HEAP_FREE_CHECKING_ENABLED      0x00000040
213 #define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080
214 
215 #define HEAP_CREATE_ALIGN_16            0x00010000
216 #define HEAP_CREATE_ENABLE_TRACING      0x00020000
217 #define HEAP_CREATE_ENABLE_EXECUTE      0x00040000
218 
219 #define HEAP_SETTABLE_USER_VALUE        0x00000100
220 #define HEAP_SETTABLE_USER_FLAG1        0x00000200
221 #define HEAP_SETTABLE_USER_FLAG2        0x00000400
222 #define HEAP_SETTABLE_USER_FLAG3        0x00000800
223 #define HEAP_SETTABLE_USER_FLAGS        0x00000E00
224 
225 #define HEAP_CLASS_0                    0x00000000
226 #define HEAP_CLASS_1                    0x00001000
227 #define HEAP_CLASS_2                    0x00002000
228 #define HEAP_CLASS_3                    0x00003000
229 #define HEAP_CLASS_4                    0x00004000
230 #define HEAP_CLASS_5                    0x00005000
231 #define HEAP_CLASS_6                    0x00006000
232 #define HEAP_CLASS_7                    0x00007000
233 #define HEAP_CLASS_8                    0x00008000
234 #define HEAP_CLASS_MASK                 0x0000F000
235 
236 #define HEAP_MAXIMUM_TAG                0x0FFF
237 #define HEAP_GLOBAL_TAG                 0x0800
238 #define HEAP_PSEUDO_TAG_FLAG            0x8000
239 #define HEAP_TAG_SHIFT                  18
240 #define HEAP_TAG_MASK                  (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
241 
242 #define HEAP_CREATE_VALID_MASK         (HEAP_NO_SERIALIZE             |   \
243                                         HEAP_GROWABLE                 |   \
244                                         HEAP_GENERATE_EXCEPTIONS      |   \
245                                         HEAP_ZERO_MEMORY              |   \
246                                         HEAP_REALLOC_IN_PLACE_ONLY    |   \
247                                         HEAP_TAIL_CHECKING_ENABLED    |   \
248                                         HEAP_FREE_CHECKING_ENABLED    |   \
249                                         HEAP_DISABLE_COALESCE_ON_FREE |   \
250                                         HEAP_CLASS_MASK               |   \
251                                         HEAP_CREATE_ALIGN_16          |   \
252                                         HEAP_CREATE_ENABLE_TRACING    |   \
253                                         HEAP_CREATE_ENABLE_EXECUTE)
254 $endif (_NTIFS_)
255 
256