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