MiComputeMaximumFaultCluster
UINT64 __fastcall MiComputeMaximumFaultCluster(UINT64 *a1, UINT64 a2){
UINT64 v2;
UINT64 v4;
unsigned __int64 v6;
unsigned __int64 v7;
__int64 v8;
UINT64 v9;
UINT64 v10;
RTL_BALANCED_NODE *Address;
UINT64 v12;
v2 = a1[2];
v4 = *a1 & 0xFFFFFFFFFFFFF000ui64;
if( v2 == (v2 & 0xFFFFFFFFFFFFFFFEui64) )
{
if( ((v2 & 1) == 0 || *(_BYTE *)(v2 & 0xFFFFFFFFFFFFFFFEui64) != 1)
&& (v2 & 1) == 0
&& v2
&& *(_WORD *)(v2 + 368) == 16
&& ((*(_DWORD *)(v2 + 376) & 0x200) != 0
|| !KiRspInIstStack(3ui64, *(_QWORD *)(v2 + 384)) && !KiRspInIstStack(2ui64, v12)) )
{
v6 = *(_QWORD *)(v2 + 360);
if( KiDynamicTraceEnabled && v6 >= *(_QWORD *)ControlPc && v6 < qword_140CFBBE0 )
KeGetCurrentIrql();
}
return 1i64;
}
v7 = MiFaultListPagesRemaining(a1);
if( v7 == 1 )
return 1i64;
if( !a2 || a2 > v7 )
a2 = v7;
v9 = 512 - (((unsigned __int64)((unsigned int)MmGetPteBase() + (unsigned int)(v4 >> 9)) >> 3) & 0x1FF);
v10 = v9;
if( a2 <= v9 )
v10 = a2;
if( v4 < 0xFFFF800000000000ui64 )
{
Address = *(RTL_BALANCED_NODE **)(v8 + 88);
if( Address || (Address = MiLocateAddress(v4)) != 0i64 )
v9 = (HIDWORD(Address[1].Left) | ((unsigned __int64)BYTE1(Address[1].Right) << 32)) - (v4 >> 12) + 1;
else
v9 = 1i64;
}
if( v10 <= v9 )
return v10;
return v9;
}Referenced by:
MiDispatchFault