MiTrimWorkingSetTail
NTSTATUS __stdcall MiTrimWorkingSetTail(INT64 a1){
INT64 v1;
UINT64 i;
_DWORD *v4;
__int64 v6;
__int64 v7;
int v8;
v1 = *(_QWORD *)(a1 + 24);
for( i = *(_QWORD *)(a1 + 168);
;
MiProcessVmAccessedInfo(
a1,
*(_DWORD **)(i + 240),
(__int64(__fastcall *)(__int64, _QWORD *, char *, unsigned __int64, __int64))MiTrimWorkingSetEPTCallback,
i) )
{
MiTrimWorkingSetBuildup((_MMMOD_WRITER_MDL_ENTRY *)a1, i);
if( (*(_DWORD *)i & 0x80u) != 0 )
{
v6 = *(_QWORD *)(i + 16) - *(_QWORD *)(i + 24);
*(_QWORD *)(v1 + 8) += v6;
*(_QWORD *)(i + 24) = *(_QWORD *)(i + 16);
v7 = *(_QWORD *)(*(_QWORD *)(*(&stru_140C4DB30 + 267) + 8i64 * *(unsigned __int16 *)(v1 + 174)) + 6848i64);
*(_QWORD *)(v7 + 8i64 * (*(_DWORD *)i & 0xF) + 2584) += v6;
}
v4 = *(_DWORD **)(i + 240);
if( !v4 || !*v4 || !MiQueryEPTAccessedState(a1, v4) )
break;
}
if( (*(_DWORD *)i & 0x800) != 0 && (LOBYTE(v8) = MiTrimmedEnough(v1, i), v8) )
return 4;
else
return 0;
}Referenced by:
MiTrimPte