MiCheckProtoAccess
__int64 __fastcall MiCheckProtoAccess(INT64 a1, _DWORD *a2){
UINT64 v4;
__int64 v5;
int v6;
signed __int64 v7;
signed __int64 v8;
__int64 v9;
__int64 result;
UINT64 ProtectCode;
_MMVAD *VadOut;
VadOut = 0i64;
LODWORD(ProtectCode) = 0;
LODWORD(v4) = MI_READ_PTE_LOCK_FREE(a1);
v5 = (v4 >> 5) & 0x1F;
LOBYTE(v6) = MiIsPrototypePteVadLookup(v4);
if( v6 )
{
v9 = (__int64)MiCheckVirtualAddress(
(VOID *)(((a1 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16),
&ProtectCode,
&VadOut);
}
else
{
v8 = v7;
if( *(&stru_140C4DB30 + 42) )
{
if( (v7 & 0x10) != 0 )
v8 = v7 & 0xFFFFFFFFFFFFFFEFui64;
else
v8 = v7 & ~*(&stru_140C4DB30 + 42);
}
v9 = v8 >> 16;
LODWORD(v5) = (v7 & 8) != 0 ? 1 : 256;
}
result = v9;
*a2 = v5;
return result;
}Referenced by:
MiDispatchFault