HalpMmGetPteAddressSafe
_HARDWARE_PTE *__stdcall HalpMmGetPteAddressSafe(VOID *VirtualAddress){
_MMPTE *v2;
_MMPTE *v3;
_MMPTE *v4;
v2 = &MmGetPml4eBase()[((unsigned __int64)VirtualAddress >> 39) & 0x1FF];
if( ((v2->u.Long & 1) != 0 || HalpMmAllocateAndInsertPageTablePage(&v2->u.Long))
&& ((v3 = &MmGetPdpteBase()[((unsigned __int64)VirtualAddress >> 30) & 0x3FFFF], (v3->u.Long & 1) != 0)
|| HalpMmAllocateAndInsertPageTablePage(&v3->u.Long))
&& ((v4 = &MmGetPdeBase()[((unsigned __int64)VirtualAddress >> 21) & 0x7FFFFFF], (v4->u.Long & 1) != 0)
|| HalpMmAllocateAndInsertPageTablePage(&v4->u.Long)) )
{
return(_HARDWARE_PTE *)&MmGetPteBase()[((unsigned __int64)VirtualAddress >> 12) & 0xFFFFFFFFFi64];
}
else
{
return 0i64;
}
}Referenced by:
HalpMap
HalpMmReservePageTablePages
HalpReserveHalPtes