MiDeleteStaleCacheMaps
VOID __stdcall MiDeleteStaleCacheMaps(){
int v0;
unsigned __int64 v1;
INT64 *v2;
int v3;
_QWORD *v4;
__int64 v5;
_QWORD *v6;
__int64 v7;
void *v8;
__int64 v9;
_QWORD *v10;
int v11[8];
__int64 v12[3];
if( (_UNKNOWN *)*(&stru_140C4DB30 + 462) != (_UNKNOWN *)((char *)&stru_140C4DB30 + 3696) )
{
_InterlockedOr(v11, 0);
v0 = KiCacheFlushTimeStamp;
if( (unsigned int)(KiCacheFlushTimeStamp - *(&stru_140C4DB30 + 928)) > 2
|| (*(&stru_140C4DB30 + 3712) & 1) == 0 && (unsigned int)(KiCacheFlushTimeStamp - *(&stru_140C4DB30 + 928)) >= 2 )
{
v12[1] = (__int64)v12;
v12[0] = (__int64)v12;
v1 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&stru_140C4DB30 + 458);
while( (_UNKNOWN *)*(&stru_140C4DB30 + 462) != (_UNKNOWN *)((char *)&stru_140C4DB30 + 3696) )
{
v2 = (INT64 *)(*(&stru_140C4DB30 + 462) - 24i64);
v3 = *(_DWORD *)(*(&stru_140C4DB30 + 462) - 24i64 + 56);
if( (unsigned int)(v0 - v3) <= 2 && ((v3 & 1) != 0 || (unsigned int)(v0 - v3) < 2) )
break;
v4 = (_QWORD *)*(&stru_140C4DB30 + 462);
v5 = **(&stru_140C4DB30 + 462);
v6 = (_QWORD *)v2[4];
if( *(_QWORD *)(**(&stru_140C4DB30 + 462) + 8i64) != *(&stru_140C4DB30 + 462)
|| *v6 != *(&stru_140C4DB30 + 462)
|| (*v6 = v5,
*(_QWORD *)(v5 + 8) = v6,
RtlAvlRemoveNode((UINT64 *)&stru_140C4DB30 + 461, v2),
v7 = v12[0],
--*(&stru_140C4DB30 + 465),
*(__int64 **)(v12[0] + 8) != v12) )
{
LABEL_20:
__fastfail(3u);
}
*v4 = v12[0];
v4[1] = v12;
*(_QWORD *)(v7 + 8) = v4;
v12[0] = (__int64)v4;
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&stru_140C4DB30 + 458);
__writecr8(v1);
while( (__int64 *)v12[0] != v12 )
{
v8 = (void *)(v12[0] - 24);
v9 = *(_QWORD *)v12[0];
v10 = *(_QWORD **)(v12[0] + 8);
if( *(_QWORD *)(*(_QWORD *)v12[0] + 8i64) != v12[0] || *v10 != v12[0] )
goto LABEL_20;
*v10 = v9;
*(_QWORD *)(v9 + 8) = v10;
ExFreePoolWithTag(v8, 0);
}
}
}
}Referenced by:
MiWorkingSetManager