MiFindActualFaultingPte
MMPTE *__stdcall MiFindActualFaultingPte(PVOID FaultingAddress){
UINT64 v1;
UINT64 v2;
_MMPTE *PdeBase;
MMPTE *ActualFaultingPte;
MMPTE *v6;
INT64 v7;
__int64 v8;
unsigned __int64 v9;
__int64 v10;
MMPTE *v11;
char v12;
UINT64 ProtectCode;
_MMVAD *VadOut;
UINT64 v15[2];
__int128 v16;
INT64 result[8];
__int16 v18;
char v19;
char v20;
__int64 v21;
v2 = v1;
VadOut = 0i64;
LODWORD(ProtectCode) = 0;
*(_OWORD *)v15 = 0i64;
v16 = 0i64;
memset((INT64)result, 0i64);
PdeBase = MmGetPdeBase();
if( (*((_BYTE *)FaultingAddress + 69) & 1) == 0 )
{
ActualFaultingPte = (MMPTE *)*((_QWORD *)FaultingAddress + 9);
if( ActualFaultingPte != (_MMPTE *)((char *)PdeBase + ((v2 >> 18) & 0x3FFFFFF8)) )
return ActualFaultingPte;
v6 = (_MMPTE *)((char *)MmGetPteBase() + ((v2 >> 9) & 0x7FFFFFFFF8i64));
LABEL_4:
v7 = MI_READ_PTE_LOCK_FREE((INT64)v6);
if( (v7 & 1) == 0 )
{
if( (v7 & 0x400) == 0 )
return v6;
if( !MiIsPrototypePteVadLookup(v7) )
{
if( qword_140C4DC80 )
{
if( (v8 & 0x10) != 0 )
v8 &= ~0x10ui64;
else
v8 &= ~qword_140C4DC80;
}
v9 = v8 >> 16;
LABEL_11:
v20 &= ~1u;
result[0] = v9;
v19 = 17;
v18 = 0;
v21 = (__int64)PdeBase + ((v9 >> 18) & 0x3FFFFFF8);
ActualFaultingPte = MiFindActualFaultingPte(result);
if( ActualFaultingPte )
return ActualFaultingPte;
return v6;
}
v9 = (unsigned __int64)MiCheckVirtualAddress((VOID *)v2, &ProtectCode, &VadOut);
if( v9 )
goto LABEL_11;
}
return 0i64;
}
MiFillPteHierarchy(v2, v15);
v10 = 4i64;
while( 1 )
{
v11 = (MMPTE *)v15[--v10];
v12 = MI_READ_PTE_LOCK_FREE((INT64)v11);
if( (v12 & 1) == 0 )
return v11;
if( v12 < 0 )
return 0i64;
if( v10 == 1 )
{
v6 = (MMPTE *)v15[0];
goto LABEL_4;
}
}
}Referenced by:
MiFindActualFaultingPte
MiIsFaultPteIntact