HalpMmGetPteAddressSafe
_HARDWARE_PTE *__fastcall HalpMmGetPteAddressSafe(VOID *VirtualAddress){
UINT64 *v2;
UINT64 *v3;
UINT64 *v4;
v2 = (UINT64 *)((char *)MmGetPml4eBase() + 8 * (((unsigned __int64)VirtualAddress >> 39) & 0x1FF));
if( ((*(_BYTE *)v2 & 1) != 0 || HalpMmAllocateAndInsertPageTablePage(v2))
&& ((v3 = (UINT64 *)((char *)MmGetPdpteBase() + 8 * (((unsigned __int64)VirtualAddress >> 30) & 0x3FFFF)),
(*(_BYTE *)v3 & 1) != 0)
|| HalpMmAllocateAndInsertPageTablePage(v3))
&& ((v4 = (UINT64 *)((char *)MmGetPdeBase() + 8 * (((unsigned __int64)VirtualAddress >> 21) & 0x7FFFFFF)),
(*(_BYTE *)v4 & 1) != 0)
|| HalpMmAllocateAndInsertPageTablePage(v4)) )
{
return(_HARDWARE_PTE *)((char *)MmGetPteBase() + 8 * (((unsigned __int64)VirtualAddress >> 12) & 0xFFFFFFFFFi64));
}
else
{
return 0i64;
}
}Referenced by:
HalpMap
HalpMmReservePageTablePages
HalpReserveHalPtes