#include <ntddk.h>



typedef struct _MMSECTION_FLAGS {
/*0x000*/     UINT32       BeingDeleted : 1;
/*0x000*/     UINT32       BeingCreated : 1;
/*0x000*/     UINT32       BeingPurged : 1;
/*0x000*/     UINT32       NoModifiedWriting : 1;
/*0x000*/     UINT32       FailAllIo : 1;
/*0x000*/     UINT32       Image : 1;
/*0x000*/     UINT32       Based : 1;
/*0x000*/     UINT32       File : 1;
/*0x000*/     UINT32       Networked : 1;
/*0x000*/     UINT32       NoCache : 1;
/*0x000*/     UINT32       PhysicalMemory : 1;
/*0x000*/     UINT32       CopyOnWrite : 1;
/*0x000*/     UINT32       Reserve : 1;
/*0x000*/     UINT32       Commit : 1;
/*0x000*/     UINT32       FloppyMedia : 1;
/*0x000*/     UINT32       WasPurged : 1;
/*0x000*/     UINT32       UserReference : 1;
/*0x000*/     UINT32       GlobalMemory : 1;
/*0x000*/     UINT32       DeleteOnClose : 1;
/*0x000*/     UINT32       FilePointerNull : 1;
/*0x000*/     UINT32       DebugSymbolsLoaded : 1;
/*0x000*/     UINT32       SetMappedFileIoComplete : 1;
/*0x000*/     UINT32       CollidedFlush : 1;
/*0x000*/     UINT32       NoChange : 1;
/*0x000*/     UINT32       HadUserReference : 1;
/*0x000*/     UINT32       ImageMappedInSystemSpace : 1;
/*0x000*/     UINT32       UserWritable : 1;
/*0x000*/     UINT32       Accessed : 1;
/*0x000*/     UINT32       GlobalOnlyPerSession : 1;
/*0x000*/     UINT32       Rom : 1;
/*0x000*/     UINT32       filler : 2;
}MMSECTION_FLAGS, *PMMSECTION_FLAGS;


typedef struct _MMVAD_FLAGS {
/*0x000*/     ULONG32      CommitCharge : 19;
/*0x000*/     ULONG32      PhysicalMapping : 1;
/*0x000*/     ULONG32      ImageMap : 1;
/*0x000*/     ULONG32      UserPhysicalPages : 1;
/*0x000*/     ULONG32      NoChange : 1;
/*0x000*/     ULONG32      WriteWatch : 1;
/*0x000*/     ULONG32      Protection : 5;
/*0x000*/     ULONG32      LargePages : 1;
/*0x000*/     ULONG32      MemCommit : 1;
/*0x000*/     ULONG32      PrivateMemory : 1;
}MMVAD_FLAGS, *PMMVAD_FLAGS;

typedef struct _MMVAD_FLAGS2 {
/*0x000*/     UINT32       FileOffset : 24;
/*0x000*/     UINT32       SecNoChange : 1;
/*0x000*/     UINT32       OneSecured : 1;
/*0x000*/     UINT32       MultipleSecured : 1;
/*0x000*/     UINT32       ReadOnly : 1;
/*0x000*/     UINT32       LongVad : 1;
/*0x000*/     UINT32       ExtendableFile : 1;
/*0x000*/     UINT32       Inherit : 1;
/*0x000*/     UINT32       CopyOnWrite : 1;
}MMVAD_FLAGS2, *PMMVAD_FLAGS2;

typedef struct CONTROL_AREA {
/*0x000*/     struct _SEGMENT* Segment;                                                      
/*0x004*/     struct _LIST_ENTRY DereferenceList;
/*0x00C*/     ULONG32      NumberOfSectionReferences;                                        
/*0x010*/     ULONG32      NumberOfPfnReferences;                                            
/*0x014*/     ULONG32      NumberOfMappedViews;                                              
/*0x018*/     UINT16       NumberOfSubsections;                                              
/*0x01A*/     UINT16       FlushInProgressCount;                                             
/*0x01C*/     ULONG32      NumberOfUserReferences;                                           
              union
              {                                                                              
/*0x020*/         ULONG32      LongFlags;                                                    
/*0x020*/         struct _MMSECTION_FLAGS Flags;
              }u;                                                                            
/*0x024*/     struct _FILE_OBJECT* FilePointer;                                              
/*0x028*/     struct _EVENT_COUNTER* WaitingForDeletion;                                     
/*0x02C*/     UINT16       ModifiedWriteCount;                                               
/*0x02E*/     UINT16       NumberOfSystemCacheViews;                                         
}CONTROL_AREA, *PCONTROL_AREA;


typedef struct MMVAD {
/*0x000*/     ULONG32      StartingVpn;                                               
/*0x004*/     ULONG32      EndingVpn;                                                 
/*0x008*/     struct _MMVAD* Parent;                                                  
/*0x00C*/     struct _MMVAD* LeftChild;                                               
/*0x010*/     struct _MMVAD* RightChild;                                              
              union
              {                                                                       
/*0x014*/         ULONG32      LongFlags;                                             
/*0x014*/         struct _MMVAD_FLAGS VadFlags;
              }u;                                                                     
/*0x018*/     struct _CONTROL_AREA* ControlArea;                                      
/*0x01C*/     struct _MMPTE* FirstPrototypePte;                                       
/*0x020*/     struct _MMPTE* LastContiguousPte;                                       
              union
              {                                                                       
/*0x024*/         ULONG32      LongFlags2;                                            
/*0x024*/         struct _MMVAD_FLAGS2 VadFlags2;
              }u2;                                                                    
}MMVAD, *PMMVAD;