From 42525e5993f1bb4036fd24419ab49a251c902ee6 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Sun, 15 Mar 2026 20:23:44 +0100 Subject: [PATCH] Unify PTE type definitions across architectures --- xtoskrnl/includes/mm/amd64/pagemap.hh | 6 ++--- xtoskrnl/includes/mm/amd64/paging.hh | 6 ++--- xtoskrnl/includes/mm/i686/pagemap.hh | 18 +++++++-------- xtoskrnl/includes/mm/i686/paging.hh | 6 ++--- xtoskrnl/mm/amd64/pagemap.cc | 6 ++--- xtoskrnl/mm/i686/pagemap.cc | 33 +++++++++++++-------------- xtoskrnl/mm/paging.cc | 6 ++--- 7 files changed, 40 insertions(+), 41 deletions(-) diff --git a/xtoskrnl/includes/mm/amd64/pagemap.hh b/xtoskrnl/includes/mm/amd64/pagemap.hh index 9501999..59e91b8 100644 --- a/xtoskrnl/includes/mm/amd64/pagemap.hh +++ b/xtoskrnl/includes/mm/amd64/pagemap.hh @@ -39,7 +39,7 @@ namespace MM XTAPI PMMPPE GetPpeAddress(IN PVOID Address); XTAPI ULONG GetPpeOffset(IN PVOID Address); VIRTUAL XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer) = 0; - XTAPI ULONG_PTR GetPte(IN PMMPTE PtePointer); + XTAPI ULONGLONG GetPte(IN PMMPTE PtePointer); XTAPI PMMPTE GetPteAddress(IN PVOID Address); XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); @@ -61,9 +61,9 @@ namespace MM IN BOOLEAN Value); XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask); + IN ULONGLONG AttributesMask); XTAPI VOID SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes); + IN ULONGLONG Attributes); XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough); diff --git a/xtoskrnl/includes/mm/amd64/paging.hh b/xtoskrnl/includes/mm/amd64/paging.hh index da23159..6c1aa2b 100644 --- a/xtoskrnl/includes/mm/amd64/paging.hh +++ b/xtoskrnl/includes/mm/amd64/paging.hh @@ -37,7 +37,7 @@ namespace MM STATIC XTAPI PVOID GetPdeVirtualAddress(IN PMMPDE PdePointer); STATIC XTAPI PMMPPE GetPpeAddress(IN PVOID Address); STATIC XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer); - STATIC XTAPI ULONG_PTR GetPte(IN PMMPTE PtePointer); + STATIC XTAPI ULONGLONG GetPte(IN PMMPTE PtePointer); STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address); STATIC XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); @@ -57,9 +57,9 @@ namespace MM IN BOOLEAN Value); STATIC XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask); + IN ULONGLONG AttributesMask); STATIC XTAPI VOID SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes); + IN ULONGLONG Attributes); STATIC XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough); diff --git a/xtoskrnl/includes/mm/i686/pagemap.hh b/xtoskrnl/includes/mm/i686/pagemap.hh index eff6ab5..a9edba9 100644 --- a/xtoskrnl/includes/mm/i686/pagemap.hh +++ b/xtoskrnl/includes/mm/i686/pagemap.hh @@ -36,7 +36,7 @@ namespace MM XTAPI PMMPPE GetPpeAddress(IN PVOID Address); XTAPI ULONG GetPpeOffset(IN PVOID Address); XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer); - VIRTUAL XTAPI ULONG_PTR GetPte(IN PMMPTE PtePointer) = 0; + VIRTUAL XTAPI ULONGLONG GetPte(IN PMMPTE PtePointer) = 0; XTAPI PMMPTE GetPteAddress(IN PVOID Address); XTAPI ULONG GetPteOffset(IN PVOID Address); VIRTUAL XTAPI LONG GetPteDistance(PMMPTE EndPte, @@ -55,9 +55,9 @@ namespace MM IN BOOLEAN Value) = 0; VIRTUAL XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask) = 0; + IN ULONGLONG AttributesMask) = 0; VIRTUAL XTAPI VOID SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes) = 0; + IN ULONGLONG Attributes) = 0; VIRTUAL XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough) = 0; @@ -79,7 +79,7 @@ namespace MM XTAPI BOOLEAN GetOneEntry(IN PMMPTE Pte); XTAPI PFN_NUMBER GetPageFrameNumber(IN PMMPTE Pte); XTAPI PVOID GetPdeVirtualAddress(IN PMMPDE PdePointer); - XTAPI ULONG_PTR GetPte(IN PMMPTE PtePointer); + XTAPI ULONGLONG GetPte(IN PMMPTE PtePointer); XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); XTAPI ULONG GetPteSize(VOID); @@ -95,9 +95,9 @@ namespace MM IN BOOLEAN Value); XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask); + IN ULONGLONG AttributesMask); XTAPI VOID SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes); + IN ULONGLONG Attributes); XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough); @@ -118,7 +118,7 @@ namespace MM XTAPI BOOLEAN GetOneEntry(IN PMMPTE Pte); XTAPI PFN_NUMBER GetPageFrameNumber(IN PMMPTE Pte); XTAPI PVOID GetPdeVirtualAddress(IN PMMPDE PdePointer); - XTAPI ULONG_PTR GetPte(IN PMMPTE PtePointer); + XTAPI ULONGLONG GetPte(IN PMMPTE PtePointer); XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); XTAPI ULONG GetPteSize(VOID); @@ -134,9 +134,9 @@ namespace MM IN BOOLEAN Value); XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask); + IN ULONGLONG AttributesMask); XTAPI VOID SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes); + IN ULONGLONG Attributes); XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough); diff --git a/xtoskrnl/includes/mm/i686/paging.hh b/xtoskrnl/includes/mm/i686/paging.hh index e2d8fd2..2002315 100644 --- a/xtoskrnl/includes/mm/i686/paging.hh +++ b/xtoskrnl/includes/mm/i686/paging.hh @@ -35,7 +35,7 @@ namespace MM STATIC XTAPI PVOID GetPdeVirtualAddress(IN PMMPDE PdePointer); STATIC XTAPI PMMPPE GetPpeAddress(IN PVOID Address); STATIC XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer); - STATIC XTAPI ULONG_PTR GetPte(IN PMMPTE PtePointer); + STATIC XTAPI ULONGLONG GetPte(IN PMMPTE PtePointer); STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address); STATIC XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); @@ -53,9 +53,9 @@ namespace MM IN BOOLEAN Value); STATIC XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask); + IN ULONGLONG AttributesMask); STATIC XTAPI VOID SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes); + IN ULONGLONG Attributes); STATIC XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough); diff --git a/xtoskrnl/mm/amd64/pagemap.cc b/xtoskrnl/mm/amd64/pagemap.cc index 2f2bda4..a56c112 100644 --- a/xtoskrnl/mm/amd64/pagemap.cc +++ b/xtoskrnl/mm/amd64/pagemap.cc @@ -302,7 +302,7 @@ MM::PageMap::GetPpeOffset(IN PVOID Address) * @since XT 1.0 */ XTAPI -ULONG_PTR +ULONGLONG MM::PageMap::GetPte(IN PMMPTE PtePointer) { /* Return PTE value */ @@ -574,7 +574,7 @@ XTAPI VOID MM::PageMap::SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask) + IN ULONGLONG AttributesMask) { /* Set PTE */ PtePointer->Hardware.PageFrameNumber = PageFrameNumber; @@ -598,7 +598,7 @@ MM::PageMap::SetPte(IN PMMPTE PtePointer, XTAPI VOID MM::PageMap::SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes) + IN ULONGLONG Attributes) { PtePointer->Long = Attributes; } diff --git a/xtoskrnl/mm/i686/pagemap.cc b/xtoskrnl/mm/i686/pagemap.cc index c7c0043..aa1d609 100644 --- a/xtoskrnl/mm/i686/pagemap.cc +++ b/xtoskrnl/mm/i686/pagemap.cc @@ -80,7 +80,6 @@ MM::PageMap::GetPdeOffset(IN PVOID Address) return ((((ULONG_PTR)(Address)) >> PageMapInfo.PdiShift) & (PageMapInfo.Xpa ? 0x1FF : 0x3FF)); } - /** * Gets the address of the PPE (Page Directory Pointer Table Entry), that maps given address. * @@ -174,7 +173,6 @@ MM::PageMap::GetPteOffset(IN PVOID Address) return ((((ULONG_PTR)(Address)) >> MM_PTI_SHIFT) & (PageMapInfo.Xpa ? 0x1FF : 0x3FF)); } - /** * Gets the status of Extended Paging Address (XPA) mode. * @@ -318,7 +316,7 @@ MM::PageMapBasic::GetPdeVirtualAddress(IN PMMPDE PdePointer) return ((PVOID)((ULONG)(PdePointer) << 20)); } - /** +/** * Gets the entire contents of a PML2 Page Table Entry (PTE) as a single value. * * @param PtePointer @@ -329,12 +327,13 @@ MM::PageMapBasic::GetPdeVirtualAddress(IN PMMPDE PdePointer) * @since XT 1.0 */ XTAPI -ULONG_PTR +ULONGLONG MM::PageMapBasic::GetPte(IN PMMPTE PtePointer) { /* Return PTE value */ - return PtePointer->Pml2.Long; + return (ULONGLONG)PtePointer->Pml2.Long; } + /** * Calculates the distance between two PTE pointers. * @@ -549,12 +548,12 @@ XTAPI VOID MM::PageMapBasic::SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask) + IN ULONGLONG AttributesMask) { /* Set PTE */ PtePointer->Pml2.Hardware.PageFrameNumber = PageFrameNumber; PtePointer->Pml2.Hardware.Valid = 1; - PtePointer->Pml2.Long |= AttributesMask; + PtePointer->Pml2.Long |= (ULONG)AttributesMask; } /** @@ -573,9 +572,9 @@ MM::PageMapBasic::SetPte(IN PMMPTE PtePointer, XTAPI VOID MM::PageMapBasic::SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes) + IN ULONGLONG Attributes) { - PtePointer->Pml2.Long = Attributes; + PtePointer->Pml2.Long = (ULONG)Attributes; } /** @@ -626,14 +625,14 @@ MM::PageMapBasic::TransitionPte(IN PMMPTE PointerPte, MMPTE TempPte; /* Set transition PTE */ - TempPte = *PointerPte; + TempPte.Pml2.Long = PointerPte->Pml2.Long; TempPte.Pml2.Software.Protection = Protection; TempPte.Pml2.Software.Prototype = 0; TempPte.Pml2.Software.Transition = 1; TempPte.Pml2.Software.Valid = 0; /* Write PTE value */ - *PointerPte = TempPte; + PointerPte->Pml2.Long = TempPte.Pml2.Long; } /** @@ -798,7 +797,7 @@ MM::PageMapXpa::GetPdeVirtualAddress(IN PMMPDE PdePointer) * @since XT 1.0 */ XTAPI -ULONG_PTR +ULONGLONG MM::PageMapXpa::GetPte(IN PMMPTE PtePointer) { /* Return PTE value */ @@ -1018,7 +1017,7 @@ XTAPI VOID MM::PageMapXpa::SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask) + IN ULONGLONG AttributesMask) { /* Set PTE */ PtePointer->Pml3.Hardware.PageFrameNumber = PageFrameNumber; @@ -1042,7 +1041,7 @@ MM::PageMapXpa::SetPte(IN PMMPTE PtePointer, XTAPI VOID MM::PageMapXpa::SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes) + IN ULONGLONG Attributes) { PtePointer->Pml3.Long = Attributes; } @@ -1095,14 +1094,14 @@ MM::PageMapXpa::TransitionPte(IN PMMPTE PointerPte, MMPTE TempPte; /* Set transition PTE */ - TempPte = *PointerPte; + TempPte.Pml3.Long = PointerPte->Pml3.Long; TempPte.Pml3.Software.Protection = Protection; TempPte.Pml3.Software.Prototype = 0; TempPte.Pml3.Software.Transition = 1; TempPte.Pml3.Software.Valid = 0; /* Write PTE value */ - *PointerPte = TempPte; + PointerPte->Pml3.Long = TempPte.Pml3.Long; } /** @@ -1125,4 +1124,4 @@ MM::PageMapXpa::WritePte(IN PMMPTE Pte, { /* Write PTE value */ Pte->Pml3.Long = Value.Pml3.Long; -} \ No newline at end of file +} diff --git a/xtoskrnl/mm/paging.cc b/xtoskrnl/mm/paging.cc index 053681c..bc7cd0a 100644 --- a/xtoskrnl/mm/paging.cc +++ b/xtoskrnl/mm/paging.cc @@ -321,7 +321,7 @@ MM::Paging::GetPpeVirtualAddress(IN PMMPPE PpePointer) * @since XT 1.0 */ XTAPI -ULONG_PTR +ULONGLONG MM::Paging::GetPte(IN PMMPTE PtePointer) { /* Return PTE value */ @@ -578,7 +578,7 @@ XTAPI VOID MM::Paging::SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN ULONG_PTR AttributesMask) + IN ULONGLONG AttributesMask) { /* Set PTE */ PmlRoutines->SetPte(PtePointer, PageFrameNumber, AttributesMask); @@ -600,7 +600,7 @@ MM::Paging::SetPte(IN PMMPTE PtePointer, XTAPI VOID MM::Paging::SetPte(IN PMMPTE PtePointer, - IN ULONG_PTR Attributes) + IN ULONGLONG Attributes) { PmlRoutines->SetPte(PtePointer, Attributes); }