diff --git a/xtoskrnl/includes/mm/amd64/pagemap.hh b/xtoskrnl/includes/mm/amd64/pagemap.hh index c92a8ee..2a3eb9e 100644 --- a/xtoskrnl/includes/mm/amd64/pagemap.hh +++ b/xtoskrnl/includes/mm/amd64/pagemap.hh @@ -42,6 +42,7 @@ namespace MM XTAPI PMMPTE GetPteAddress(IN PVOID Address); XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); + XTAPI ULONG_PTR GetPteListTerminator(VOID); XTAPI ULONG GetPteOffset(IN PVOID Address); XTAPI ULONG GetPteSize(VOID); XTAPI ULONG GetPteSoftwareProtection(IN PMMPTE PtePointer); diff --git a/xtoskrnl/includes/mm/amd64/paging.hh b/xtoskrnl/includes/mm/amd64/paging.hh index a15d64b..dd3cf29 100644 --- a/xtoskrnl/includes/mm/amd64/paging.hh +++ b/xtoskrnl/includes/mm/amd64/paging.hh @@ -40,6 +40,7 @@ namespace MM STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address); STATIC XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); + STATIC XTAPI ULONG_PTR GetPteListTerminator(VOID); STATIC XTAPI ULONG GetPteSize(VOID); STATIC XTAPI ULONG GetPteSoftwareProtection(IN PMMPTE PtePointer); STATIC XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer); diff --git a/xtoskrnl/includes/mm/i686/pagemap.hh b/xtoskrnl/includes/mm/i686/pagemap.hh index 6db0cb7..b014357 100644 --- a/xtoskrnl/includes/mm/i686/pagemap.hh +++ b/xtoskrnl/includes/mm/i686/pagemap.hh @@ -40,6 +40,7 @@ namespace MM XTAPI ULONG GetPteOffset(IN PVOID Address); VIRTUAL XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte) = 0; + VIRTUAL XTAPI ULONG_PTR GetPteListTerminator(VOID) = 0; VIRTUAL XTAPI ULONG GetPteSize(VOID) = 0; VIRTUAL XTAPI ULONG GetPteSoftwareProtection(IN PMMPTE PtePointer) = 0; VIRTUAL XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer) = 0; @@ -81,6 +82,7 @@ namespace MM XTAPI ULONG_PTR GetPte(IN PMMPTE PtePointer); XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); + XTAPI ULONG_PTR GetPteListTerminator(VOID); XTAPI ULONG GetPteSize(VOID); XTAPI ULONG GetPteSoftwareProtection(IN PMMPTE PtePointer); XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer); @@ -120,6 +122,7 @@ namespace MM XTAPI ULONG_PTR GetPte(IN PMMPTE PtePointer); XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); + XTAPI ULONG_PTR GetPteListTerminator(VOID); XTAPI ULONG GetPteSize(VOID); XTAPI ULONG GetPteSoftwareProtection(IN PMMPTE PtePointer); XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer); diff --git a/xtoskrnl/includes/mm/i686/paging.hh b/xtoskrnl/includes/mm/i686/paging.hh index 18c0964..54c77cc 100644 --- a/xtoskrnl/includes/mm/i686/paging.hh +++ b/xtoskrnl/includes/mm/i686/paging.hh @@ -38,6 +38,7 @@ namespace MM STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address); STATIC XTAPI LONG GetPteDistance(PMMPTE EndPte, PMMPTE StartPte); + STATIC XTAPI ULONG_PTR GetPteListTerminator(VOID); STATIC XTAPI ULONG GetPteSize(VOID); STATIC XTAPI ULONG GetPteSoftwareProtection(IN PMMPTE PtePointer); STATIC XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer); diff --git a/xtoskrnl/mm/amd64/pagemap.cc b/xtoskrnl/mm/amd64/pagemap.cc index 313e176..9e6454e 100644 --- a/xtoskrnl/mm/amd64/pagemap.cc +++ b/xtoskrnl/mm/amd64/pagemap.cc @@ -330,6 +330,21 @@ MM::PageMap::GetPteDistance(PMMPTE EndPte, return ((ULONG_PTR)EndPte - (ULONG_PTR)StartPte) / sizeof(MMPTE); } +/** + * Gets the terminator value for a PTE list. + * + * @return This routine returns the terminator value for a PTE list. + * + * @since XT 1.0 + */ +XTAPI +ULONG_PTR +MM::PageMap::GetPteListTerminator(VOID) +{ + /* Return PTE list terminator value */ + return 0xFFFFFFFF; +} + /** * Gets the Offset of the PTE (Page Table Entry), that maps given address. * diff --git a/xtoskrnl/mm/i686/pagemap.cc b/xtoskrnl/mm/i686/pagemap.cc index 2473319..6551fd3 100644 --- a/xtoskrnl/mm/i686/pagemap.cc +++ b/xtoskrnl/mm/i686/pagemap.cc @@ -340,6 +340,21 @@ MM::PageMapBasic::GetPteDistance(PMMPTE EndPte, return ((ULONG_PTR)EndPte - (ULONG_PTR)StartPte) / sizeof(MMPML2_PTE); } +/** + * Gets the terminator value for a PTE list (PML2). + * + * @return This routine returns the terminator value for a PTE list. + * + * @since XT 1.0 + */ +XTAPI +ULONG_PTR +MM::PageMapBasic::GetPteListTerminator(VOID) +{ + /* Return PTE list terminator value for PML2 */ + return 0xFFFFF; +} + /** * Gets the size of a PTE for basic paging (PML2). * @@ -813,6 +828,21 @@ MM::PageMapXpa::GetPteDistance(PMMPTE EndPte, return ((ULONG_PTR)EndPte - (ULONG_PTR)StartPte) / sizeof(MMPML3_PTE); } +/** + * Gets the terminator value for a PTE list (PML3). + * + * @return This routine returns the terminator value for a PTE list. + * + * @since XT 1.0 + */ +XTAPI +ULONG_PTR +MM::PageMapXpa::GetPteListTerminator(VOID) +{ + /* Return PTE list terminator value for PML3 */ + return 0xFFFFFFFF; +} + /** * Gets the size of a PTE for XPA paging (PML3). * diff --git a/xtoskrnl/mm/paging.cc b/xtoskrnl/mm/paging.cc index 34cde8e..b22fe38 100644 --- a/xtoskrnl/mm/paging.cc +++ b/xtoskrnl/mm/paging.cc @@ -351,6 +351,21 @@ MM::Paging::GetPteDistance(PMMPTE EndPte, return PmlRoutines->GetPteDistance(EndPte, StartPte); } +/** + * Gets the terminator value for a PTE list. + * + * @return This routine returns the terminator value for a PTE list. + * + * @since XT 1.0 + */ +XTAPI +ULONG_PTR +MM::Paging::GetPteListTerminator(VOID) +{ + /* Return PTE list terminator value */ + return PmlRoutines->GetPteListTerminator(); +} + /** * Gets the size of a PTE. *