UINT64 __stdcall MiVaToPfn(PVOID Va){
int v2;
__int64 v3;
INT64 v4;
INT64 v5;
unsigned __int64 v6;
__int64 v7;
unsigned __int64 v8;
__int16 v9;
__int64 v10;
UINT64 v13[5];
INT64 v14;
memset(v13, 0, 32);
MiFillPteHierarchy((UINT64)Va, v13);
v2 = 4;
v3 = 4i64;
do
{
v4 = v13[--v3];
--v2;
v5 = MI_READ_PTE_LOCK_FREE(v4);
v14 = v5;
}
while( v3 && (v5 & 0x80u) == 0i64 );
v6 = ((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v14) >> 12) & 0xFFFFFFFFFi64;
if( v2 )
{
v7 = 1i64;
v8 = (unsigned __int64)Va >> 12;
do
{
v9 = v8;
v8 >>= 9;
v10 = v7 * (v9 & 0x1FF);
v7 <<= 9;
v6 += v10;
--v2;
}
while( v2 );
}
return v6;
}