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>
30 // Page-Rounding Macros
32 #define PAGE_ROUND_DOWN(x) \
33 (((ULONG_PTR)(x))&(~(PAGE_SIZE-1)))
34 #define PAGE_ROUND_UP(x) \
35 ( (((ULONG_PTR)(x)) + PAGE_SIZE-1) & (~(PAGE_SIZE-1)) )
37 #define ROUND_TO_PAGES(Size) \
38 (((ULONG_PTR)(Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
40 #define ROUND_TO_ALLOCATION_GRANULARITY(Size) \
41 (((ULONG_PTR)(Size) + MM_ALLOCATION_GRANULARITY - 1) \
42 & ~(MM_ALLOCATION_GRANULARITY - 1))
47 #define MMPFNUSE_PROCESSPRIVATE 0
48 #define MMPFNUSE_FILE 1
49 #define MMPFNUSE_PAGEFILEMAPPED 2
50 #define MMPFNUSE_PAGETABLE 3
51 #define MMPFNUSE_PAGEDPOOL 4
52 #define MMPFNUSE_NONPAGEDPOOL 5
53 #define MMPFNUSE_SYSTEMPTE 6
54 #define MMPFNUSE_SESSIONPRIVATE 7
55 #define MMPFNUSE_METAFILE 8
56 #define MMPFNUSE_AWEPAGE 9
57 #define MMPFNUSE_DRIVERLOCKPAGE 10
58 #define MMPFNUSE_KERNELSTACK 11
61 // Lock/Unlock Virtuam Memory Flags
67 // Flags for ProcessExecutionOptions
69 #define MEM_EXECUTE_OPTION_DISABLE 0x1
70 #define MEM_EXECUTE_OPTION_ENABLE 0x2
71 #define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION 0x4
72 #define MEM_EXECUTE_OPTION_PERMANENT 0x8
73 #define MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE 0x10
74 #define MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE 0x20
75 #define MEM_EXECUTE_OPTION_VALID_FLAGS 0x3F
77 #ifndef NTOS_MODE_USER
79 // Virtual Memory Flags
81 #define MEM_WRITE_WATCH 0x200000
82 #define MEM_PHYSICAL 0x400000
83 #define MEM_ROTATE 0x800000
84 #define MEM_IMAGE SEC_IMAGE
85 #define MEM_DOS_LIM 0x40000000
88 // Section Flags for NtCreateSection
90 #define SEC_NO_CHANGE 0x400000
91 #define SEC_FILE 0x800000
92 #define SEC_IMAGE 0x1000000
93 #define SEC_PROTECTED_IMAGE 0x2000000
94 #define SEC_RESERVE 0x4000000
95 #define SEC_COMMIT 0x8000000
96 #define SEC_NOCACHE 0x10000000
97 #define SEC_WRITECOMBINE 0x40000000
98 #define SEC_LARGE_PAGES 0x80000000
100 #define SEC_BASED 0x200000
103 // Section Inherit Flags for NtCreateSection
105 typedef enum _SECTION_INHERIT
114 typedef enum _POOL_TYPE
118 NonPagedPoolMustSucceed
,
120 NonPagedPoolCacheAligned
,
121 PagedPoolCacheAligned
,
122 NonPagedPoolCacheAlignedMustS
,
124 NonPagedPoolSession
= 32,
126 NonPagedPoolMustSucceedSession
,
127 DontUseThisTypeSession
,
128 NonPagedPoolCacheAlignedSession
,
129 PagedPoolCacheAlignedSession
,
130 NonPagedPoolCacheAlignedMustSSession
135 // Memory Manager Page Lists
137 typedef enum _MMLISTS
142 ModifiedPageList
= 3,
143 ModifiedNoWritePageList
= 4,
150 // Per Processor Non Paged Lookaside List IDs
152 typedef enum _PP_NPAGED_LOOKASIDE_NUMBER
154 LookasideSmallIrpList
= 0,
155 LookasideLargeIrpList
= 1,
156 LookasideMdlList
= 2,
157 LookasideCreateInfoList
= 3,
158 LookasideNameBufferList
= 4,
159 LookasideTwilightList
= 5,
160 LookasideCompletionList
= 6,
161 LookasideMaximumList
= 7
162 } PP_NPAGED_LOOKASIDE_NUMBER
;
165 // Memory Information Classes for NtQueryVirtualMemory
167 typedef enum _MEMORY_INFORMATION_CLASS
169 MemoryBasicInformation
,
170 MemoryWorkingSetList
,
172 MemoryBasicVlmInformation
,
173 MemoryWorkingSetExList
174 } MEMORY_INFORMATION_CLASS
;
177 // Section Information Clasess for NtQuerySection
179 typedef enum _SECTION_INFORMATION_CLASS
181 SectionBasicInformation
,
182 SectionImageInformation
,
183 } SECTION_INFORMATION_CLASS
;
188 typedef enum _MI_VAD_TYPE
191 VadDevicePhysicalMemory
,
198 } MI_VAD_TYPE
, *PMI_VAD_TYPE
;
200 #ifdef NTOS_MODE_USER
203 // Virtual Memory Counters
205 typedef struct _VM_COUNTERS
207 SIZE_T PeakVirtualSize
;
209 ULONG PageFaultCount
;
210 SIZE_T PeakWorkingSetSize
;
211 SIZE_T WorkingSetSize
;
212 SIZE_T QuotaPeakPagedPoolUsage
;
213 SIZE_T QuotaPagedPoolUsage
;
214 SIZE_T QuotaPeakNonPagedPoolUsage
;
215 SIZE_T QuotaNonPagedPoolUsage
;
216 SIZE_T PagefileUsage
;
217 SIZE_T PeakPagefileUsage
;
218 } VM_COUNTERS
, *PVM_COUNTERS
;
220 typedef struct _VM_COUNTERS_EX
222 SIZE_T PeakVirtualSize
;
224 ULONG PageFaultCount
;
225 SIZE_T PeakWorkingSetSize
;
226 SIZE_T WorkingSetSize
;
227 SIZE_T QuotaPeakPagedPoolUsage
;
228 SIZE_T QuotaPagedPoolUsage
;
229 SIZE_T QuotaPeakNonPagedPoolUsage
;
230 SIZE_T QuotaNonPagedPoolUsage
;
231 SIZE_T PagefileUsage
;
232 SIZE_T PeakPagefileUsage
;
234 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
238 // Sub-Information Types for PFN Identity
240 typedef struct _MEMORY_FRAME_INFORMATION
242 ULONGLONG UseDescription
:4;
243 ULONGLONG ListDescription
:3;
244 ULONGLONG Reserved0
:1;
246 ULONGLONG DontUse
:48;
247 ULONGLONG Priority
:3;
248 ULONGLONG Reserved
:4;
249 } MEMORY_FRAME_INFORMATION
, *PMEMORY_FRAME_INFORMATION
;
251 typedef struct _FILEOFFSET_INFORMATION
255 ULONGLONG Reserved
:7;
256 } FILEOFFSET_INFORMATION
, *PFILEOFFSET_INFORMATION
;
258 typedef struct _PAGEDIR_INFORMATION
261 ULONGLONG PageDirectoryBase
:48;
262 ULONGLONG Reserved
:7;
263 } PAGEDIR_INFORMATION
, *PPAGEDIR_INFORMATION
;
265 typedef struct _UNIQUE_PROCESS_INFORMATION
268 ULONGLONG UniqueProcessKey
:48;
269 ULONGLONG Reserved
:7;
270 } UNIQUE_PROCESS_INFORMATION
, *PUNIQUE_PROCESS_INFORMATION
;
273 // PFN Identity Data Structure
275 typedef struct _MMPFN_IDENTITY
279 MEMORY_FRAME_INFORMATION e1
;
280 FILEOFFSET_INFORMATION e2
;
281 PAGEDIR_INFORMATION e3
;
282 UNIQUE_PROCESS_INFORMATION e4
;
284 SIZE_T PageFrameIndex
;
293 PVOID UniqueFileObjectKey
;
294 PVOID ProtoPteAddress
;
295 PVOID VirtualAddress
;
297 } MMPFN_IDENTITY
, *PMMPFN_IDENTITY
;
300 // List of Working Sets
302 typedef struct _MEMORY_WORKING_SET_LIST
305 ULONG WorkingSetList
[1];
306 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
309 // Memory Information Structures for NtQueryVirtualMemory
313 UNICODE_STRING SectionFileName
;
314 WCHAR NameBuffer
[ANYSIZE_ARRAY
];
315 } MEMORY_SECTION_NAME
, *PMEMORY_SECTION_NAME
;
318 // Section Information Structures for NtQuerySection
320 typedef struct _SECTION_BASIC_INFORMATION
325 } SECTION_BASIC_INFORMATION
, *PSECTION_BASIC_INFORMATION
;
327 typedef struct _SECTION_IMAGE_INFORMATION
329 PVOID TransferAddress
;
331 SIZE_T MaximumStackSize
;
332 SIZE_T CommittedStackSize
;
338 USHORT SubSystemMinorVersion
;
339 USHORT SubSystemMajorVersion
;
341 ULONG SubSystemVersion
;
344 USHORT ImageCharacteristics
;
345 USHORT DllCharacteristics
;
347 BOOLEAN ImageContainsCode
;
348 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
353 UCHAR ComPlusNativeReady
:1;
354 UCHAR ComPlusILOnly
:1;
355 UCHAR ImageDynamicallyRelocated
:1;
356 UCHAR ImageMappedFlat
:1;
366 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
371 } SECTION_IMAGE_INFORMATION
, *PSECTION_IMAGE_INFORMATION
;
373 #ifndef NTOS_MODE_USER
378 typedef struct _MMPTE
385 MMPTE_PROTOTYPE Proto
;
387 MMPTE_TRANSITION Trans
;
388 MMPTE_SUBSECTION Subsect
;
394 // Section Extension Information
396 typedef struct _MMEXTEND_INFO
398 ULONGLONG CommittedSize
;
399 ULONG ReferenceCount
;
400 } MMEXTEND_INFO
, *PMMEXTEND_INFO
;
403 // Segment and Segment Flags
405 typedef struct _SEGMENT_FLAGS
407 ULONG TotalNumberOfPtes4132
:10;
408 ULONG ExtraSharedWowSubsections
:1;
411 } SEGMENT_FLAGS
, *PSEGMENT_FLAGS
;
413 typedef struct _SEGMENT
415 struct _CONTROL_AREA
*ControlArea
;
416 ULONG TotalNumberOfPtes
;
417 ULONG NonExtendedPtes
;
419 ULONGLONG SizeOfSegment
;
420 MMPTE SegmentPteTemplate
;
421 ULONG NumberOfCommittedPages
;
422 PMMEXTEND_INFO ExtendInfo
;
423 SEGMENT_FLAGS SegmentFlags
;
427 SIZE_T ImageCommitment
;
428 PEPROCESS CreatingProcess
;
432 PSECTION_IMAGE_INFORMATION ImageInformation
;
437 } SEGMENT
, *PSEGMENT
;
439 typedef struct _MAPPED_FILE_SEGMENT
441 struct _CONTROL_AREA
*ControlArea
;
442 ULONG TotalNumberOfPtes
;
443 ULONG NonExtendedPtes
;
445 UINT64 SizeOfSegment
;
446 MMPTE SegmentPteTemplate
;
447 SIZE_T NumberOfCommittedPages
;
448 PMMEXTEND_INFO ExtendInfo
;
449 SEGMENT_FLAGS SegmentFlags
;
451 struct _MSUBSECTION
*LastSubsectionHint
;
452 } MAPPED_FILE_SEGMENT
, *PMAPPED_FILE_SEGMENT
;
455 // Event Counter Structure
457 typedef struct _EVENT_COUNTER
459 SLIST_ENTRY ListEntry
;
462 } EVENT_COUNTER
, *PEVENT_COUNTER
;
467 typedef struct _MMSECTION_FLAGS
469 ULONG BeingDeleted
:1;
470 ULONG BeingCreated
:1;
472 ULONG NoModifiedWriting
:1;
479 ULONG PhysicalMemory
:1;
485 ULONG UserReference
:1;
486 ULONG GlobalMemory
:1;
487 ULONG DeleteOnClose
:1;
488 ULONG FilePointerNull
:1;
489 ULONG DebugSymbolsLoaded
:1;
490 ULONG SetMappedFileIoComplete
:1;
491 ULONG CollidedFlush
:1;
494 ULONG ImageMappedInSystemSpace
:1;
495 ULONG UserWritable
:1;
497 ULONG GlobalOnlyPerSession
:1;
499 ULONG WriteCombined
:1;
501 } MMSECTION_FLAGS
, *PMMSECTION_FLAGS
;
503 typedef struct _MMSUBSECTION_FLAGS
507 ULONG SubsectionStatic
:1;
508 ULONG GlobalMemory
:1;
511 ULONG StartingSector4132
:10;
512 ULONG SectorEndOffset
:12;
513 } MMSUBSECTION_FLAGS
, *PMMSUBSECTION_FLAGS
;
515 typedef struct _MMSUBSECTION_FLAGS2
517 ULONG SubsectionAccessed
:1;
518 ULONG SubsectionConverted
:1;
520 } MMSUBSECTION_FLAGS2
;
523 // Control Area Structures
525 typedef struct _CONTROL_AREA
528 LIST_ENTRY DereferenceList
;
529 ULONG NumberOfSectionReferences
;
530 ULONG NumberOfPfnReferences
;
531 ULONG NumberOfMappedViews
;
532 ULONG NumberOfSystemCacheViews
;
533 ULONG NumberOfUserReferences
;
537 MMSECTION_FLAGS Flags
;
539 PFILE_OBJECT FilePointer
;
540 PEVENT_COUNTER WaitingForDeletion
;
541 USHORT ModifiedWriteCount
;
542 USHORT FlushInProgressCount
;
543 ULONG WritableUserReferences
;
545 } CONTROL_AREA
, *PCONTROL_AREA
;
547 typedef struct _LARGE_CONTROL_AREA
550 LIST_ENTRY DereferenceList
;
551 ULONG NumberOfSectionReferences
;
552 ULONG NumberOfPfnReferences
;
553 ULONG NumberOfMappedViews
;
554 ULONG NumberOfSystemCacheViews
;
555 ULONG NumberOfUserReferences
;
559 MMSECTION_FLAGS Flags
;
561 PFILE_OBJECT FilePointer
;
562 PEVENT_COUNTER WaitingForDeletion
;
563 USHORT ModifiedWriteCount
;
564 USHORT FlushInProgressCount
;
565 ULONG WritableUserReferences
;
568 LIST_ENTRY UserGlobalList
;
570 } LARGE_CONTROL_AREA
, *PLARGE_CONTROL_AREA
;
573 // Subsection and Mapped Subsection
575 typedef struct _SUBSECTION
577 PCONTROL_AREA ControlArea
;
581 MMSUBSECTION_FLAGS SubsectionFlags
;
583 ULONG StartingSector
;
584 ULONG NumberOfFullSectors
;
585 PMMPTE SubsectionBase
;
587 ULONG PtesInSubsection
;
588 struct _SUBSECTION
*NextSubsection
;
589 } SUBSECTION
, *PSUBSECTION
;
591 typedef struct _MSUBSECTION
593 PCONTROL_AREA ControlArea
;
597 MMSUBSECTION_FLAGS SubsectionFlags
;
599 ULONG StartingSector
;
600 ULONG NumberOfFullSectors
;
601 PMMPTE SubsectionBase
;
603 ULONG PtesInSubsection
;
604 struct _SUBSECTION
*NextSubsection
;
605 LIST_ENTRY DereferenceList
;
606 ULONG_PTR NumberOfMappedViews
;
610 MMSUBSECTION_FLAGS2 SubsectionFlags2
;
612 } MSUBSECTION
, *PMSUBSECTION
;
617 typedef struct _SEGMENT_OBJECT
620 ULONG TotalNumberOfPtes
;
621 LARGE_INTEGER SizeOfSegment
;
622 ULONG NonExtendedPtes
;
623 ULONG ImageCommitment
;
624 PCONTROL_AREA ControlArea
;
625 PSUBSECTION Subsection
;
626 PLARGE_CONTROL_AREA LargeControlArea
;
627 PMMSECTION_FLAGS MmSectionFlags
;
628 PMMSUBSECTION_FLAGS MmSubSectionFlags
;
629 } SEGMENT_OBJECT
, *PSEGMENT_OBJECT
;
634 typedef struct _SECTION_OBJECT
640 PSEGMENT_OBJECT Segment
;
641 } SECTION_OBJECT
, *PSECTION_OBJECT
;
644 // Generic Address Range Structure
646 typedef struct _ADDRESS_RANGE
653 } ADDRESS_RANGE
, *PADDRESS_RANGE
;
656 // Node in Memory Manager's AVL Table
658 typedef struct _MMADDRESS_NODE
663 struct _MMADDRESS_NODE
*Parent
;
665 struct _MMADDRESS_NODE
*LeftChild
;
666 struct _MMADDRESS_NODE
*RightChild
;
667 ULONG_PTR StartingVpn
;
669 } MMADDRESS_NODE
, *PMMADDRESS_NODE
;
672 // Memory Manager AVL Table for VADs and other descriptors
674 typedef struct _MM_AVL_TABLE
676 MMADDRESS_NODE BalancedRoot
;
677 ULONG_PTR DepthOfTree
:5;
680 ULONG_PTR NumberGenericTableElements
:56;
682 ULONG_PTR NumberGenericTableElements
:24;
686 } MM_AVL_TABLE
, *PMM_AVL_TABLE
;
689 // Virtual Adress List used in VADs
691 typedef struct _MMADDRESS_LIST
695 } MMADDRESS_LIST
, *PMMADDRESS_LIST
;
698 // Flags used in the VAD
700 typedef struct _MMVAD_FLAGS
703 ULONG_PTR CommitCharge
:51;
705 ULONG_PTR CommitCharge
:19;
707 ULONG_PTR NoChange
:1;
709 ULONG_PTR MemCommit
:1;
710 ULONG_PTR Protection
:5;
712 ULONG_PTR PrivateMemory
:1;
713 } MMVAD_FLAGS
, *PMMVAD_FLAGS
;
716 // Extended flags used in the VAD
718 typedef struct _MMVAD_FLAGS2
723 ULONG MultipleSecured
:1;
726 ULONG ExtendableFile
:1;
729 } MMVAD_FLAGS2
, *PMMVAD_FLAGS2
;
732 // Virtual Address Descriptor (VAD) Structure
734 typedef struct _MMVAD
739 struct _MMVAD
*Parent
;
741 struct _MMVAD
*LeftChild
;
742 struct _MMVAD
*RightChild
;
743 ULONG_PTR StartingVpn
;
748 MMVAD_FLAGS VadFlags
;
750 PCONTROL_AREA ControlArea
;
751 PMMPTE FirstPrototypePte
;
752 PMMPTE LastContiguousPte
;
756 MMVAD_FLAGS2 VadFlags2
;
761 // Long VAD used in section and private allocations
763 typedef struct _MMVAD_LONG
772 ULONG_PTR StartingVpn
;
777 MMVAD_FLAGS VadFlags
;
779 PCONTROL_AREA ControlArea
;
780 PMMPTE FirstPrototypePte
;
781 PMMPTE LastContiguousPte
;
785 MMVAD_FLAGS2 VadFlags2
;
790 MMADDRESS_LIST Secured
;
795 PMMEXTEND_INFO ExtendedInfo
;
797 } MMVAD_LONG
, *PMMVAD_LONG
;
800 // Short VAD used in virtual memory allocations
802 typedef struct _MMVAD_SHORT
811 ULONG_PTR StartingVpn
;
816 MMVAD_FLAGS VadFlags
;
818 } MMVAD_SHORT
, *PMMVAD_SHORT
;
821 // Actual Section Object
823 typedef struct _SECTION
825 MMADDRESS_NODE Address
;
827 LARGE_INTEGER SizeOfSection
;
831 MMSECTION_FLAGS Flags
;
833 ULONG InitialPageProtection
;
834 } SECTION
, *PSECTION
;
837 // Memory Manager Working Set Structures
839 typedef struct _MMWSLENTRY
843 ULONG LockedInMemory
:1;
848 ULONG VirtualPageNumber
:20;
849 } MMWSLENTRY
, *PMMWSLENTRY
;
851 typedef struct _MMWSLE
855 PVOID VirtualAddress
;
861 typedef struct _MMWSLE_HASH
865 } MMWSLE_HASH
, *PMMWSLE_HASH
;
867 typedef struct _MMWSL
874 ULONG LastInitializedWsle
;
875 ULONG NonDirectCount
;
876 PMMWSLE_HASH HashTable
;
878 ULONG NumberOfCommittedPageTables
;
879 PVOID HashTableStart
;
880 PVOID HighestPermittedHashAddress
;
881 ULONG NumberOfImageWaiters
;
883 USHORT UsedPageTableEntries
[768];
884 ULONG CommittedPageTables
[24];
888 // Flags for Memory Support Structure
890 typedef struct _MMSUPPORT_FLAGS
892 ULONG SessionSpace
:1;
893 ULONG BeingTrimmed
:1;
894 ULONG SessionLeader
:1;
896 ULONG MaximumWorkingSetHard
:1;
898 ULONG MinimumWorkingSetHard
:1;
900 ULONG MemoryPriority
:8;
901 ULONG GrowWsleHash
:1;
902 ULONG AcquiredUnsafe
:1;
904 } MMSUPPORT_FLAGS
, *PMMSUPPORT_FLAGS
;
907 // Per-Process Memory Manager Data
909 typedef struct _MMSUPPORT
911 #if (NTDDI_VERSION >= NTDDI_WS03)
912 LIST_ENTRY WorkingSetExpansionLinks
;
914 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
915 USHORT LastTrimpStamp
;
916 USHORT NextPageColor
;
918 LARGE_INTEGER LastTrimTime
;
920 MMSUPPORT_FLAGS Flags
;
921 ULONG PageFaultCount
;
922 ULONG PeakWorkingSetSize
;
923 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
926 ULONG GrowthSinceLastEstimate
;
928 ULONG MinimumWorkingSetSize
;
929 ULONG MaximumWorkingSetSize
;
930 PMMWSL VmWorkingSetList
;
931 #if (NTDDI_VERSION < NTDDI_WS03)
932 LIST_ENTRY WorkingSetExpansionLinks
;
935 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
937 ULONG WorkingSetPrivateSize
;
938 ULONG WorkingSetSizeOverhead
;
940 ULONG NextEstimationSlot
;
942 ULONG EstimatedAvailable
;
944 ULONG WorkingSetSize
;
945 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
948 EX_PUSH_LOCK WorkingSetMutex
;
949 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
952 } MMSUPPORT
, *PMMSUPPORT
;
955 // Memory Information Types
957 typedef struct _MEMORY_BASIC_INFORMATION
960 PVOID AllocationBase
;
961 ULONG AllocationProtect
;
966 } MEMORY_BASIC_INFORMATION
,*PMEMORY_BASIC_INFORMATION
;
969 // Driver Verifier Data
971 typedef struct _MM_DRIVER_VERIFIER_DATA
975 ULONG AcquireSpinLocks
;
976 ULONG SynchronizeExecutions
;
977 ULONG AllocationsAttempted
;
978 ULONG AllocationsSucceeded
;
979 ULONG AllocationsSucceededSpecialPool
;
980 ULONG AllocationsWithNoTag
;
983 ULONG AllocationsFailed
;
984 ULONG AllocationsFailedDeliberately
;
989 ULONG CurrentPagedPoolAllocations
;
990 ULONG CurrentNonPagedPoolAllocations
;
991 ULONG PeakPagedPoolAllocations
;
992 ULONG PeakNonPagedPoolAllocations
;
995 ULONG PeakPagedBytes
;
996 ULONG PeakNonPagedBytes
;
997 ULONG BurstAllocationsFailedDeliberately
;
1000 } MM_DRIVER_VERIFIER_DATA
, *PMM_DRIVER_VERIFIER_DATA
;
1003 // Internal Driver Verifier Table Data
1005 typedef struct _DRIVER_SPECIFIED_VERIFIER_THUNKS
1007 LIST_ENTRY ListEntry
;
1008 struct _LDR_DATA_TABLE_ENTRY
*DataTableEntry
;
1009 ULONG NumberOfThunks
;
1010 } DRIVER_SPECIFIED_VERIFIER_THUNKS
, *PDRIVER_SPECIFIED_VERIFIER_THUNKS
;
1017 // Default heap size values. For user mode, these values are copied to a new
1018 // process's PEB by the kernel in MmCreatePeb. In kernel mode, RtlCreateHeap
1019 // reads these variables directly.
1021 // These variables should be considered "const"; they are written only once,
1022 // during MmInitSystem.
1024 extern SIZE_T MmHeapSegmentReserve
;
1025 extern SIZE_T MmHeapSegmentCommit
;
1026 extern SIZE_T MmHeapDeCommitTotalFreeThreshold
;
1027 extern SIZE_T MmHeapDeCommitFreeBlockThreshold
;
1030 // Section Object Type
1032 extern POBJECT_TYPE NTSYSAPI MmSectionObjectType
;
1038 #endif // !NTOS_MODE_USER
1040 #endif // _MMTYPES_H