MiOrderTrimList
UINT64 __stdcall MiOrderTrimList(_MI_PARTITION *Partition, UINT64 TrimAge){
unsigned int v2;
__int64 *v4;
UINT64 result;
__int64 v6;
__int64 *v7;
__int64 v8;
UINT64 v9;
__int64 v10;
__int64 *v11;
__int64 v12;
__int64 *v13;
unsigned __int64 v14;
__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;
__int64 **v27;
_QWORD *v28;
__int64 v29;
unsigned __int64 v30;
unsigned int v31;
__int64 Src[8];
__int64 v33[24];
v2 = TrimAge;
v31 = TrimAge;
memset((INT64)Src, 0i64);
v4 = (__int64 *)((char *)Partition + 6856);
if( (__int64 *)*v4 == v4 )
return 0i64;
v6 = *((_QWORD *)Partition + 856);
v7 = v33;
v8 = 0i64;
v9 = 0i64;
v30 = 0i64;
v10 = 12i64;
do
{
v7[1] = (__int64)v7;
*v7 = (__int64)v7;
v7 += 2;
--v10;
}
while( v10 );
while( 1 )
{
v11 = (__int64 *)*v4;
if( (__int64 *)*v4 == v4 )
break;
if( (__int64 *)v11[1] != v4 || (v12 = *v11, *(__int64 **)(*v11 + 8) != v11) )
LABEL_34:
__fastfail(3u);
*v4 = v12;
v13 = v11 - 3;
*(_QWORD *)(v12 + 8) = v4;
MiUpdateClaimDistribution((INT64)(v11 - 3), (UINT64 *)Src);
if( v2 )
{
v14 = 0i64;
if( v2 < 8 )
{
v15 = 8 - v2;
v16 = &v13[v2 + 5];
do
{
v14 += *v16++;
--v15;
}
while( v15 );
}
}
else
{
v14 = (v13[17] - v13[14]) & -(__int64)(v13[14] < (unsigned __int64)v13[17]);
}
v17 = *((_BYTE *)v13 + 184);
if( (v17 & 7) == 0 && (unsigned int)MiIsStoreProcess((__int64)(v11 - 211)) )
{
i = 11;
LABEL_16:
v9 = v30;
goto LABEL_17;
}
if( *((_BYTE *)v13 + 186) == 2 && !MiWorkingSetVeryLarge((INT64)(v11 - 3)) )
{
i = 10;
goto LABEL_16;
}
if( v14 && (v17 >= 0 || v13[17] > (unsigned __int64)v13[14]) )
{
for( i = 0; i < 9; ++i )
{
if( v14 >= 0x100000ui64 >> i )
break;
}
}
else
{
i = 11;
}
if( i >= 0xA )
goto LABEL_16;
v21 = -1i64;
if( v30 + v14 >= v30 )
v21 = v30 + v14;
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];
*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 = (__int64 **)v33[2 * v22 + 1];
*((_QWORD *)Partition + 858) = v27;
*v27 = v4;
LABEL_45:
memmove((UINT8 *)(v6 + 2416), (UINT8 *)Src, 0x40ui64);
v28 = (_QWORD *)(v6 + 2464);
v29 = 2i64;
do
{
v8 += *v28++;
--v29;
}
while( v29 );
*(_QWORD *)(v6 + 2408) = v8;
*(_WORD *)(v6 + 2346) = MiComputeAgeDistribution(Partition, 0i64);
result = v9;
*(_BYTE *)(v6 + 54) = 1;
return result;
}Referenced by:
MiProcessWorkingSets