From 4265ae92d09c675a2b6c3fb449ae147843d5e0f0 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Sat, 29 Nov 2025 23:45:00 +0100 Subject: [PATCH] Add MM::PageMap::GetXpaStatus() for querying PML level --- xtoskrnl/includes/mm/i686/pagemap.hh | 1 + xtoskrnl/mm/i686/pagemap.cc | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/xtoskrnl/includes/mm/i686/pagemap.hh b/xtoskrnl/includes/mm/i686/pagemap.hh index 2ae64d19..59a4d6a4 100644 --- a/xtoskrnl/includes/mm/i686/pagemap.hh +++ b/xtoskrnl/includes/mm/i686/pagemap.hh @@ -39,6 +39,7 @@ namespace MM XTAPI ULONG GetPteIndex(IN PVOID Address); VIRTUAL XTAPI ULONG GetPteSize(VOID) = 0; XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer); + XTAPI BOOLEAN GetXpaStatus(); VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0; VIRTUAL XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer) = 0; VIRTUAL XTAPI VOID SetNextEntry(IN PMMPTE Pte, diff --git a/xtoskrnl/mm/i686/pagemap.cc b/xtoskrnl/mm/i686/pagemap.cc index f4b6b3b9..cb38fa48 100644 --- a/xtoskrnl/mm/i686/pagemap.cc +++ b/xtoskrnl/mm/i686/pagemap.cc @@ -210,6 +210,20 @@ MM::PageMap::GetPteVirtualAddress(IN PMMPTE PtePointer) return ((PVOID)((ULONG)(PtePointer) << 10)); } +/** + * Gets the status of Extended Paging Address (XPA) mode. + * + * @return This routine returns TRUE if XPA is enabled, FALSE otherwise. + * + * @since XT 1.0 + */ +XTAPI +BOOLEAN +MM::PageMap::GetXpaStatus() +{ + return PageMapInfo.Xpa; +} + /** * Advances a PTE pointer by a given number of entries, considering the actual PTE size for PML2. *