MiGetPhysicalAddress
UINT64 __stdcall MiGetPhysicalAddress(PVOID BaseAddress, LARGE_INTEGER *ReturnedPhysicalAddress, UINT64 *Writable){
int v6;
__int64 v7;
UINT64 v8;
bool v9;
UINT64 v10;
UINT64 result;
__int64 v12;
_MMPTE *v13;
_MMPTE *v14;
UINT64 v15;
UINT64 v16;
int SystemRegionType;
_MMPTE *PointerPte[2];
__int128 v20;
UINT64 v21;
*(_DWORD *)Writable = 0;
*(_OWORD *)PointerPte = 0i64;
v20 = 0i64;
MiFillPteHierarchy((UINT64)BaseAddress, (UINT64 *)PointerPte);
v6 = MI_IS_PHYSICAL_ADDRESS(BaseAddress);
v7 = v6;
if( v6 )
{
v8 = MiVaToPfn(BaseAddress);
v9 = (MI_READ_PTE_LOCK_FREE((INT64)PointerPte[v7]) & 0x800) == 0;
}
else
{
v12 = 4i64;
do
{
v13 = PointerPte[--v12];
if( (MI_READ_PTE_LOCK_FREE((INT64)v13) & 1) == 0 )
return 0i64;
}
while( v12 != 1 );
v14 = PointerPte[0];
v21 = MI_READ_PTE_LOCK_FREE((INT64)PointerPte[0]);
v15 = v21;
SystemRegionType = MiGetSystemRegionType((UINT64)BaseAddress);
if( SystemRegionType == 12 )
MiQueuePinDriverAddressLog((INT64)BaseAddress, v15, 0i64);
if( (v15 & 1) == 0 )
return 0i64;
if( SystemRegionType == 5 )
{
MiSetNonPagedPoolNoSteal(v14, v16);
v15 = MI_READ_PTE_LOCK_FREE((INT64)v14);
v21 = v15;
}
MiPteInShadowRange((UINT64)&v21);
v8 = (v15 >> 12) & 0xFFFFFFFFFi64;
v9 = (v21 & 0x800) == 0;
}
if( !v9 )
*(_DWORD *)Writable = 1;
v10 = v8 << 12;
HIDWORD(v21) = HIDWORD(v10);
result = 1i64;
LODWORD(v21) = ((unsigned __int16)BaseAddress & 0xFFF) + v10;
ReturnedPhysicalAddress->QuadPart = v21;
return result;
}Referenced by:
MmGetPhysicalAddress
RtlMarkHiberPhase