MiCheckProtoAccess

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

Referenced by:

MiDispatchFault