Techwiki:Ntoskrnl/MMVAD

From ReactOS Wiki
Jump to: navigation, search

MMVAD from Windows XP

// Protection bits:
#define MM_ZERO_ACCESS         0  // this value is not used.
#define MM_READONLY            1
#define MM_EXECUTE             2
#define MM_EXECUTE_READ        3
#define MM_READWRITE           4  // bit 2 is set if this is writable.
#define MM_WRITECOPY           5
#define MM_EXECUTE_READWRITE   6
#define MM_EXECUTE_WRITECOPY   7
#define COMMIT_SIZE 19 // (32 bits system)
typedef struct _MMVAD_FLAGS {
  ULONG_PTR CommitCharge      : COMMIT_SIZE; // limits system to 4k pages or bigger!
  ULONG_PTR PhysicalMapping   : 1;
  ULONG_PTR ImageMap          : 1;
  ULONG_PTR UserPhysicalPages : 1;
  ULONG_PTR NoChange          : 1;
  ULONG_PTR WriteWatch        : 1;
  ULONG_PTR Protection        : 5;
  ULONG_PTR LargePages        : 1;
  ULONG_PTR MemCommit         : 1;
  ULONG_PTR PrivateMemory     : 1; // used to tell VAD from VAD_SHORT
} MMVAD_FLAGS; 
typedef struct _MMVAD_FLAGS2 {
  ULONG_PTR FileOffset       : 24;
  ULONG_PTR SecNoChange      : 1;
  ULONG_PTR OneSecured       : 1;
  ULONG_PTR MultipleSecured  : 1;
  ULONG_PTR ReadOnly         : 1;
  ULONG_PTR LongVad          : 1;
  ULONG_PTR ExtendableFile   : 1;
  ULONG_PTR Inherit          : 1;
  ULONG_PTR CopyOnWrite      : 1;
} MMVAD_FLAGS2;
typedef struct _MMVAD 
{
   ULONG_PTR StartingVpn;
   ULONG_PTR EndingVpn;
   struct _MMVAD *Parent;
   struct _MMVAD *LeftChild;
   struct _MMVAD *RightChild;
   union 
   {
       ULONG_PTR LongFlags;
       MMVAD_FLAGS VadFlags;
   } u;
   PCONTROL_AREA ControlArea;
   PMMPTE FirstPrototypePte;
   PMMPTE LastContiguousPte;
   union 
   {
       ULONG LongFlags2;
       MMVAD_FLAGS2 VadFlags2;
   } u2;
} MMVAD, *PMMVAD;


References