3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the Memory Manager
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
26 #include <arch/mmtypes.h>
34 // Page-Rounding Macros
36 #define PAGE_ROUND_DOWN(x) \
37 (((ULONG_PTR)(x))&(~(PAGE_SIZE-1)))
38 #define PAGE_ROUND_UP(x) \
39 ( (((ULONG_PTR)(x)) + PAGE_SIZE-1) & (~(PAGE_SIZE-1)) )
41 #define ROUND_TO_PAGES(Size) \
42 (((ULONG_PTR)(Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
44 #define ROUND_TO_ALLOCATION_GRANULARITY(Size) \
45 (((ULONG_PTR)(Size) + MM_ALLOCATION_GRANULARITY - 1) \
46 & ~(MM_ALLOCATION_GRANULARITY - 1))
51 #define MMPFNUSE_PROCESSPRIVATE 0
52 #define MMPFNUSE_FILE 1
53 #define MMPFNUSE_PAGEFILEMAPPED 2
54 #define MMPFNUSE_PAGETABLE 3
55 #define MMPFNUSE_PAGEDPOOL 4
56 #define MMPFNUSE_NONPAGEDPOOL 5
57 #define MMPFNUSE_SYSTEMPTE 6
58 #define MMPFNUSE_SESSIONPRIVATE 7
59 #define MMPFNUSE_METAFILE 8
60 #define MMPFNUSE_AWEPAGE 9
61 #define MMPFNUSE_DRIVERLOCKPAGE 10
62 #define MMPFNUSE_KERNELSTACK 11
65 // Lock/Unlock Virtuam Memory Flags
71 // Flags for ProcessExecutionOptions
73 #define MEM_EXECUTE_OPTION_DISABLE 0x1
74 #define MEM_EXECUTE_OPTION_ENABLE 0x2
75 #define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION 0x4
76 #define MEM_EXECUTE_OPTION_PERMANENT 0x8
77 #define MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE 0x10
78 #define MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE 0x20
79 #define MEM_EXECUTE_OPTION_VALID_FLAGS 0x3F
81 #ifndef NTOS_MODE_USER
83 // Virtual Memory Flags
85 #define MEM_WRITE_WATCH 0x200000
86 #define MEM_PHYSICAL 0x400000
87 #define MEM_ROTATE 0x800000
88 #define MEM_IMAGE SEC_IMAGE
89 #define MEM_DOS_LIM 0x40000000
92 // Section Flags for NtCreateSection
94 #define SEC_NO_CHANGE 0x400000
95 #define SEC_FILE 0x800000
96 #define SEC_IMAGE 0x1000000
97 #define SEC_PROTECTED_IMAGE 0x2000000
98 #define SEC_RESERVE 0x4000000
99 #define SEC_COMMIT 0x8000000
100 #define SEC_NOCACHE 0x10000000
101 #define SEC_WRITECOMBINE 0x40000000
102 #define SEC_LARGE_PAGES 0x80000000
104 #define SEC_BASED 0x200000
107 // Section Inherit Flags for NtCreateSection
109 typedef enum _SECTION_INHERIT
118 typedef enum _POOL_TYPE
122 NonPagedPoolMustSucceed
,
124 NonPagedPoolCacheAligned
,
125 PagedPoolCacheAligned
,
126 NonPagedPoolCacheAlignedMustS
,
128 NonPagedPoolSession
= 32,
130 NonPagedPoolMustSucceedSession
,
131 DontUseThisTypeSession
,
132 NonPagedPoolCacheAlignedSession
,
133 PagedPoolCacheAlignedSession
,
134 NonPagedPoolCacheAlignedMustSSession
139 // Memory Manager Page Lists
141 typedef enum _MMLISTS
146 ModifiedPageList
= 3,
147 ModifiedNoWritePageList
= 4,
154 // Per Processor Non Paged Lookaside List IDs
156 typedef enum _PP_NPAGED_LOOKASIDE_NUMBER
158 LookasideSmallIrpList
= 0,
159 LookasideLargeIrpList
= 1,
160 LookasideMdlList
= 2,
161 LookasideCreateInfoList
= 3,
162 LookasideNameBufferList
= 4,
163 LookasideTwilightList
= 5,
164 LookasideCompletionList
= 6,
165 LookasideMaximumList
= 7
166 } PP_NPAGED_LOOKASIDE_NUMBER
;
169 // Memory Information Classes for NtQueryVirtualMemory
171 typedef enum _MEMORY_INFORMATION_CLASS
173 MemoryBasicInformation
,
174 MemoryWorkingSetList
,
176 MemoryBasicVlmInformation
,
177 MemoryWorkingSetExList
178 } MEMORY_INFORMATION_CLASS
;
181 // Section Information Clasess for NtQuerySection
183 typedef enum _SECTION_INFORMATION_CLASS
185 SectionBasicInformation
,
186 SectionImageInformation
,
187 } SECTION_INFORMATION_CLASS
;
192 typedef enum _MI_VAD_TYPE
195 VadDevicePhysicalMemory
,
202 } MI_VAD_TYPE
, *PMI_VAD_TYPE
;
204 #ifdef NTOS_MODE_USER
207 // Virtual Memory Counters
209 typedef struct _VM_COUNTERS
211 SIZE_T PeakVirtualSize
;
213 ULONG PageFaultCount
;
214 SIZE_T PeakWorkingSetSize
;
215 SIZE_T WorkingSetSize
;
216 SIZE_T QuotaPeakPagedPoolUsage
;
217 SIZE_T QuotaPagedPoolUsage
;
218 SIZE_T QuotaPeakNonPagedPoolUsage
;
219 SIZE_T QuotaNonPagedPoolUsage
;
220 SIZE_T PagefileUsage
;
221 SIZE_T PeakPagefileUsage
;
222 } VM_COUNTERS
, *PVM_COUNTERS
;
224 typedef struct _VM_COUNTERS_EX
226 SIZE_T PeakVirtualSize
;
228 ULONG PageFaultCount
;
229 SIZE_T PeakWorkingSetSize
;
230 SIZE_T WorkingSetSize
;
231 SIZE_T QuotaPeakPagedPoolUsage
;
232 SIZE_T QuotaPagedPoolUsage
;
233 SIZE_T QuotaPeakNonPagedPoolUsage
;
234 SIZE_T QuotaNonPagedPoolUsage
;
235 SIZE_T PagefileUsage
;
236 SIZE_T PeakPagefileUsage
;
238 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
242 // Sub-Information Types for PFN Identity
244 typedef struct _MEMORY_FRAME_INFORMATION
246 ULONGLONG UseDescription
:4;
247 ULONGLONG ListDescription
:3;
248 ULONGLONG Reserved0
:1;
250 ULONGLONG DontUse
:48;
251 ULONGLONG Priority
:3;
252 ULONGLONG Reserved
:4;
253 } MEMORY_FRAME_INFORMATION
, *PMEMORY_FRAME_INFORMATION
;
255 typedef struct _FILEOFFSET_INFORMATION
259 ULONGLONG Reserved
:7;
260 } FILEOFFSET_INFORMATION
, *PFILEOFFSET_INFORMATION
;
262 typedef struct _PAGEDIR_INFORMATION
265 ULONGLONG PageDirectoryBase
:48;
266 ULONGLONG Reserved
:7;
267 } PAGEDIR_INFORMATION
, *PPAGEDIR_INFORMATION
;
269 typedef struct _UNIQUE_PROCESS_INFORMATION
272 ULONGLONG UniqueProcessKey
:48;
273 ULONGLONG Reserved
:7;
274 } UNIQUE_PROCESS_INFORMATION
, *PUNIQUE_PROCESS_INFORMATION
;
277 // PFN Identity Data Structure
279 typedef struct _MMPFN_IDENTITY
283 MEMORY_FRAME_INFORMATION e1
;
284 FILEOFFSET_INFORMATION e2
;
285 PAGEDIR_INFORMATION e3
;
286 UNIQUE_PROCESS_INFORMATION e4
;
288 SIZE_T PageFrameIndex
;
297 PVOID UniqueFileObjectKey
;
298 PVOID ProtoPteAddress
;
299 PVOID VirtualAddress
;
301 } MMPFN_IDENTITY
, *PMMPFN_IDENTITY
;
304 // List of Working Sets
306 typedef struct _MEMORY_WORKING_SET_LIST
309 ULONG WorkingSetList
[1];
310 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
313 // Memory Information Structures for NtQueryVirtualMemory
317 UNICODE_STRING SectionFileName
;
318 WCHAR NameBuffer
[ANYSIZE_ARRAY
];
319 } MEMORY_SECTION_NAME
, *PMEMORY_SECTION_NAME
;
322 // Section Information Structures for NtQuerySection
324 typedef struct _SECTION_BASIC_INFORMATION
329 } SECTION_BASIC_INFORMATION
, *PSECTION_BASIC_INFORMATION
;
331 typedef struct _SECTION_IMAGE_INFORMATION
333 PVOID TransferAddress
;
335 SIZE_T MaximumStackSize
;
336 SIZE_T CommittedStackSize
;
342 USHORT SubSystemMinorVersion
;
343 USHORT SubSystemMajorVersion
;
345 ULONG SubSystemVersion
;
348 USHORT ImageCharacteristics
;
349 USHORT DllCharacteristics
;
351 BOOLEAN ImageContainsCode
;
352 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
357 UCHAR ComPlusNativeReady
:1;
358 UCHAR ComPlusILOnly
:1;
359 UCHAR ImageDynamicallyRelocated
:1;
360 UCHAR ImageMappedFlat
:1;
370 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
375 } SECTION_IMAGE_INFORMATION
, *PSECTION_IMAGE_INFORMATION
;
377 #ifndef NTOS_MODE_USER
382 typedef struct _MMPTE
389 MMPTE_PROTOTYPE Proto
;
391 MMPTE_TRANSITION Trans
;
392 MMPTE_SUBSECTION Subsect
;
398 // Section Extension Information
400 typedef struct _MMEXTEND_INFO
402 ULONGLONG CommittedSize
;
403 ULONG ReferenceCount
;
404 } MMEXTEND_INFO
, *PMMEXTEND_INFO
;
407 // Segment and Segment Flags
409 typedef struct _SEGMENT_FLAGS
411 ULONG TotalNumberOfPtes4132
:10;
412 ULONG ExtraSharedWowSubsections
:1;
415 } SEGMENT_FLAGS
, *PSEGMENT_FLAGS
;
417 typedef struct _SEGMENT
419 struct _CONTROL_AREA
*ControlArea
;
420 ULONG TotalNumberOfPtes
;
421 ULONG NonExtendedPtes
;
423 ULONGLONG SizeOfSegment
;
424 MMPTE SegmentPteTemplate
;
425 ULONG NumberOfCommittedPages
;
426 PMMEXTEND_INFO ExtendInfo
;
427 SEGMENT_FLAGS SegmentFlags
;
431 SIZE_T ImageCommitment
;
432 PEPROCESS CreatingProcess
;
436 PSECTION_IMAGE_INFORMATION ImageInformation
;
441 } SEGMENT
, *PSEGMENT
;
443 typedef struct _MAPPED_FILE_SEGMENT
445 struct _CONTROL_AREA
*ControlArea
;
446 ULONG TotalNumberOfPtes
;
447 ULONG NonExtendedPtes
;
449 UINT64 SizeOfSegment
;
450 MMPTE SegmentPteTemplate
;
451 SIZE_T NumberOfCommittedPages
;
452 PMMEXTEND_INFO ExtendInfo
;
453 SEGMENT_FLAGS SegmentFlags
;
455 struct _MSUBSECTION
*LastSubsectionHint
;
456 } MAPPED_FILE_SEGMENT
, *PMAPPED_FILE_SEGMENT
;
459 // Event Counter Structure
461 typedef struct _EVENT_COUNTER
463 SLIST_ENTRY ListEntry
;
466 } EVENT_COUNTER
, *PEVENT_COUNTER
;
471 typedef struct _MMSECTION_FLAGS
473 ULONG BeingDeleted
:1;
474 ULONG BeingCreated
:1;
476 ULONG NoModifiedWriting
:1;
483 ULONG PhysicalMemory
:1;
489 ULONG UserReference
:1;
490 ULONG GlobalMemory
:1;
491 ULONG DeleteOnClose
:1;
492 ULONG FilePointerNull
:1;
493 ULONG DebugSymbolsLoaded
:1;
494 ULONG SetMappedFileIoComplete
:1;
495 ULONG CollidedFlush
:1;
498 ULONG ImageMappedInSystemSpace
:1;
499 ULONG UserWritable
:1;
501 ULONG GlobalOnlyPerSession
:1;
503 ULONG WriteCombined
:1;
505 } MMSECTION_FLAGS
, *PMMSECTION_FLAGS
;
507 typedef struct _MMSUBSECTION_FLAGS
511 ULONG SubsectionStatic
:1;
512 ULONG GlobalMemory
:1;
515 ULONG StartingSector4132
:10;
516 ULONG SectorEndOffset
:12;
517 } MMSUBSECTION_FLAGS
, *PMMSUBSECTION_FLAGS
;
519 typedef struct _MMSUBSECTION_FLAGS2
521 ULONG SubsectionAccessed
:1;
522 ULONG SubsectionConverted
:1;
524 } MMSUBSECTION_FLAGS2
;
527 // Control Area Structures
529 typedef struct _CONTROL_AREA
532 LIST_ENTRY DereferenceList
;
533 ULONG NumberOfSectionReferences
;
534 ULONG NumberOfPfnReferences
;
535 ULONG NumberOfMappedViews
;
536 ULONG NumberOfSystemCacheViews
;
537 ULONG NumberOfUserReferences
;
541 MMSECTION_FLAGS Flags
;
543 PFILE_OBJECT FilePointer
;
544 PEVENT_COUNTER WaitingForDeletion
;
545 USHORT ModifiedWriteCount
;
546 USHORT FlushInProgressCount
;
547 ULONG WritableUserReferences
;
549 } CONTROL_AREA
, *PCONTROL_AREA
;
551 typedef struct _LARGE_CONTROL_AREA
554 LIST_ENTRY DereferenceList
;
555 ULONG NumberOfSectionReferences
;
556 ULONG NumberOfPfnReferences
;
557 ULONG NumberOfMappedViews
;
558 ULONG NumberOfSystemCacheViews
;
559 ULONG NumberOfUserReferences
;
563 MMSECTION_FLAGS Flags
;
565 PFILE_OBJECT FilePointer
;
566 PEVENT_COUNTER WaitingForDeletion
;
567 USHORT ModifiedWriteCount
;
568 USHORT FlushInProgressCount
;
569 ULONG WritableUserReferences
;
572 LIST_ENTRY UserGlobalList
;
574 } LARGE_CONTROL_AREA
, *PLARGE_CONTROL_AREA
;
577 // Subsection and Mapped Subsection
579 typedef struct _SUBSECTION
581 PCONTROL_AREA ControlArea
;
585 MMSUBSECTION_FLAGS SubsectionFlags
;
587 ULONG StartingSector
;
588 ULONG NumberOfFullSectors
;
589 PMMPTE SubsectionBase
;
591 ULONG PtesInSubsection
;
592 struct _SUBSECTION
*NextSubsection
;
593 } SUBSECTION
, *PSUBSECTION
;
595 typedef struct _MSUBSECTION
597 PCONTROL_AREA ControlArea
;
601 MMSUBSECTION_FLAGS SubsectionFlags
;
603 ULONG StartingSector
;
604 ULONG NumberOfFullSectors
;
605 PMMPTE SubsectionBase
;
607 ULONG PtesInSubsection
;
608 struct _SUBSECTION
*NextSubsection
;
609 LIST_ENTRY DereferenceList
;
610 ULONG_PTR NumberOfMappedViews
;
614 MMSUBSECTION_FLAGS2 SubsectionFlags2
;
616 } MSUBSECTION
, *PMSUBSECTION
;
621 typedef struct _SEGMENT_OBJECT
624 ULONG TotalNumberOfPtes
;
625 LARGE_INTEGER SizeOfSegment
;
626 ULONG NonExtendedPtes
;
627 ULONG ImageCommitment
;
628 PCONTROL_AREA ControlArea
;
629 PSUBSECTION Subsection
;
630 PLARGE_CONTROL_AREA LargeControlArea
;
631 PMMSECTION_FLAGS MmSectionFlags
;
632 PMMSUBSECTION_FLAGS MmSubSectionFlags
;
633 } SEGMENT_OBJECT
, *PSEGMENT_OBJECT
;
638 typedef struct _SECTION_OBJECT
644 PSEGMENT_OBJECT Segment
;
645 } SECTION_OBJECT
, *PSECTION_OBJECT
;
648 // Generic Address Range Structure
650 typedef struct _ADDRESS_RANGE
657 } ADDRESS_RANGE
, *PADDRESS_RANGE
;
660 // Node in Memory Manager's AVL Table
662 typedef struct _MMADDRESS_NODE
667 struct _MMADDRESS_NODE
*Parent
;
669 struct _MMADDRESS_NODE
*LeftChild
;
670 struct _MMADDRESS_NODE
*RightChild
;
671 ULONG_PTR StartingVpn
;
673 } MMADDRESS_NODE
, *PMMADDRESS_NODE
;
676 // Memory Manager AVL Table for VADs and other descriptors
678 typedef struct _MM_AVL_TABLE
680 MMADDRESS_NODE BalancedRoot
;
681 ULONG_PTR DepthOfTree
:5;
684 ULONG_PTR NumberGenericTableElements
:56;
686 ULONG_PTR NumberGenericTableElements
:24;
690 } MM_AVL_TABLE
, *PMM_AVL_TABLE
;
693 // Virtual Adress List used in VADs
695 typedef struct _MMADDRESS_LIST
699 } MMADDRESS_LIST
, *PMMADDRESS_LIST
;
702 // Flags used in the VAD
704 typedef struct _MMVAD_FLAGS
707 ULONG_PTR CommitCharge
:51;
709 ULONG_PTR CommitCharge
:19;
711 ULONG_PTR NoChange
:1;
713 ULONG_PTR MemCommit
:1;
714 ULONG_PTR Protection
:5;
716 ULONG_PTR PrivateMemory
:1;
717 } MMVAD_FLAGS
, *PMMVAD_FLAGS
;
720 // Extended flags used in the VAD
722 typedef struct _MMVAD_FLAGS2
727 ULONG MultipleSecured
:1;
730 ULONG ExtendableFile
:1;
733 } MMVAD_FLAGS2
, *PMMVAD_FLAGS2
;
736 // Virtual Address Descriptor (VAD) Structure
738 typedef struct _MMVAD
743 struct _MMVAD
*Parent
;
745 struct _MMVAD
*LeftChild
;
746 struct _MMVAD
*RightChild
;
747 ULONG_PTR StartingVpn
;
752 MMVAD_FLAGS VadFlags
;
754 PCONTROL_AREA ControlArea
;
755 PMMPTE FirstPrototypePte
;
756 PMMPTE LastContiguousPte
;
760 MMVAD_FLAGS2 VadFlags2
;
765 // Long VAD used in section and private allocations
767 typedef struct _MMVAD_LONG
776 ULONG_PTR StartingVpn
;
781 MMVAD_FLAGS VadFlags
;
783 PCONTROL_AREA ControlArea
;
784 PMMPTE FirstPrototypePte
;
785 PMMPTE LastContiguousPte
;
789 MMVAD_FLAGS2 VadFlags2
;
794 MMADDRESS_LIST Secured
;
799 PMMEXTEND_INFO ExtendedInfo
;
801 } MMVAD_LONG
, *PMMVAD_LONG
;
804 // Short VAD used in virtual memory allocations
806 typedef struct _MMVAD_SHORT
815 ULONG_PTR StartingVpn
;
820 MMVAD_FLAGS VadFlags
;
822 } MMVAD_SHORT
, *PMMVAD_SHORT
;
825 // Actual Section Object
827 typedef struct _SECTION
829 MMADDRESS_NODE Address
;
831 LARGE_INTEGER SizeOfSection
;
835 MMSECTION_FLAGS Flags
;
837 ULONG InitialPageProtection
;
838 } SECTION
, *PSECTION
;
841 // Memory Manager Working Set Structures
843 typedef struct _MMWSLENTRY
847 ULONG LockedInMemory
:1;
852 ULONG VirtualPageNumber
:20;
853 } MMWSLENTRY
, *PMMWSLENTRY
;
855 typedef struct _MMWSLE
859 PVOID VirtualAddress
;
865 typedef struct _MMWSLE_HASH
869 } MMWSLE_HASH
, *PMMWSLE_HASH
;
871 typedef struct _MMWSL
878 ULONG LastInitializedWsle
;
879 ULONG NonDirectCount
;
880 PMMWSLE_HASH HashTable
;
882 ULONG NumberOfCommittedPageTables
;
883 PVOID HashTableStart
;
884 PVOID HighestPermittedHashAddress
;
885 ULONG NumberOfImageWaiters
;
887 USHORT UsedPageTableEntries
[768];
888 ULONG CommittedPageTables
[24];
892 // Flags for Memory Support Structure
894 typedef struct _MMSUPPORT_FLAGS
896 ULONG SessionSpace
:1;
897 ULONG BeingTrimmed
:1;
898 ULONG SessionLeader
:1;
900 ULONG MaximumWorkingSetHard
:1;
902 ULONG MinimumWorkingSetHard
:1;
904 ULONG MemoryPriority
:8;
905 ULONG GrowWsleHash
:1;
906 ULONG AcquiredUnsafe
:1;
908 } MMSUPPORT_FLAGS
, *PMMSUPPORT_FLAGS
;
911 // Per-Process Memory Manager Data
913 typedef struct _MMSUPPORT
915 #if (NTDDI_VERSION >= NTDDI_WS03)
916 LIST_ENTRY WorkingSetExpansionLinks
;
918 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
919 USHORT LastTrimpStamp
;
920 USHORT NextPageColor
;
922 LARGE_INTEGER LastTrimTime
;
924 MMSUPPORT_FLAGS Flags
;
925 ULONG PageFaultCount
;
926 ULONG PeakWorkingSetSize
;
927 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
930 ULONG GrowthSinceLastEstimate
;
932 ULONG MinimumWorkingSetSize
;
933 ULONG MaximumWorkingSetSize
;
934 PMMWSL VmWorkingSetList
;
935 #if (NTDDI_VERSION < NTDDI_WS03)
936 LIST_ENTRY WorkingSetExpansionLinks
;
939 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
941 ULONG WorkingSetPrivateSize
;
942 ULONG WorkingSetSizeOverhead
;
944 ULONG NextEstimationSlot
;
946 ULONG EstimatedAvailable
;
948 ULONG WorkingSetSize
;
949 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
952 EX_PUSH_LOCK WorkingSetMutex
;
953 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
956 } MMSUPPORT
, *PMMSUPPORT
;
959 // Memory Information Types
961 typedef struct _MEMORY_BASIC_INFORMATION
964 PVOID AllocationBase
;
965 ULONG AllocationProtect
;
970 } MEMORY_BASIC_INFORMATION
,*PMEMORY_BASIC_INFORMATION
;
973 // Driver Verifier Data
975 typedef struct _MM_DRIVER_VERIFIER_DATA
979 ULONG AcquireSpinLocks
;
980 ULONG SynchronizeExecutions
;
981 ULONG AllocationsAttempted
;
982 ULONG AllocationsSucceeded
;
983 ULONG AllocationsSucceededSpecialPool
;
984 ULONG AllocationsWithNoTag
;
987 ULONG AllocationsFailed
;
988 ULONG AllocationsFailedDeliberately
;
993 ULONG CurrentPagedPoolAllocations
;
994 ULONG CurrentNonPagedPoolAllocations
;
995 ULONG PeakPagedPoolAllocations
;
996 ULONG PeakNonPagedPoolAllocations
;
999 ULONG PeakPagedBytes
;
1000 ULONG PeakNonPagedBytes
;
1001 ULONG BurstAllocationsFailedDeliberately
;
1004 } MM_DRIVER_VERIFIER_DATA
, *PMM_DRIVER_VERIFIER_DATA
;
1007 // Internal Driver Verifier Table Data
1009 typedef struct _DRIVER_SPECIFIED_VERIFIER_THUNKS
1011 LIST_ENTRY ListEntry
;
1012 struct _LDR_DATA_TABLE_ENTRY
*DataTableEntry
;
1013 ULONG NumberOfThunks
;
1014 } DRIVER_SPECIFIED_VERIFIER_THUNKS
, *PDRIVER_SPECIFIED_VERIFIER_THUNKS
;
1021 // Default heap size values. For user mode, these values are copied to a new
1022 // process's PEB by the kernel in MmCreatePeb. In kernel mode, RtlCreateHeap
1023 // reads these variables directly.
1025 // These variables should be considered "const"; they are written only once,
1026 // during MmInitSystem.
1028 extern SIZE_T MmHeapSegmentReserve
;
1029 extern SIZE_T MmHeapSegmentCommit
;
1030 extern SIZE_T MmHeapDeCommitTotalFreeThreshold
;
1031 extern SIZE_T MmHeapDeCommitFreeBlockThreshold
;
1034 // Section Object Type
1036 extern POBJECT_TYPE NTSYSAPI MmSectionObjectType
;
1042 #endif // !NTOS_MODE_USER
1048 #endif // _MMTYPES_H