Last active
May 13, 2024 22:22
-
-
Save mvankuipers/94e4f794c6909bd124d7eaf6e840a232 to your computer and use it in GitHub Desktop.
Structure defining a PML4 entry in IA-32e paging.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
thanks, this is really helpful 👍