MiComputeZeroClusterMaximum
NTSTATUS __stdcall MiComputeZeroClusterMaximum(_MI_FAULT_VA_LIST *FaultHead, _MMVAD *Vad){
__int64 v2;
__int64 v3;
__int64 v6;
unsigned __int64 v7;
unsigned __int64 v8;
unsigned __int64 v9;
__int64 ReferenceCount_high;
unsigned __int64 v11;
_MI_PARTITION *v12;
unsigned __int64 v13;
__int64 v14;
unsigned __int64 v15;
NTSTATUS v16;
__int64 v17;
unsigned __int64 v18;
union {_MI_VAD_SEQUENTIAL_INFO SequentialVa;_MMEXTEND_INFO *ExtendedInfo;} v19;
unsigned __int64 ParentValue;
unsigned int v21;
unsigned __int64 v22;
v3 = *((_QWORD *)FaultHead + 4);
v6 = *((_QWORD *)FaultHead + 1) + 16i64 * *((_QWORD *)FaultHead + 3);
v7 = (((unsigned __int64)(*(_DWORD *)v6 & 0xFFF) + *(_QWORD *)(v6 + 8) + 4095i64) >> 12) - v3;
v8 = *(_QWORD *)v6 + (v3 << 12);
if( v2 )
{
v9 = (*(unsigned int *)(v2 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v2 + 33) << 32)) - (v8 >> 12);
if( v7 > v9 + 1 )
v7 = v9 + 1;
}
ReferenceCount_high = HIWORD(Vad[1].Core.ReferenceCount);
v11 = 20000i64;
v12 = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8 * ReferenceCount_high);
v13 = *((_QWORD *)v12->WorkingSetControl + 298);
v14 = 20000i64;
if( v13 > 0x4E20 )
v14 = *((_QWORD *)v12->WorkingSetControl + 298);
if( (v14 & 0xFFFFFFFFFFFFFFFEui64) <= 0x4E20 )
{
v15 = 10000i64;
}
else
{
if( v13 > 0x4E20 )
v11 = *((_QWORD *)v12->WorkingSetControl + 298);
v15 = v11 >> 1;
}
v16 = MiSufficientAvailablePages((INT64)v12, v15 >> 1);
v17 = 1i64;
if( !v16 )
v7 = 1i64;
if( (Vad[1].Core.u.LongFlags & 0x40) != 0 && (*(_BYTE *)FaultHead != 1 || (FaultHead[20] & 0x4000) == 0) )
{
v19.SequentialVa = (_MI_VAD_SEQUENTIAL_INFO)Vad->u4;
ParentValue = Vad[1].Core.VadNode.ParentValue;
if( *(_QWORD *)&v19.SequentialVa >= ParentValue )
{
LODWORD(v18) = 1;
return v18;
}
if( *(_QWORD *)&v19.SequentialVa + v7 > ParentValue )
v7 = ParentValue - *(_QWORD *)&v19.SequentialVa;
}
if( *(_BYTE *)FaultHead == 1 )
{
v21 = FaultHead[20];
if( (v21 & 0x4000) != 0 )
{
LODWORD(v22) = MiGetAvailablePagesBelowPriority(v12, ((v21 >> 3) & 7) + 1);
if( v7 > v22 )
v7 = v22;
}
}
if( !v7 )
v7 = v17;
v18 = 512 - ((((unsigned int)MmGetPteBase() + ((v8 >> 9) & 0xFFFFFFF8)) >> 3) & 0x1FF);
if( v7 <= v18 )
LODWORD(v18) = v7;
return v18;
}Referenced by:
MiExpandSharedZeroCluster
MiGetClusterPage
MiResolvePrivateZeroFault