ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

mmtypes.h
Go to the documentation of this file.
00001 /*++ NDK Version: 0098
00002 
00003 Copyright (c) Alex Ionescu.  All rights reserved.
00004 
00005 Header Name:
00006 
00007     mmtypes.h
00008 
00009 Abstract:
00010 
00011     Type definitions for the Memory Manager
00012 
00013 Author:
00014 
00015     Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
00016 
00017 --*/
00018 
00019 #ifndef _MMTYPES_H
00020 #define _MMTYPES_H
00021 
00022 //
00023 // Dependencies
00024 //
00025 #include <umtypes.h>
00026 #include <arch/mmtypes.h>
00027 #include <extypes.h>
00028 
00029 //
00030 // Page-Rounding Macros
00031 //
00032 #define PAGE_ROUND_DOWN(x)                                  \
00033     (((ULONG_PTR)(x))&(~(PAGE_SIZE-1)))
00034 #define PAGE_ROUND_UP(x)                                    \
00035     ( (((ULONG_PTR)(x)) + PAGE_SIZE-1)  & (~(PAGE_SIZE-1)) )
00036 #ifdef NTOS_MODE_USER
00037 #define ROUND_TO_PAGES(Size)                                \
00038     (((ULONG_PTR)(Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
00039 #endif
00040 #define ROUND_TO_ALLOCATION_GRANULARITY(Size)               \
00041     (((ULONG_PTR)(Size) + MM_ALLOCATION_GRANULARITY - 1)    \
00042     & ~(MM_ALLOCATION_GRANULARITY - 1))
00043 
00044 //
00045 // PFN Identity Uses
00046 //
00047 #define MMPFNUSE_PROCESSPRIVATE                             0
00048 #define MMPFNUSE_FILE                                       1
00049 #define MMPFNUSE_PAGEFILEMAPPED                             2
00050 #define MMPFNUSE_PAGETABLE                                  3
00051 #define MMPFNUSE_PAGEDPOOL                                  4
00052 #define MMPFNUSE_NONPAGEDPOOL                               5
00053 #define MMPFNUSE_SYSTEMPTE                                  6
00054 #define MMPFNUSE_SESSIONPRIVATE                             7
00055 #define MMPFNUSE_METAFILE                                   8
00056 #define MMPFNUSE_AWEPAGE                                    9
00057 #define MMPFNUSE_DRIVERLOCKPAGE                             10
00058 #define MMPFNUSE_KERNELSTACK                                11
00059 
00060 //
00061 // Lock/Unlock Virtuam Memory Flags
00062 //
00063 #define MAP_PROCESS                                         1
00064 #define MAP_SYSTEM                                          2
00065 
00066 //
00067 // Flags for ProcessExecutionOptions
00068 //
00069 #define MEM_EXECUTE_OPTION_DISABLE                          0x1 
00070 #define MEM_EXECUTE_OPTION_ENABLE                           0x2
00071 #define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION          0x4
00072 #define MEM_EXECUTE_OPTION_PERMANENT                        0x8
00073 #define MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE          0x10
00074 #define MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE            0x20 
00075 #define MEM_EXECUTE_OPTION_VALID_FLAGS                      0x3F
00076 
00077 #ifndef NTOS_MODE_USER
00078 //
00079 // Virtual Memory Flags
00080 //
00081 #define MEM_WRITE_WATCH                                     0x200000
00082 #define MEM_PHYSICAL                                        0x400000
00083 #define MEM_ROTATE                                          0x800000
00084 #define MEM_IMAGE                                           SEC_IMAGE
00085 #define MEM_DOS_LIM                                         0x40000000
00086 
00087 //
00088 // Section Flags for NtCreateSection
00089 //
00090 #define SEC_NO_CHANGE                                       0x400000
00091 #define SEC_FILE                                            0x800000
00092 #define SEC_IMAGE                                           0x1000000
00093 #define SEC_PROTECTED_IMAGE                                 0x2000000
00094 #define SEC_RESERVE                                         0x4000000
00095 #define SEC_COMMIT                                          0x8000000
00096 #define SEC_NOCACHE                                         0x10000000
00097 #define SEC_WRITECOMBINE                                    0x40000000
00098 #define SEC_LARGE_PAGES                                     0x80000000
00099 #else
00100 #define SEC_BASED                                           0x200000
00101 
00102 //
00103 // Section Inherit Flags for NtCreateSection
00104 //
00105 typedef enum _SECTION_INHERIT
00106 {
00107     ViewShare = 1,
00108     ViewUnmap = 2
00109 } SECTION_INHERIT;
00110 
00111 //
00112 // Pool Types
00113 //
00114 typedef enum _POOL_TYPE
00115 {
00116     NonPagedPool,
00117     PagedPool,
00118     NonPagedPoolMustSucceed,
00119     DontUseThisType,
00120     NonPagedPoolCacheAligned,
00121     PagedPoolCacheAligned,
00122     NonPagedPoolCacheAlignedMustS,
00123     MaxPoolType,
00124     NonPagedPoolSession = 32,
00125     PagedPoolSession,
00126     NonPagedPoolMustSucceedSession,
00127     DontUseThisTypeSession,
00128     NonPagedPoolCacheAlignedSession,
00129     PagedPoolCacheAlignedSession,
00130     NonPagedPoolCacheAlignedMustSSession
00131 } POOL_TYPE;
00132 #endif
00133 
00134 //
00135 // Memory Manager Page Lists
00136 //
00137 typedef enum _MMLISTS
00138 {
00139    ZeroedPageList = 0,
00140    FreePageList = 1,
00141    StandbyPageList = 2,
00142    ModifiedPageList = 3,
00143    ModifiedNoWritePageList = 4,
00144    BadPageList = 5,
00145    ActiveAndValid = 6,
00146    TransitionPage = 7
00147 } MMLISTS;
00148 
00149 //
00150 // Per Processor Non Paged Lookaside List IDs
00151 //
00152 typedef enum _PP_NPAGED_LOOKASIDE_NUMBER
00153 {
00154     LookasideSmallIrpList = 0,
00155     LookasideLargeIrpList = 1,
00156     LookasideMdlList = 2,
00157     LookasideCreateInfoList = 3,
00158     LookasideNameBufferList = 4,
00159     LookasideTwilightList = 5,
00160     LookasideCompletionList = 6,
00161     LookasideMaximumList = 7
00162 } PP_NPAGED_LOOKASIDE_NUMBER;
00163 
00164 //
00165 // Memory Information Classes for NtQueryVirtualMemory
00166 //
00167 typedef enum _MEMORY_INFORMATION_CLASS
00168 {
00169     MemoryBasicInformation,
00170     MemoryWorkingSetList,
00171     MemorySectionName,
00172     MemoryBasicVlmInformation
00173 } MEMORY_INFORMATION_CLASS;
00174 
00175 //
00176 // Section Information Clasess for NtQuerySection
00177 //
00178 typedef enum _SECTION_INFORMATION_CLASS
00179 {
00180     SectionBasicInformation,
00181     SectionImageInformation,
00182 } SECTION_INFORMATION_CLASS;
00183 
00184 //
00185 // Kinds of VADs
00186 //
00187 typedef enum _MI_VAD_TYPE
00188 {
00189     VadNone,
00190     VadDevicePhysicalMemory,
00191     VadImageMap,
00192     VadAwe,
00193     VadWriteWatch,
00194     VadLargePages,
00195     VadRotatePhysical,
00196     VadLargePageSection
00197 } MI_VAD_TYPE, *PMI_VAD_TYPE;
00198 
00199 #ifdef NTOS_MODE_USER
00200 
00201 //
00202 // Virtual Memory Counters
00203 //
00204 typedef struct _VM_COUNTERS
00205 {
00206     SIZE_T PeakVirtualSize;
00207     SIZE_T VirtualSize;
00208     ULONG PageFaultCount;
00209     SIZE_T PeakWorkingSetSize;
00210     SIZE_T WorkingSetSize;
00211     SIZE_T QuotaPeakPagedPoolUsage;
00212     SIZE_T QuotaPagedPoolUsage;
00213     SIZE_T QuotaPeakNonPagedPoolUsage;
00214     SIZE_T QuotaNonPagedPoolUsage;
00215     SIZE_T PagefileUsage;
00216     SIZE_T PeakPagefileUsage;
00217 } VM_COUNTERS, *PVM_COUNTERS;
00218 
00219 typedef struct _VM_COUNTERS_EX
00220 {
00221     SIZE_T PeakVirtualSize;
00222     SIZE_T VirtualSize;
00223     ULONG PageFaultCount;
00224     SIZE_T PeakWorkingSetSize;
00225     SIZE_T WorkingSetSize;
00226     SIZE_T QuotaPeakPagedPoolUsage;
00227     SIZE_T QuotaPagedPoolUsage;
00228     SIZE_T QuotaPeakNonPagedPoolUsage;
00229     SIZE_T QuotaNonPagedPoolUsage;
00230     SIZE_T PagefileUsage;
00231     SIZE_T PeakPagefileUsage;
00232     SIZE_T PrivateUsage;
00233 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
00234 #endif
00235 
00236 //
00237 // Sub-Information Types for PFN Identity
00238 //
00239 typedef struct _MEMORY_FRAME_INFORMATION
00240 {
00241     ULONGLONG UseDescription:4;
00242     ULONGLONG ListDescription:3;
00243     ULONGLONG Reserved0:1;
00244     ULONGLONG Pinned:1;
00245     ULONGLONG DontUse:48;
00246     ULONGLONG Priority:3;
00247     ULONGLONG Reserved:4;
00248 } MEMORY_FRAME_INFORMATION, *PMEMORY_FRAME_INFORMATION;
00249 
00250 typedef struct _FILEOFFSET_INFORMATION
00251 {
00252     ULONGLONG DontUse:9;
00253     ULONGLONG Offset:48;
00254     ULONGLONG Reserved:7;
00255 } FILEOFFSET_INFORMATION, *PFILEOFFSET_INFORMATION;
00256 
00257 typedef struct _PAGEDIR_INFORMATION
00258 {
00259     ULONGLONG DontUse:9;
00260     ULONGLONG PageDirectoryBase:48;
00261     ULONGLONG Reserved:7;
00262 } PAGEDIR_INFORMATION, *PPAGEDIR_INFORMATION;
00263 
00264 typedef struct _UNIQUE_PROCESS_INFORMATION
00265 {
00266     ULONGLONG DontUse:9;
00267     ULONGLONG UniqueProcessKey:48;
00268     ULONGLONG Reserved:7;
00269 } UNIQUE_PROCESS_INFORMATION, *PUNIQUE_PROCESS_INFORMATION;
00270 
00271 //
00272 // PFN Identity Data Structure
00273 //
00274 typedef struct _MMPFN_IDENTITY
00275 {
00276     union
00277     {
00278         MEMORY_FRAME_INFORMATION e1;
00279         FILEOFFSET_INFORMATION e2;
00280         PAGEDIR_INFORMATION e3;
00281         UNIQUE_PROCESS_INFORMATION e4;
00282     } u1;
00283     SIZE_T PageFrameIndex;
00284     union
00285     {
00286         struct
00287         {
00288             ULONG Image:1;
00289             ULONG Mismatch:1;
00290         } e1;
00291         PVOID FileObject;
00292         PVOID UniqueFileObjectKey;
00293         PVOID ProtoPteAddress;
00294         PVOID VirtualAddress;
00295     } u2;
00296 } MMPFN_IDENTITY, *PMMPFN_IDENTITY;
00297 
00298 //
00299 // List of Working Sets
00300 //
00301 typedef struct _MEMORY_WORKING_SET_LIST
00302 {
00303     ULONG NumberOfPages;
00304     ULONG WorkingSetList[1];
00305 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
00306 
00307 //
00308 // Memory Information Structures for NtQueryVirtualMemory
00309 //
00310 typedef struct
00311 {
00312     UNICODE_STRING SectionFileName;
00313     WCHAR NameBuffer[ANYSIZE_ARRAY];
00314 } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
00315 
00316 //
00317 // Section Information Structures for NtQuerySection
00318 //
00319 typedef struct _SECTION_BASIC_INFORMATION
00320 {
00321     PVOID           BaseAddress;
00322     ULONG           Attributes;
00323     LARGE_INTEGER   Size;
00324 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
00325 
00326 typedef struct _SECTION_IMAGE_INFORMATION
00327 {
00328     PVOID TransferAddress;
00329     ULONG ZeroBits;
00330     SIZE_T MaximumStackSize;
00331     SIZE_T CommittedStackSize;
00332     ULONG SubSystemType;
00333     union
00334     {
00335         struct
00336         {
00337             USHORT SubSystemMinorVersion;
00338             USHORT SubSystemMajorVersion;
00339         };
00340         ULONG SubSystemVersion;
00341     };
00342     ULONG GpValue;
00343     USHORT ImageCharacteristics;
00344     USHORT DllCharacteristics;
00345     USHORT Machine;
00346     UCHAR ImageContainsCode;
00347     UCHAR Spare1;
00348     ULONG LoaderFlags;
00349     ULONG ImageFileSize;
00350     ULONG Reserved[1];
00351 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
00352 
00353 #ifndef NTOS_MODE_USER
00354 
00355 //
00356 // PTE Structures
00357 //
00358 typedef struct _MMPTE
00359 {
00360     union
00361     {
00362         ULONG_PTR Long;
00363         HARDWARE_PTE Flush;
00364         MMPTE_HARDWARE Hard;
00365         MMPTE_PROTOTYPE Proto;
00366         MMPTE_SOFTWARE Soft;
00367         MMPTE_TRANSITION Trans;
00368         MMPTE_SUBSECTION Subsect;
00369         MMPTE_LIST List;
00370     } u;
00371 } MMPTE, *PMMPTE;
00372 
00373 //
00374 // Section Extension Information
00375 //
00376 typedef struct _MMEXTEND_INFO
00377 {
00378     ULONGLONG CommittedSize;
00379     ULONG ReferenceCount;
00380 } MMEXTEND_INFO, *PMMEXTEND_INFO;
00381 
00382 //
00383 // Segment and Segment Flags
00384 //
00385 typedef struct _SEGMENT_FLAGS
00386 {
00387     ULONG TotalNumberOfPtes4132:10;
00388     ULONG ExtraSharedWowSubsections:1;
00389     ULONG LargePages:1;
00390     ULONG Spare:20;
00391 } SEGMENT_FLAGS, *PSEGMENT_FLAGS;
00392 
00393 typedef struct _SEGMENT
00394 {
00395     struct _CONTROL_AREA *ControlArea;
00396     ULONG TotalNumberOfPtes;
00397     ULONG NonExtendedPtes;
00398     ULONG Spare0;
00399     ULONGLONG SizeOfSegment;
00400     MMPTE SegmentPteTemplate;
00401     ULONG NumberOfCommittedPages;
00402     PMMEXTEND_INFO ExtendInfo;
00403     SEGMENT_FLAGS SegmentFlags;
00404     PVOID BasedAddress;
00405     union
00406     {
00407         SIZE_T ImageCommitment;
00408         PEPROCESS CreatingProcess;
00409     } u1;
00410     union
00411     {
00412         PSECTION_IMAGE_INFORMATION ImageInformation;
00413         PVOID FirstMappedVa;
00414     } u2;
00415     PMMPTE PrototypePte;
00416     MMPTE ThePtes[1];
00417 } SEGMENT, *PSEGMENT;
00418 
00419 //
00420 // Event Counter Structure
00421 //
00422 typedef struct _EVENT_COUNTER
00423 {
00424     SLIST_ENTRY ListEntry;
00425     ULONG RefCount;
00426     KEVENT Event;
00427 } EVENT_COUNTER, *PEVENT_COUNTER;
00428 
00429 //
00430 // Flags
00431 //
00432 typedef struct _MMSECTION_FLAGS
00433 {
00434     ULONG BeingDeleted:1;
00435     ULONG BeingCreated:1;
00436     ULONG BeingPurged:1;
00437     ULONG NoModifiedWriting:1;
00438     ULONG FailAllIo:1;
00439     ULONG Image:1;
00440     ULONG Based:1;
00441     ULONG File:1;
00442     ULONG Networked:1;
00443     ULONG NoCache:1;
00444     ULONG PhysicalMemory:1;
00445     ULONG CopyOnWrite:1;
00446     ULONG Reserve:1;
00447     ULONG Commit:1;
00448     ULONG FloppyMedia:1;
00449     ULONG WasPurged:1;
00450     ULONG UserReference:1;
00451     ULONG GlobalMemory:1;
00452     ULONG DeleteOnClose:1;
00453     ULONG FilePointerNull:1;
00454     ULONG DebugSymbolsLoaded:1;
00455     ULONG SetMappedFileIoComplete:1;
00456     ULONG CollidedFlush:1;
00457     ULONG NoChange:1;
00458     ULONG filler0:1;
00459     ULONG ImageMappedInSystemSpace:1;
00460     ULONG UserWritable:1;
00461     ULONG Accessed:1;
00462     ULONG GlobalOnlyPerSession:1;
00463     ULONG Rom:1;
00464     ULONG WriteCombined:1;
00465     ULONG filler:1;
00466 } MMSECTION_FLAGS, *PMMSECTION_FLAGS;
00467 
00468 typedef struct _MMSUBSECTION_FLAGS
00469 {
00470     ULONG ReadOnly:1;
00471     ULONG ReadWrite:1;
00472     ULONG SubsectionStatic:1;
00473     ULONG GlobalMemory:1;
00474     ULONG Protection:5;
00475     ULONG Spare:1;
00476     ULONG StartingSector4132:10;
00477     ULONG SectorEndOffset:12;
00478 } MMSUBSECTION_FLAGS, *PMMSUBSECTION_FLAGS;
00479 
00480 typedef struct _MMSUBSECTION_FLAGS2
00481 {
00482     ULONG SubsectionAccessed:1;
00483     ULONG SubsectionConverted:1;
00484     ULONG Reserved:30;
00485 } MMSUBSECTION_FLAGS2;
00486 
00487 //
00488 // Control Area Structures
00489 //
00490 typedef struct _CONTROL_AREA
00491 {
00492     PSEGMENT Segment;
00493     LIST_ENTRY DereferenceList;
00494     ULONG NumberOfSectionReferences;
00495     ULONG NumberOfPfnReferences;
00496     ULONG NumberOfMappedViews;
00497     ULONG NumberOfSystemCacheViews;
00498     ULONG NumberOfUserReferences;
00499     union
00500     {
00501         ULONG LongFlags;
00502         MMSECTION_FLAGS Flags;
00503     } u;
00504     PFILE_OBJECT FilePointer;
00505     PEVENT_COUNTER WaitingForDeletion;
00506     USHORT ModifiedWriteCount;
00507     USHORT FlushInProgressCount;
00508     ULONG WritableUserReferences;
00509     ULONG QuadwordPad;
00510 } CONTROL_AREA, *PCONTROL_AREA;
00511 
00512 typedef struct _LARGE_CONTROL_AREA
00513 {
00514     PSEGMENT Segment;
00515     LIST_ENTRY DereferenceList;
00516     ULONG NumberOfSectionReferences;
00517     ULONG NumberOfPfnReferences;
00518     ULONG NumberOfMappedViews;
00519     ULONG NumberOfSystemCacheViews;
00520     ULONG NumberOfUserReferences;
00521     union
00522     {
00523         ULONG LongFlags;
00524         MMSECTION_FLAGS Flags;
00525     } u;
00526     PFILE_OBJECT FilePointer;
00527     PEVENT_COUNTER WaitingForDeletion;
00528     USHORT ModifiedWriteCount;
00529     USHORT FlushInProgressCount;
00530     ULONG WritableUserReferences;
00531     ULONG QuadwordPad;
00532     ULONG StartingFrame;
00533     LIST_ENTRY UserGlobalList;
00534     ULONG SessionId;
00535 } LARGE_CONTROL_AREA, *PLARGE_CONTROL_AREA;
00536 
00537 //
00538 // Subsection and Mapped Subsection
00539 //
00540 typedef struct _SUBSECTION
00541 {
00542     PCONTROL_AREA ControlArea;
00543     union
00544     {
00545         ULONG LongFlags;
00546         MMSUBSECTION_FLAGS SubsectionFlags;
00547     } u;
00548     ULONG StartingSector;
00549     ULONG NumberOfFullSectors;
00550     PMMPTE SubsectionBase;
00551     ULONG UnusedPtes;
00552     ULONG PtesInSubsection;
00553     struct _SUBSECTION *NextSubsection;
00554 } SUBSECTION, *PSUBSECTION;
00555 
00556 typedef struct _MSUBSECTION
00557 {
00558     PCONTROL_AREA ControlArea;
00559     union
00560     {
00561         ULONG LongFlags;
00562         MMSUBSECTION_FLAGS SubsectionFlags;
00563     } u;
00564     ULONG StartingSector;
00565     ULONG NumberOfFullSectors;
00566     PMMPTE SubsectionBase;
00567     ULONG UnusedPtes;
00568     ULONG PtesInSubsection;
00569     struct _SUBSECTION *NextSubsection;
00570     LIST_ENTRY DereferenceList;
00571     ULONG_PTR NumberOfMappedViews;
00572     union
00573     {
00574         ULONG LongFlags2;
00575         MMSUBSECTION_FLAGS2 SubsectionFlags2;
00576     } u2;
00577 } MSUBSECTION, *PMSUBSECTION;
00578 
00579 //
00580 // Segment Object
00581 //
00582 typedef struct _SEGMENT_OBJECT
00583 {
00584     PVOID BaseAddress;
00585     ULONG TotalNumberOfPtes;
00586     LARGE_INTEGER SizeOfSegment;
00587     ULONG NonExtendedPtes;
00588     ULONG ImageCommitment;
00589     PCONTROL_AREA ControlArea;
00590     PSUBSECTION Subsection;
00591     PLARGE_CONTROL_AREA LargeControlArea;
00592     PMMSECTION_FLAGS MmSectionFlags;
00593     PMMSUBSECTION_FLAGS MmSubSectionFlags;
00594 } SEGMENT_OBJECT, *PSEGMENT_OBJECT;
00595 
00596 //
00597 // Section Object
00598 //
00599 typedef struct _SECTION_OBJECT
00600 {
00601     PVOID StartingVa;
00602     PVOID EndingVa;
00603     PVOID LeftChild;
00604     PVOID RightChild;
00605     PSEGMENT_OBJECT Segment;
00606 } SECTION_OBJECT, *PSECTION_OBJECT;
00607 
00608 //
00609 // Generic Address Range Structure
00610 //
00611 typedef struct _ADDRESS_RANGE
00612 {
00613     ULONG BaseAddrLow;
00614     ULONG BaseAddrHigh;
00615     ULONG LengthLow;
00616     ULONG LengthHigh;
00617     ULONG Type;
00618 } ADDRESS_RANGE, *PADDRESS_RANGE;
00619 
00620 //
00621 // Node in Memory Manager's AVL Table
00622 //
00623 typedef struct _MMADDRESS_NODE
00624 {
00625     union
00626     {
00627         LONG_PTR Balance:2;
00628         struct _MMADDRESS_NODE *Parent;
00629     } u1;
00630     struct _MMADDRESS_NODE *LeftChild;
00631     struct _MMADDRESS_NODE *RightChild;
00632     ULONG_PTR StartingVpn;
00633     ULONG_PTR EndingVpn;
00634 } MMADDRESS_NODE, *PMMADDRESS_NODE;
00635 
00636 //
00637 // Memory Manager AVL Table for VADs and other descriptors
00638 //
00639 typedef struct _MM_AVL_TABLE
00640 {
00641     MMADDRESS_NODE BalancedRoot;
00642     ULONG_PTR DepthOfTree:5;
00643     ULONG_PTR Unused:3;
00644 #ifdef _WIN64
00645     ULONG_PTR NumberGenericTableElements:56;
00646 #else
00647     ULONG_PTR NumberGenericTableElements:24;
00648 #endif
00649     PVOID NodeHint;
00650     PVOID NodeFreeHint;
00651 } MM_AVL_TABLE, *PMM_AVL_TABLE;
00652 
00653 //
00654 // Virtual Adress List used in VADs
00655 //
00656 typedef struct _MMADDRESS_LIST
00657 {
00658     ULONG_PTR StartVpn;
00659     ULONG_PTR EndVpn;
00660 } MMADDRESS_LIST, *PMMADDRESS_LIST;
00661 
00662 //
00663 // Flags used in the VAD
00664 //
00665 typedef struct _MMVAD_FLAGS
00666 {
00667 #ifdef _WIN64
00668     ULONG_PTR CommitCharge:51;
00669 #else
00670     ULONG_PTR CommitCharge:19;
00671 #endif
00672     ULONG_PTR NoChange:1;
00673     ULONG_PTR VadType:3;
00674     ULONG_PTR MemCommit:1;
00675     ULONG_PTR Protection:5;
00676     ULONG_PTR Spare:2;
00677     ULONG_PTR PrivateMemory:1;
00678 } MMVAD_FLAGS, *PMMVAD_FLAGS;
00679 
00680 //
00681 // Extended flags used in the VAD
00682 //
00683 typedef struct _MMVAD_FLAGS2
00684 {
00685     ULONG FileOffset:24;
00686     ULONG SecNoChange:1;
00687     ULONG OneSecured:1;
00688     ULONG MultipleSecured:1;
00689     ULONG ReadOnly:1;
00690     ULONG LongVad:1;
00691     ULONG ExtendableFile:1;
00692     ULONG Inherit:1;
00693     ULONG CopyOnWrite:1;
00694 } MMVAD_FLAGS2, *PMMVAD_FLAGS2;
00695 
00696 //
00697 // Virtual Address Descriptor (VAD) Structure
00698 //
00699 typedef struct _MMVAD
00700 {
00701     union
00702     {
00703         LONG_PTR Balance:2;
00704         struct _MMVAD *Parent;
00705     } u1;
00706     struct _MMVAD *LeftChild;
00707     struct _MMVAD *RightChild;
00708     ULONG_PTR StartingVpn;
00709     ULONG_PTR EndingVpn;
00710     union
00711     {
00712         ULONG_PTR LongFlags;
00713         MMVAD_FLAGS VadFlags;
00714     } u;
00715     PCONTROL_AREA ControlArea;
00716     PMMPTE FirstPrototypePte;
00717     PMMPTE LastContiguousPte;
00718     union
00719     {
00720         ULONG LongFlags2;
00721         MMVAD_FLAGS2 VadFlags2;
00722     } u2;
00723 } MMVAD, *PMMVAD;
00724 
00725 //
00726 // Long VAD used in section and private allocations
00727 //
00728 typedef struct _MMVAD_LONG
00729 {
00730     union
00731     {
00732         LONG_PTR Balance:2;
00733         PMMVAD Parent;
00734     } u1;
00735     PMMVAD LeftChild;
00736     PMMVAD RightChild;
00737     ULONG_PTR StartingVpn;
00738     ULONG_PTR EndingVpn;
00739     union
00740     {
00741         ULONG_PTR LongFlags;
00742         MMVAD_FLAGS VadFlags;
00743     } u;
00744     PCONTROL_AREA ControlArea;
00745     PMMPTE FirstPrototypePte;
00746     PMMPTE LastContiguousPte;
00747     union
00748     {
00749         ULONG LongFlags2;
00750         MMVAD_FLAGS2 VadFlags2;
00751     } u2;
00752     union
00753     {
00754         LIST_ENTRY List;
00755         MMADDRESS_LIST Secured;
00756     } u3;
00757     union
00758     {
00759         PVOID Banked;
00760         PMMEXTEND_INFO ExtendedInfo;
00761     } u4;
00762 } MMVAD_LONG, *PMMVAD_LONG;
00763 
00764 //
00765 // Short VAD used in virtual memory allocations
00766 //
00767 typedef struct _MMVAD_SHORT
00768 {
00769     union
00770     {
00771         LONG_PTR Balance:2;
00772         PMMVAD Parent;
00773     } u1;
00774     PMMVAD LeftChild;
00775     PMMVAD RightChild;
00776     ULONG_PTR StartingVpn;
00777     ULONG_PTR EndingVpn;
00778     union
00779     {
00780         ULONG_PTR LongFlags;
00781         MMVAD_FLAGS VadFlags;
00782     } u;
00783 } MMVAD_SHORT, *PMMVAD_SHORT;
00784 
00785 //
00786 // Actual Section Object
00787 //
00788 typedef struct _SECTION
00789 {
00790     MMADDRESS_NODE Address;
00791     PSEGMENT Segment;
00792     LARGE_INTEGER SizeOfSection;
00793     union
00794     {
00795         ULONG LongFlags;
00796         MMSECTION_FLAGS Flags;
00797     } u;
00798     ULONG InitialPageProtection;
00799 } SECTION, *PSECTION;
00800 
00801 //
00802 // Memory Manager Working Set Structures
00803 //
00804 typedef struct _MMWSLENTRY
00805 {
00806     ULONG Valid:1;
00807     ULONG LockedInWs:1;
00808     ULONG LockedInMemory:1;
00809     ULONG Protection:5;
00810     ULONG Hashed:1;
00811     ULONG Direct:1;
00812     ULONG Age:2;
00813     ULONG VirtualPageNumber:20;
00814 } MMWSLENTRY, *PMMWSLENTRY;
00815 
00816 typedef struct _MMWSLE
00817 {
00818     union
00819     {
00820         PVOID VirtualAddress;
00821         ULONG Long;
00822         MMWSLENTRY e1;
00823     } u1;
00824 } MMWSLE, *PMMWSLE;
00825 
00826 typedef struct _MMWSLE_HASH
00827 {
00828     PVOID Key;
00829     ULONG Index;
00830 } MMWSLE_HASH, *PMMWSLE_HASH;
00831 
00832 typedef struct _MMWSL
00833 {
00834     ULONG FirstFree;
00835     ULONG FirstDynamic;
00836     ULONG LastEntry;
00837     ULONG NextSlot;
00838     PMMWSLE Wsle;
00839     ULONG LastInitializedWsle;
00840     ULONG NonDirectCount;
00841     PMMWSLE_HASH HashTable;
00842     ULONG HashTableSize;
00843     ULONG NumberOfCommittedPageTables;
00844     PVOID HashTableStart;
00845     PVOID HighestPermittedHashAddress;
00846     ULONG NumberOfImageWaiters;
00847     ULONG VadBitMapHint;
00848     USHORT UsedPageTableEntries[768];
00849     ULONG CommittedPageTables[24];
00850 } MMWSL, *PMMWSL;
00851 
00852 //
00853 // Flags for Memory Support Structure
00854 //
00855 typedef struct _MMSUPPORT_FLAGS
00856 {
00857     ULONG SessionSpace:1;
00858     ULONG BeingTrimmed:1;
00859     ULONG SessionLeader:1;
00860     ULONG TrimHard:1;
00861     ULONG MaximumWorkingSetHard:1;
00862     ULONG ForceTrim:1;
00863     ULONG MinimumWorkingSetHard:1;
00864     ULONG Available0:1;
00865     ULONG MemoryPriority:8;
00866     ULONG GrowWsleHash:1;
00867     ULONG AcquiredUnsafe:1;
00868     ULONG Available:14;
00869 } MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS;
00870 
00871 //
00872 // Per-Process Memory Manager Data
00873 //
00874 typedef struct _MMSUPPORT
00875 {
00876 #if (NTDDI_VERSION >= NTDDI_WS03)
00877     LIST_ENTRY WorkingSetExpansionLinks;
00878 #endif
00879 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00880     USHORT LastTrimpStamp;
00881     USHORT NextPageColor;
00882 #else
00883     LARGE_INTEGER LastTrimTime;
00884 #endif
00885     MMSUPPORT_FLAGS Flags;
00886     ULONG PageFaultCount;
00887     ULONG PeakWorkingSetSize;
00888 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00889     ULONG Spare0;
00890 #else
00891     ULONG GrowthSinceLastEstimate;
00892 #endif
00893     ULONG MinimumWorkingSetSize;
00894     ULONG MaximumWorkingSetSize;
00895     PMMWSL VmWorkingSetList;
00896 #if (NTDDI_VERSION < NTDDI_WS03)
00897     LIST_ENTRY WorkingSetExpansionLinks;
00898 #endif
00899     ULONG Claim;
00900 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00901     ULONG Spare;
00902     ULONG WorkingSetPrivateSize;
00903     ULONG WorkingSetSizeOverhead;
00904 #else
00905     ULONG NextEstimationSlot;
00906     ULONG NextAgingSlot;
00907     ULONG EstimatedAvailable;
00908 #endif
00909     ULONG WorkingSetSize;
00910 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00911     PKEVENT ExitEvent;
00912 #endif
00913     EX_PUSH_LOCK WorkingSetMutex;
00914 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00915     PVOID AccessLog;
00916 #endif
00917 } MMSUPPORT, *PMMSUPPORT;
00918 
00919 //
00920 // Memory Information Types
00921 //
00922 typedef struct _MEMORY_BASIC_INFORMATION
00923 {
00924     PVOID BaseAddress;
00925     PVOID AllocationBase;
00926     ULONG AllocationProtect;
00927     SIZE_T RegionSize;
00928     ULONG State;
00929     ULONG Protect;
00930     ULONG Type;
00931 } MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
00932 
00933 //
00934 // Driver Verifier Data
00935 //
00936 typedef struct _MM_DRIVER_VERIFIER_DATA
00937 {
00938     ULONG Level;
00939     ULONG RaiseIrqls;
00940     ULONG AcquireSpinLocks;
00941     ULONG SynchronizeExecutions;
00942     ULONG AllocationsAttempted;
00943     ULONG AllocationsSucceeded;
00944     ULONG AllocationsSucceededSpecialPool;
00945     ULONG AllocationsWithNoTag;
00946     ULONG TrimRequests;
00947     ULONG Trims;
00948     ULONG AllocationsFailed;
00949     ULONG AllocationsFailedDeliberately;
00950     ULONG Loads;
00951     ULONG Unloads;
00952     ULONG UnTrackedPool;
00953     ULONG UserTrims;
00954     ULONG CurrentPagedPoolAllocations;
00955     ULONG CurrentNonPagedPoolAllocations;
00956     ULONG PeakPagedPoolAllocations;
00957     ULONG PeakNonPagedPoolAllocations;
00958     ULONG PagedBytes;
00959     ULONG NonPagedBytes;
00960     ULONG PeakPagedBytes;
00961     ULONG PeakNonPagedBytes;
00962     ULONG BurstAllocationsFailedDeliberately;
00963     ULONG SessionTrims;
00964     ULONG Reserved[2];
00965 } MM_DRIVER_VERIFIER_DATA, *PMM_DRIVER_VERIFIER_DATA;
00966 
00967 //
00968 // Internal Driver Verifier Table Data
00969 //
00970 typedef struct _DRIVER_SPECIFIED_VERIFIER_THUNKS
00971 {
00972     LIST_ENTRY ListEntry;
00973     struct _LDR_DATA_TABLE_ENTRY *DataTableEntry;
00974     ULONG NumberOfThunks;
00975 } DRIVER_SPECIFIED_VERIFIER_THUNKS, *PDRIVER_SPECIFIED_VERIFIER_THUNKS;
00976 
00977 //
00978 // Default heap size values.  For user mode, these values are copied to a new
00979 // process's PEB by the kernel in MmCreatePeb.  In kernel mode, RtlCreateHeap
00980 // reads these variables directly.
00981 //
00982 // These variables should be considered "const"; they are written only once,
00983 // during MmInitSystem.
00984 //
00985 extern SIZE_T MmHeapSegmentReserve;
00986 extern SIZE_T MmHeapSegmentCommit;
00987 extern SIZE_T MmHeapDeCommitTotalFreeThreshold;
00988 extern SIZE_T MmHeapDeCommitFreeBlockThreshold;
00989 
00990 //
00991 // Section Object Type
00992 //
00993 extern POBJECT_TYPE NTSYSAPI MmSectionObjectType;
00994 
00995 #endif // !NTOS_MODE_USER
00996 
00997 #endif // _MMTYPES_H

Generated on Sat May 26 2012 04:29:27 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.