MiOrderTrimList
NTSTATUS __stdcall MiOrderTrimList(_MI_PARTITION *Partition, UINT64 TrimAge){
unsigned int v2;
_BYTE *v4;
NTSTATUS result;
_QWORD *WorkingSetControl;
__int64 *v7;
__int64 v8;
NTSTATUS v9;
__int64 v10;
__int64 *v11;
__int64 v12;
__int64 *v13;
UINT64 v14;
unsigned __int64 v15;
__int64 *v16;
char v17;
unsigned int i;
__int64 *v19;
__int64 v20;
__int64 v21;
unsigned int v22;
__int64 *v23;
unsigned int v24;
__int64 v25;
__int64 *v26;
_QWORD *v27;
_QWORD *v28;
__int64 v29;
unsigned __int64 v30;
unsigned int v31;
UINT64 ClaimDistribution[8];
__int64 v33[24];
v2 = TrimAge;
v31 = TrimAge;
memset(ClaimDistribution, 0i64, sizeof(ClaimDistribution));
v4 = Partition->gap1AC8;
if( *(_BYTE **)v4 == v4 )
return 0;
WorkingSetControl = Partition->WorkingSetControl;
v7 = v33;
v8 = 0i64;
v9 = 0;
v30 = 0i64;
v10 = 12i64;
do
{
v7[1] = (__int64)v7;
*v7 = (__int64)v7;
v7 += 2;
--v10;
}
while( v10 );
while( 1 )
{
v11 = *(__int64 **)v4;
if( *(_BYTE **)v4 == v4 )
break;
if( (_BYTE *)v11[1] != v4 || (v12 = *v11, *(__int64 **)(*v11 + 8) != v11) )
LABEL_34:
__fastfail(3u);
*(_QWORD *)v4 = v12;
v13 = v11 - 3;
*(_QWORD *)(v12 + 8) = v4;
MiUpdateClaimDistribution((_MMSUPPORT_INSTANCE *)(v11 - 3), ClaimDistribution);
if( v2 )
{
v15 = 0i64;
if( v2 < 8 )
{
v14 = 8 - v2;
v16 = &v13[v2 + 5];
do
{
v15 += *v16++;
--v14;
}
while( v14 );
}
}
else
{
v14 = v13[17];
v15 = (v14 - v13[14]) & -(__int64)(v13[14] < v14);
}
v17 = *((_BYTE *)v13 + 184);
if( (v17 & 7) == 0 && MiIsStoreProcess((_EPROCESS *)(v11 - 211)) )
{
i = 11;
LABEL_16:
v9 = v30;
goto LABEL_17;
}
if( *((_BYTE *)v13 + 186) == 2 && !MiWorkingSetVeryLarge((_MMSUPPORT_INSTANCE *)(v11 - 3), v14) )
{
i = 10;
goto LABEL_16;
}
if( v15 && (v17 >= 0 || v13[17] > (unsigned __int64)v13[14]) )
{
for( i = 0; i < 9; ++i )
{
if( v15 >= 0x100000ui64 >> i )
break;
}
}
else
{
i = 11;
}
if( i >= 0xA )
goto LABEL_16;
v21 = -1i64;
if( v30 + v15 >= v30 )
v21 = v30 + v15;
v9 = v21;
v30 = v21;
LABEL_17:
v19 = &v33[2 * i];
v20 = *v19;
if( *(__int64 **)(*v19 + 8) != v19 )
goto LABEL_34;
v2 = v31;
*v11 = v20;
v11[1] = (__int64)v19;
*(_QWORD *)(v20 + 8) = v11;
*v19 = (__int64)v11;
}
v22 = 0;
v23 = v33;
while( 1 )
{
v24 = v22 + 1;
if( (__int64 *)*v23 != v23 )
break;
v23 += 2;
++v22;
if( v24 >= 0xC )
goto LABEL_45;
}
v25 = v33[2 * v22];
*(_QWORD *)v4 = v25;
*(_QWORD *)(v25 + 8) = v4;
if( v24 < 0xC )
{
v26 = &v33[2 * v24];
do
{
if( (__int64 *)*v26 != v26 )
{
*(_QWORD *)v33[2 * v22 + 1] = *v26;
*(_QWORD *)(*v26 + 8) = v33[2 * v22 + 1];
v22 = v24;
}
++v24;
v26 += 2;
}
while( v24 < 0xC );
}
v27 = (_QWORD *)v33[2 * v22 + 1];
*(_QWORD *)&Partition->gap1AC8[8] = v27;
*v27 = v4;
LABEL_45:
memmove(WorkingSetControl + 302, ClaimDistribution, 0x40u);
v28 = WorkingSetControl + 308;
v29 = 2i64;
do
{
v8 += *v28++;
--v29;
}
while( v29 );
WorkingSetControl[301] = v8;
*((_WORD *)WorkingSetControl + 1173) = MiComputeAgeDistribution(Partition, 0i64);
result = v9;
*((_BYTE *)WorkingSetControl + 54) = 1;
return result;
}Referenced by:
MiProcessWorkingSets