MiComputeFaultCluster
VOID __fastcall MiComputeFaultCluster(INT64 a1, _QWORD *a2, INT64 a3, INT64 a4){
__int64 v4;
__int64 v5;
__int64 v6;
unsigned __int64 v7;
unsigned __int64 v10;
__int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
INT64 v14;
unsigned __int64 v15;
unsigned __int64 v16;
__int64 v17;
unsigned __int64 v18;
INT64 v19;
unsigned __int16 v20;
INT64 v21;
INT64 v22;
unsigned __int64 v23;
__int64 v24;
__int64 v25;
int v27;
int v28;
v28 = a4;
v4 = a2[4];
v5 = a2[1];
v6 = 2i64 * a2[3];
v7 = a2[2];
v24 = a2[3];
v10 = *(_QWORD *)(v5 + 8 * v6) + (v4 << 12);
v25 = v4;
v23 = v7;
MiAdvanceFaultList(a2);
v12 = a2[3];
v13 = 1i64;
if( v12 < v7 )
{
v27 = 0;
v14 = (INT64)MmGetPteBase() + ((v10 >> 9) & 0x7FFFFFFFF8i64) + 8;
v15 = 256i64;
if( v28 && *(unsigned int *)(a1 + 1164) < 0x100ui64 )
v15 = *(unsigned int *)(a1 + 1164);
if( a3 )
{
v16 = (*(unsigned int *)(a3 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a3 + 33) << 32)) - (v10 >> 12) + 1;
if( v15 <= v16 )
v16 = v15;
v15 = v16;
v17 = *(unsigned int *)(a3 + 52);
LODWORD(v17) = v17 & 0x7FFFFFFF;
if( v17 | ((unsigned __int64)*(unsigned __int8 *)(a3 + 34) << 31) )
{
a3 = 0i64;
v27 = 1;
}
}
if( v15 > 1 )
{
while( 1 )
{
if( !a3 )
{
if( (v14 & 0xFFF) == 0 || (v19 = MI_READ_PTE_LOCK_FREE(v14), v22 = v19, v20 = v19, (v19 & 1) != 0) )
{
LABEL_14:
v11 = v24;
v4 = v25;
break;
}
v21 = v19 & 0x400;
if( v27 )
{
if( !v21 )
goto LABEL_14;
}
else if( v21
|| (v20 & 0x800) != 0
|| !(unsigned int)MiGetPagingFileOffset((MMPTE *)&v22)
|| v28 != (unsigned int)MiIsPteInStore(a1, v20) )
{
goto LABEL_14;
}
v14 += 8i64;
}
if( ((*(_QWORD *)(a2[1] + 16 * v12) + (a2[4] << 12)) & 0xFFFFFFFFFFFFF000ui64) - 4096 == (v10 & 0xFFFFFFFFFFFFF000ui64) )
{
++v13;
MiAdvanceFaultList(a2);
v12 = a2[3];
if( v12 != v23 )
{
v10 = v18;
if( v13 < v15 )
continue;
}
}
goto LABEL_14;
}
}
}
a2[4] = v4;
a2[3] = v11;
}Referenced by:
MiResolveMappedFileFault
MiResolvePageFileFault