From 071c840ca853e3216ae7024d4e9b5ab94c00210c Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Tue, 4 Nov 2025 17:34:49 +0100 Subject: [PATCH] Replace writable flag with AttributesMask in PTE setup --- xtoskrnl/includes/mm/amd64/pagemap.hh | 2 +- xtoskrnl/includes/mm/i686/pagemap.hh | 6 +++--- xtoskrnl/includes/mm/paging.hh | 2 +- xtoskrnl/mm/amd64/pagemap.cc | 8 ++++---- xtoskrnl/mm/hlpool.cc | 4 ++-- xtoskrnl/mm/i686/pagemap.cc | 16 ++++++++-------- xtoskrnl/mm/paging.cc | 8 ++++---- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/xtoskrnl/includes/mm/amd64/pagemap.hh b/xtoskrnl/includes/mm/amd64/pagemap.hh index 28f67c2..99f09b0 100644 --- a/xtoskrnl/includes/mm/amd64/pagemap.hh +++ b/xtoskrnl/includes/mm/amd64/pagemap.hh @@ -52,7 +52,7 @@ namespace MM IN BOOLEAN Value); XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable); + IN ULONG_PTR AttributesMask); 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 df5bb91..9868836 100644 --- a/xtoskrnl/includes/mm/i686/pagemap.hh +++ b/xtoskrnl/includes/mm/i686/pagemap.hh @@ -46,7 +46,7 @@ namespace MM IN BOOLEAN Value) = 0; VIRTUAL XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable) = 0; + IN ULONG_PTR AttributesMask) = 0; VIRTUAL XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough) = 0; @@ -69,7 +69,7 @@ namespace MM IN BOOLEAN Value); XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable); + IN ULONG_PTR AttributesMask); XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough); @@ -92,7 +92,7 @@ namespace MM IN BOOLEAN Value); XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable); + IN ULONG_PTR AttributesMask); XTAPI VOID SetPteCaching(IN PMMPTE PtePointer, IN BOOLEAN CacheDisable, IN BOOLEAN WriteThrough); diff --git a/xtoskrnl/includes/mm/paging.hh b/xtoskrnl/includes/mm/paging.hh index 76adf99..304fa99 100644 --- a/xtoskrnl/includes/mm/paging.hh +++ b/xtoskrnl/includes/mm/paging.hh @@ -41,7 +41,7 @@ namespace MM IN BOOLEAN Value); STATIC XTAPI VOID SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable); + IN ULONG_PTR AttributesMask); 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 be54c3f..f7774f3 100644 --- a/xtoskrnl/mm/amd64/pagemap.cc +++ b/xtoskrnl/mm/amd64/pagemap.cc @@ -487,8 +487,8 @@ MM::PageMap::SetOneEntry(IN PMMPTE Pte, * @param PageFrameNumber * Physical frame number to map. * - * @param Writable - * Indicates whether the page should be writable. + * @param AttributesMask + * Specifies the attributes mask to apply to the PTE. * * @return This routine does not return any value. * @@ -498,12 +498,12 @@ XTAPI VOID MM::PageMap::SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable) + IN ULONG_PTR AttributesMask) { /* Set PTE */ PtePointer->Hardware.PageFrameNumber = PageFrameNumber; PtePointer->Hardware.Valid = 1; - PtePointer->Hardware.Writable = Writable; + PtePointer->Long |= AttributesMask; } /** diff --git a/xtoskrnl/mm/hlpool.cc b/xtoskrnl/mm/hlpool.cc index 9c1d612..2504f8b 100644 --- a/xtoskrnl/mm/hlpool.cc +++ b/xtoskrnl/mm/hlpool.cc @@ -222,7 +222,7 @@ MM::HardwarePool::MapHardwareMemory(IN PHYSICAL_ADDRESS PhysicalAddress, PtePointer = MM::Paging::GetPteAddress(BaseAddress); /* Fill the PTE */ - MM::Paging::SetPte(PtePointer, (PFN_NUMBER)(PhysicalAddress.QuadPart >> MM_PAGE_SHIFT), TRUE); + MM::Paging::SetPte(PtePointer, (PFN_NUMBER)(PhysicalAddress.QuadPart >> MM_PAGE_SHIFT), MM_PTE_READWRITE); /* Advance to the next address */ PhysicalAddress.QuadPart += MM_PAGE_SIZE; @@ -302,7 +302,7 @@ MM::HardwarePool::RemapHardwareMemory(IN PVOID VirtualAddress, PtePointer = MM::Paging::GetPteAddress(VirtualAddress); /* Remap the PTE */ - MM::Paging::SetPte(PtePointer, (PFN_NUMBER)(PhysicalAddress.QuadPart >> MM_PAGE_SHIFT), TRUE); + MM::Paging::SetPte(PtePointer, (PFN_NUMBER)(PhysicalAddress.QuadPart >> MM_PAGE_SHIFT), MM_PTE_READWRITE); /* Check if TLB needs to be flushed */ if(FlushTlb) diff --git a/xtoskrnl/mm/i686/pagemap.cc b/xtoskrnl/mm/i686/pagemap.cc index d30fa68..67bf253 100644 --- a/xtoskrnl/mm/i686/pagemap.cc +++ b/xtoskrnl/mm/i686/pagemap.cc @@ -398,8 +398,8 @@ MM::PageMapBasic::SetOneEntry(IN PMMPTE Pte, * @param PageFrameNumber * Physical frame number to map. * - * @param Writable - * Indicates whether the page should be writable. + * @param AttributesMask + * Specifies the attributes mask to apply to the PTE. * * @return This routine does not return any value. * @@ -409,12 +409,12 @@ XTAPI VOID MM::PageMapBasic::SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable) + IN ULONG_PTR AttributesMask) { /* Set PTE */ PtePointer->Pml2.Hardware.PageFrameNumber = PageFrameNumber; PtePointer->Pml2.Hardware.Valid = 1; - PtePointer->Pml2.Hardware.Writable = Writable; + PtePointer->Long |= AttributesMask; } /** @@ -631,8 +631,8 @@ MM::PageMapXpa::SetOneEntry(IN PMMPTE Pte, * @param PageFrameNumber * Physical frame number to map. * - * @param Writable - * Indicates whether the page should be writable. + * @param AttributesMask + * Specifies the attributes mask to apply to the PTE. * * @return This routine does not return any value. * @@ -642,12 +642,12 @@ XTAPI VOID MM::PageMapXpa::SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable) + IN ULONG_PTR AttributesMask) { /* Set PTE */ PtePointer->Pml3.Hardware.PageFrameNumber = PageFrameNumber; PtePointer->Pml3.Hardware.Valid = 1; - PtePointer->Pml3.Hardware.Writable = Writable; + PtePointer->Long |= AttributesMask; } /** diff --git a/xtoskrnl/mm/paging.cc b/xtoskrnl/mm/paging.cc index 41f060b..78d3278 100644 --- a/xtoskrnl/mm/paging.cc +++ b/xtoskrnl/mm/paging.cc @@ -371,8 +371,8 @@ MM::Paging::SetOneEntry(IN PMMPTE Pte, * @param PageFrameNumber * Physical frame number to map. * - * @param Writable - * Indicates whether the page should be writable. + * @param AttributesMask + * Specifies the attributes mask to apply to the PTE. * * @return This routine does not return any value. * @@ -382,10 +382,10 @@ XTAPI VOID MM::Paging::SetPte(IN PMMPTE PtePointer, IN PFN_NUMBER PageFrameNumber, - IN BOOLEAN Writable) + IN ULONG_PTR AttributesMask) { /* Set PTE */ - PmlRoutines->SetPte(PtePointer, PageFrameNumber, (BOOLEAN)Writable); + PmlRoutines->SetPte(PtePointer, PageFrameNumber, AttributesMask); } /**