MiFaultInProbeAddress

NTSTATUS __stdcall MiFaultInProbeAddress(_MI_PROBE_PACKET *Packet){
  void *v2; 
  __int64 v3; 
  _LOCK_OPERATION v4; 
  unsigned __int64 v5; 
  UINT64 v6; 
  int v7; 
  __int64 v9[14]; 

  memset(&v9[2], 0i64, 0x60u);
  v2 = *(void **)Packet;
  v3 = *((_QWORD *)Packet + 1);
  v4 = Packet[22];
  v5 = *(_QWORD *)Packet & 0xFFFFFFFFFFFFF000ui64;
  LOWORD(v9[2]) = 2;
  v9[0] = v5;
  v9[1] = v3 - v5;
  v9[4] = 1i64;
  v9[3] = (__int64)v9;
  v6 = 0i64;
  memset(&v9[5], 0, 20);
  if( v4 )
  {
    v6 = 2i64;
    if( v4 == (IoModifyAccess|IoWriteAccess) )
    {
      v6 = 0i64;
    }
    else if( (Packet[16] & 0xF) == 6 && MiGetSystemRegionType((UINT64)v2) == 12 )
    {
      v6 = 0i64;
    }
  }
  MiUnlockProbePacketWorkingSet(Packet);
  v7 = MmAccessFault(v6, v2, 0, (char *)&v9[2] + 1);
  if( v7 < 0 && (Packet[16] & 0xF) == 1 && *(_QWORD *)(*((_QWORD *)Packet + 10) + 2240i64) )
    v7 = MiDeliverPicoExceptionForProbedPage(v2, v4);
  MiLockProbePacketWorkingSet(Packet);
  return v7;
}

Referenced by:

MiLockPageLeafPageTable
MiProbeAndLockPages
MiProbeLeafFrame