MiCheckSystemPageTables

NTSTATUS __stdcall MiCheckSystemPageTables(UINT64 *FaultStatus){
  __int64 v2; 
  VOID ***i; 
  VOID *v4; 
  int v6; 
  UINT64 v7; 
  unsigned int v8; 
  int v9; 
  _MMPTE *v10; 
  PVOID BugCheckParameter4; 

  v2 = 3i64;
  for( i = (VOID ***)(FaultStatus + 6); ; --i )
  {
    v4 = **i;
    if( ((unsigned __int8)v4 & 1) == 0 )
      KeBugCheckEx(0x50u, (PVOID)*FaultStatus, (PVOID)FaultStatus[1], (PVOID)FaultStatus[2], (PVOID)0xD);
    if( (char)v4 < 0 )
      break;
    if( !--v2 )
      return 0;
  }
  if( (FaultStatus[1] & 2) == 0 || ((unsigned __int16)v4 & 0x800) != 0 )
  {
    MiCheckSystemNxFault((UINT64)FaultStatus, v4, (VOID *)6, (_MMPTE)i, (UINT64)BugCheckParameter4);
    v7 = FaultStatus[2];
    if( (v7 & 1) != 0 )
    {
      v8 = *(unsigned __int8 *)(v7 & 0xFFFFFFFFFFFFFFFEui64);
      if( (unsigned __int8)v8 <= 6u )
      {
        v9 = 74;
        if( _bittest(&v9, v8) )
          return 1;
      }
    }
    else if( KeInvalidAccessAllowed((VOID *)v7) == 1 )
    {
      return 1;
    }
    v10 = (_MMPTE *)*FaultStatus;
    if( *FaultStatus >= (unsigned __int64)MmGetPteBase() && v10 <= MmGetPteLimit() )
      KeBugCheckEx(0x50u, v10, (PVOID)FaultStatus[1], (PVOID)FaultStatus[2], (PVOID)8);
    return 1;
  }
  LOBYTE(v6) = MiGenerateAccessViolation(FaultStatus);
  if( !v6 )
    KeBugCheckEx(0xBEu, (PVOID)*FaultStatus, v4, (PVOID)FaultStatus[2], (PVOID)0x10);
  return 2;
}

Referenced by:

MiSystemFault