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