Skip to content

Instantly share code, notes, and snippets.

@gavz
Forked from mvankuipers/pml4e.c
Created May 13, 2024 22:22
Show Gist options
  • Save gavz/ffa721f36d0a84dfc54f9ea2e8b1268a to your computer and use it in GitHub Desktop.
Save gavz/ffa721f36d0a84dfc54f9ea2e8b1268a to your computer and use it in GitHub Desktop.
Structure defining a PML4 entry in IA-32e paging.
typedef struct _PML4E
{
union
{
struct
{
ULONG64 Present : 1; // Must be 1, region invalid if 0.
ULONG64 ReadWrite : 1; // If 0, writes not allowed.
ULONG64 UserSupervisor : 1; // If 0, user-mode accesses not allowed.
ULONG64 PageWriteThrough : 1; // Determines the memory type used to access PDPT.
ULONG64 PageCacheDisable : 1; // Determines the memory type used to access PDPT.
ULONG64 Accessed : 1; // If 0, this entry has not been used for translation.
ULONG64 Ignored1 : 1;
ULONG64 PageSize : 1; // Must be 0 for PML4E.
ULONG64 Ignored2 : 4;
ULONG64 PageFrameNumber : 36; // The page frame number of the PDPT of this PML4E.
ULONG64 Reserved : 4;
ULONG64 Ignored3 : 11;
ULONG64 ExecuteDisable : 1; // If 1, instruction fetches not allowed.
};
ULONG64 Value;
};
} PML4E, *PPML4E;
static_assert(sizeof(PML4E) == sizeof(PVOID), "Size mismatch, only 64-bit supported.");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment