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