MiFreeWsleList
INT64 __fastcall MiFreeWsleList(INT64 a1, INT64 a2, CHAR a3){
unsigned __int64 v6;
unsigned int v7;
bool v8;
INT64 v9;
unsigned int i;
unsigned __int64 j;
_BYTE *v12;
unsigned __int64 v13;
UINT64 v14;
char *v15;
INT64 v16;
INT64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
INT64 result[20];
__int64 v23[20];
memset((INT64)result, 0i64);
v6 = *(unsigned int *)(a2 + 12);
v19 = 20i64;
v7 = MiTbFlushType(a1);
v8 = (*(_BYTE *)(a1 + 184) & 7) == 0;
v9 = 0i64;
v18 = v7;
v20 = 0i64;
v21 = 0i64;
if( v8 && *(_QWORD *)(*(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1680i64) + 360i64) )
a3 |= 2u;
for( i = 0; i < 2; ++i )
{
for( j = 0i64; j < v6; ++j )
{
v12 = (char *)&v23[j] + 1;
v13 = *(_QWORD *)&v12[a2 - ((_QWORD)v23 + 1) + 24] & 0xFFFFFFFFFFFFF000ui64;
if( i )
{
if( v23[j] )
LOWORD(v23[j]) = MiWsleFree(a1, v13, a3);
else
*v12 &= ~1u;
}
else
{
v14 = MiWsleFlush(a1, v13, a3, (INT64)&v18);
v23[j] = v14;
if( !v14 )
++v9;
}
}
if( !i )
MiFlushTbList((__int64)&v18);
}
if( v9 != v6 )
{
v15 = MiRemoveWsleList(a1, a2, (char *)v23, v6, v18, v19, v20, v21);
if( v15 )
{
v16 = (_QWORD)MmGetPteBase() << 25;
MiRebuildPageTableLeafAges(v16, (((((_QWORD)v15 << 25) - v16) >> 16 << 25) - v16) >> 16);
}
}
*(_DWORD *)(a2 + 12) = 0;
return v9;
}Referenced by:
MiAgePteWorker
MiAgeWorkingSetTail
MiConvertAndFlushWsleVas
MiDeprioritizeVirtualAddresses
MiEmptyWorkingSetHelper
MiEmptyWorkingSetTail
MiMakeVaRangeNoAccess
MiSetProtectionOnSection
MiSharePages
MiTrimSharedPageFromViews
MiTrimWorkingSetBuildup
MiUpdateOldWorkingSetPagesTail
MmProtectPool
NtUnlockVirtualMemory