Add support for transitioning PTE to invalid state
This commit is contained in:
@@ -355,6 +355,24 @@ MM::PageMapBasic::GetPteSize(VOID)
|
||||
return sizeof(MMPML2_PTE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the software protection value of the corresponding Page Table Entry.
|
||||
*
|
||||
* @param PtePointer
|
||||
* Specifies the address of the PTE.
|
||||
*
|
||||
* @return This routine returns the PTE software protection value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
ULONG
|
||||
MM::PageMapBasic::GetPteSoftwareProtection(IN PMMPTE PtePointer)
|
||||
{
|
||||
/* Return PTE software protection value */
|
||||
return (ULONG)PtePointer->Pml2.Software.Protection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the software prototype value of the corresponding Page Table Entry.
|
||||
*
|
||||
@@ -369,6 +387,7 @@ XTAPI
|
||||
ULONG
|
||||
MM::PageMapBasic::GetPteSoftwarePrototype(IN PMMPTE PtePointer)
|
||||
{
|
||||
/* Return PTE software prototype value */
|
||||
return (ULONG)PtePointer->Pml2.Software.Prototype;
|
||||
}
|
||||
|
||||
@@ -386,6 +405,7 @@ XTAPI
|
||||
ULONG
|
||||
MM::PageMapBasic::GetPteSoftwareTransition(IN PMMPTE PtePointer)
|
||||
{
|
||||
/* Return PTE software transition value */
|
||||
return (ULONG)PtePointer->Pml2.Software.Transition;
|
||||
}
|
||||
|
||||
@@ -571,6 +591,37 @@ MM::PageMapBasic::SetPteCaching(IN PMMPTE PtePointer,
|
||||
PtePointer->Pml2.Hardware.WriteThrough = WriteThrough;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transitions a Page Table Entry (PTE) to invalid state
|
||||
*
|
||||
* @param PointerPte
|
||||
* Pointer to the page table entry (PTE) to transition.
|
||||
*
|
||||
* @param Protection
|
||||
* Specifies the protection attribute to apply to the PTE.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
MM::PageMapBasic::TransitionPte(IN PMMPTE PointerPte,
|
||||
IN ULONG_PTR Protection)
|
||||
{
|
||||
MMPTE TempPte;
|
||||
|
||||
/* Set transition PTE */
|
||||
TempPte = *PointerPte;
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a PML2 page table entry (PTE) with the specified value.
|
||||
*
|
||||
@@ -777,6 +828,24 @@ MM::PageMapXpa::GetPteSize(VOID)
|
||||
return sizeof(MMPML3_PTE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the software protection value of the corresponding Page Table Entry.
|
||||
*
|
||||
* @param PtePointer
|
||||
* Specifies the address of the PTE.
|
||||
*
|
||||
* @return This routine returns the PTE software protection value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
ULONG
|
||||
MM::PageMapXpa::GetPteSoftwareProtection(IN PMMPTE PtePointer)
|
||||
{
|
||||
/* Return PTE software protection value */
|
||||
return (ULONG)PtePointer->Pml3.Software.Protection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the software prototype value of the corresponding Page Table Entry.
|
||||
*
|
||||
@@ -791,6 +860,7 @@ XTAPI
|
||||
ULONG
|
||||
MM::PageMapXpa::GetPteSoftwarePrototype(IN PMMPTE PtePointer)
|
||||
{
|
||||
/* Return PTE software prototype value */
|
||||
return (ULONG)PtePointer->Pml3.Software.Prototype;
|
||||
}
|
||||
|
||||
@@ -808,6 +878,7 @@ XTAPI
|
||||
ULONG
|
||||
MM::PageMapXpa::GetPteSoftwareTransition(IN PMMPTE PtePointer)
|
||||
{
|
||||
/* Return PTE software transition value */
|
||||
return (ULONG)PtePointer->Pml3.Software.Transition;
|
||||
}
|
||||
|
||||
@@ -992,6 +1063,37 @@ MM::PageMapXpa::SetPteCaching(IN PMMPTE PtePointer,
|
||||
PtePointer->Pml3.Hardware.WriteThrough = WriteThrough;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transitions a Page Table Entry (PTE) to invalid state
|
||||
*
|
||||
* @param PointerPte
|
||||
* Pointer to the page table entry (PTE) to transition.
|
||||
*
|
||||
* @param Protection
|
||||
* Specifies the protection attribute to apply to the PTE.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
MM::PageMapXpa::TransitionPte(IN PMMPTE PointerPte,
|
||||
IN ULONG_PTR Protection)
|
||||
{
|
||||
MMPTE TempPte;
|
||||
|
||||
/* Set transition PTE */
|
||||
TempPte = *PointerPte;
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a PML3 page table entry (PTE) with the specified value.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user