MiCheckSystemTrimEndCriteria
__int64 __fastcall MiCheckSystemTrimEndCriteria(_QWORD *a1, __int64 a2, struct _KLOCK_QUEUE_HANDLE *a3){
__int64 v4;
unsigned __int64 v7;
__int64 v8;
_QWORD *v9;
unsigned int v10;
__int64 v11;
__int64 v12;
__int64 v13;
unsigned __int64 v14;
unsigned __int64 v15;
unsigned __int64 v16;
unsigned __int64 v17;
__int64 v18;
_QWORD *v19;
__int64 v20;
char v21;
unsigned __int64 v23;
unsigned __int64 v24;
v4 = a1[856];
if( (unsigned __int8)(*(_BYTE *)(a2 + 2) - 2) <= 1u )
{
v23 = *(_QWORD *)(v4 + 2360);
if( *(_QWORD *)(a2 + 96) < v23 )
v24 = v23 - *(_QWORD *)(a2 + 80);
else
v24 = 0i64;
*(_QWORD *)(v4 + 2360) = v24;
return 1i64;
}
if( (*(_BYTE *)a2 & 0x7Fu) >= 4 )
return 1i64;
v7 = a1[888];
if( v7 >= *(_QWORD *)(a2 + 72) )
return 1i64;
if( *(_QWORD *)(a2 + 96) >= *(_QWORD *)(a2 + 80) )
{
if( v7 < 0x420 )
{
*(_QWORD *)(a2 + 96) = 0i64;
goto LABEL_7;
}
return 1i64;
}
LABEL_7:
v8 = 0i64;
v9 = (_QWORD *)(v4 + 2416);
v10 = 0;
v11 = a2 - v4;
do
{
v12 = *(_QWORD *)((char *)v9 + v11 - 2408);
*v9++ = v12;
v13 = v12 + v8;
if( v10 < 6 )
v13 = v8;
++v10;
v8 = v13;
}
while( v10 < 8 );
*(_QWORD *)(v4 + 2408) = v13;
KeReleaseInStackQueuedSpinLockFromDpcLevel(a3);
__writecr8(a3->OldIrql);
if( a1[936] < 0x420ui64 )
{
++*(_DWORD *)(v4 + 2564);
}
else
{
++*(_DWORD *)(v4 + 2560);
KeDelayExecutionThread(0, 0, (PLARGE_INTEGER)&MiShortTime);
}
v14 = a1[888];
v15 = *(_QWORD *)(a2 + 72);
if( v14 >= v15 )
{
KeAcquireInStackQueuedSpinLock(&WorkerRoutine, a3);
return 1i64;
}
v16 = v15 - v14;
v17 = 0i64;
v18 = *((unsigned __int8 *)MiTrimPassToAge + (*(_BYTE *)a2 & 0x7F));
if( (unsigned int)v18 < 8 )
{
v19 = (_QWORD *)(v4 + 2416 + 8 * v18);
v20 = (unsigned int)(8 - v18);
do
{
v17 += *v19++;
--v20;
}
while( v20 );
}
*(_OWORD *)(a2 + 8) = 0i64;
*(_OWORD *)(a2 + 24) = 0i64;
*(_OWORD *)(a2 + 40) = 0i64;
*(_OWORD *)(a2 + 56) = 0i64;
if( v17 < v16 + 256 || *(char *)a2 < 0 )
v21 = *(_BYTE *)a2 ^ (*(_BYTE *)a2 ^ (*(_BYTE *)a2 + 1)) & 0x7F;
else
v21 = *(_BYTE *)a2 | 0x80;
*(_BYTE *)a2 = v21;
MiLogContinueTrim();
KeAcquireInStackQueuedSpinLock(&WorkerRoutine, a3);
return 0i64;
}Referenced by:
MiProcessWorkingSets