Add architecture-specific GetPteDistance
This commit is contained in:
@@ -39,6 +39,8 @@ namespace MM
|
|||||||
XTAPI ULONG GetPpeIndex(IN PVOID Address);
|
XTAPI ULONG GetPpeIndex(IN PVOID Address);
|
||||||
VIRTUAL XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer) = 0;
|
VIRTUAL XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer) = 0;
|
||||||
XTAPI PMMPTE GetPteAddress(IN PVOID Address);
|
XTAPI PMMPTE GetPteAddress(IN PVOID Address);
|
||||||
|
XTAPI LONG GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte);
|
||||||
XTAPI ULONG GetPteIndex(IN PVOID Address);
|
XTAPI ULONG GetPteIndex(IN PVOID Address);
|
||||||
XTAPI ULONG GetPteSize(VOID);
|
XTAPI ULONG GetPteSize(VOID);
|
||||||
VIRTUAL XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer) = 0;
|
VIRTUAL XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer) = 0;
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ namespace MM
|
|||||||
STATIC XTAPI PMMPPE GetPpeAddress(IN PVOID Address);
|
STATIC XTAPI PMMPPE GetPpeAddress(IN PVOID Address);
|
||||||
STATIC XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
STATIC XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
||||||
STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address);
|
STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address);
|
||||||
|
STATIC XTAPI LONG GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte);
|
||||||
STATIC XTAPI ULONG GetPteSize(VOID);
|
STATIC XTAPI ULONG GetPteSize(VOID);
|
||||||
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||||
STATIC XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
|
STATIC XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ namespace MM
|
|||||||
XTAPI PMMPTE GetNextPte(IN PMMPTE Pte);
|
XTAPI PMMPTE GetNextPte(IN PMMPTE Pte);
|
||||||
XTAPI BOOLEAN GetOneEntry(IN PMMPTE Pte);
|
XTAPI BOOLEAN GetOneEntry(IN PMMPTE Pte);
|
||||||
XTAPI PFN_NUMBER GetPageFrameNumber(IN PMMPTE Pte);
|
XTAPI PFN_NUMBER GetPageFrameNumber(IN PMMPTE Pte);
|
||||||
|
XTAPI LONG GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte);
|
||||||
XTAPI ULONG GetPteSize(VOID);
|
XTAPI ULONG GetPteSize(VOID);
|
||||||
XTAPI VOID InitializePageMapInfo(VOID);
|
XTAPI VOID InitializePageMapInfo(VOID);
|
||||||
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
|
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
|
||||||
@@ -87,6 +89,8 @@ namespace MM
|
|||||||
XTAPI PMMPTE GetNextPte(IN PMMPTE Pte);
|
XTAPI PMMPTE GetNextPte(IN PMMPTE Pte);
|
||||||
XTAPI BOOLEAN GetOneEntry(IN PMMPTE Pte);
|
XTAPI BOOLEAN GetOneEntry(IN PMMPTE Pte);
|
||||||
XTAPI PFN_NUMBER GetPageFrameNumber(IN PMMPTE Pte);
|
XTAPI PFN_NUMBER GetPageFrameNumber(IN PMMPTE Pte);
|
||||||
|
XTAPI LONG GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte);
|
||||||
XTAPI ULONG GetPteSize(VOID);
|
XTAPI ULONG GetPteSize(VOID);
|
||||||
XTAPI VOID InitializePageMapInfo(VOID);
|
XTAPI VOID InitializePageMapInfo(VOID);
|
||||||
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
|
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ namespace MM
|
|||||||
STATIC XTAPI PMMPPE GetPpeAddress(IN PVOID Address);
|
STATIC XTAPI PMMPPE GetPpeAddress(IN PVOID Address);
|
||||||
STATIC XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
STATIC XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
||||||
STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address);
|
STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address);
|
||||||
|
STATIC XTAPI LONG GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte);
|
||||||
STATIC XTAPI ULONG GetPteSize(VOID);
|
STATIC XTAPI ULONG GetPteSize(VOID);
|
||||||
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||||
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
|
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
|
||||||
|
|||||||
@@ -289,6 +289,28 @@ MM::PageMap::GetPteAddress(IN PVOID Address)
|
|||||||
return (PMMPTE)(PageMapInfo.PteBase + Offset);
|
return (PMMPTE)(PageMapInfo.PteBase + Offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the distance between two PTE pointers.
|
||||||
|
*
|
||||||
|
* @param EndPte
|
||||||
|
* Pointer to the ending Page Table Entry.
|
||||||
|
*
|
||||||
|
* @param StartPte
|
||||||
|
* Pointer to the starting Page Table Entry.
|
||||||
|
*
|
||||||
|
* @return This routine returns a signed value representing the number of PTEs between EndPte and StartPte.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
LONG
|
||||||
|
MM::PageMap::GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte)
|
||||||
|
{
|
||||||
|
/* Return distance between PTE pointers */
|
||||||
|
return ((ULONG_PTR)EndPte - (ULONG_PTR)StartPte) / sizeof(MMPTE);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the index of the PTE (Page Table Entry), that maps given address.
|
* Gets the index of the PTE (Page Table Entry), that maps given address.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -317,6 +317,28 @@ MM::PageMapBasic::GetPageFrameNumber(IN PMMPTE Pte)
|
|||||||
return Pte->Pml2.Hardware.PageFrameNumber;
|
return Pte->Pml2.Hardware.PageFrameNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the distance between two PTE pointers.
|
||||||
|
*
|
||||||
|
* @param EndPte
|
||||||
|
* Pointer to the ending Page Table Entry.
|
||||||
|
*
|
||||||
|
* @param StartPte
|
||||||
|
* Pointer to the starting Page Table Entry.
|
||||||
|
*
|
||||||
|
* @return This routine returns a signed value representing the number of PTEs between EndPte and StartPte.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
LONG
|
||||||
|
MM::PageMapBasic::GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte)
|
||||||
|
{
|
||||||
|
/* Return distance between PTE pointers */
|
||||||
|
return ((ULONG_PTR)EndPte - (ULONG_PTR)StartPte) / sizeof(MMPML2_PTE);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the size of a PTE for basic paging (PML2).
|
* Gets the size of a PTE for basic paging (PML2).
|
||||||
*
|
*
|
||||||
@@ -568,6 +590,28 @@ MM::PageMapXpa::GetPageFrameNumber(IN PMMPTE Pte)
|
|||||||
return Pte->Pml3.Hardware.PageFrameNumber;
|
return Pte->Pml3.Hardware.PageFrameNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the distance between two PTE pointers.
|
||||||
|
*
|
||||||
|
* @param EndPte
|
||||||
|
* Pointer to the ending Page Table Entry.
|
||||||
|
*
|
||||||
|
* @param StartPte
|
||||||
|
* Pointer to the starting Page Table Entry.
|
||||||
|
*
|
||||||
|
* @return This routine returns a signed value representing the number of PTEs between EndPte and StartPte.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
LONG
|
||||||
|
MM::PageMapXpa::GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte)
|
||||||
|
{
|
||||||
|
/* Return distance between PTE pointers */
|
||||||
|
return ((ULONG_PTR)EndPte - (ULONG_PTR)StartPte) / sizeof(MMPML3_PTE);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the size of a PTE for XPA paging (PML3).
|
* Gets the size of a PTE for XPA paging (PML3).
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -311,6 +311,28 @@ MM::Paging::GetPteAddress(IN PVOID Address)
|
|||||||
return PmlRoutines->GetPteAddress(Address);
|
return PmlRoutines->GetPteAddress(Address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the distance between two PTE pointers.
|
||||||
|
*
|
||||||
|
* @param EndPte
|
||||||
|
* Pointer to the ending Page Table Entry.
|
||||||
|
*
|
||||||
|
* @param StartPte
|
||||||
|
* Pointer to the starting Page Table Entry.
|
||||||
|
*
|
||||||
|
* @return This routine returns a signed value representing the number of PTEs between EndPte and StartPte.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
LONG
|
||||||
|
MM::Paging::GetPteDistance(PMMPTE EndPte,
|
||||||
|
PMMPTE StartPte)
|
||||||
|
{
|
||||||
|
/* Return distance between PTE pointers */
|
||||||
|
return PmlRoutines->GetPteDistance(EndPte, StartPte);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the size of a PTE.
|
* Gets the size of a PTE.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user