MiFaultInProbeAddress
INT64 __fastcall MiFaultInProbeAddress(INT64 a1){
void *v2;
__int64 v3;
LOCK_OPERATION v4;
unsigned __int64 v5;
UINT64 v6;
INT64 *v7;
NTSTATUS v8;
__int64 v9;
__int64 v11[2];
INT64 result[5];
int v13;
memset((INT64)result, 0i64);
v2 = *(void **)a1;
v3 = *(_QWORD *)(a1 + 8);
v4 = *(_DWORD *)(a1 + 88);
v5 = *(_QWORD *)a1 & 0xFFFFFFFFFFFFF000ui64;
LOWORD(result[0]) = 2;
v11[0] = v5;
v11[1] = v3 - v5;
result[2] = 1i64;
result[1] = (INT64)v11;
v6 = 0i64;
result[3] = 0i64;
result[4] = 0i64;
v13 = 0;
if( v4 )
{
v6 = 2i64;
if( v4 == (IoModifyAccess|IoWriteAccess) )
{
v6 = 0i64;
}
else if( (*(_BYTE *)(a1 + 64) & 0xF) == 6 && (unsigned int)MiGetSystemRegionType((UINT64)v2) == 12 )
{
v6 = 0i64;
}
}
MiUnlockProbePacketWorkingSet(a1);
v8 = MmAccessFault(v6, v2, 0, (char *)result + 1);
if( v8 < 0 )
{
v9 = *(unsigned int *)(a1 + 64);
LOBYTE(v9) = v9 & 0xF;
if( (_BYTE)v9 == 1 )
{
v9 = *(_QWORD *)(a1 + 80);
if( *(_QWORD *)(v9 + 2240) )
v8 = MiDeliverPicoExceptionForProbedPage(v2, v4);
}
}
MiLockProbePacketWorkingSet(a1, v7, (INT64 **)v9);
return(unsigned int)v8;
}Referenced by:
MiLockPageLeafPageTable
MiProbeAndLockPages
MiProbeLeafFrame