MiWorkingSetManager
VOID __stdcall MiWorkingSetManager(_MM_WORKING_SET_MANAGER_WAKE_TYPE WakeReason, _MM_WORKING_SET_MANAGER_WAKE_TYPE a2){
INT64 v3;
UINT8 *v4;
__int64 v5;
int v6;
int v7;
int v8;
__int64 v9;
unsigned __int8 AgingPolicy;
unsigned __int8 v11;
UINT8 v12;
unsigned __int64 v13;
unsigned __int64 v14;
_MMWS_TRIM_CRITERIA TrimCriteria[2];
v3 = *(_QWORD *)&WakeReason;
memset(TrimCriteria, 0i64, sizeof(TrimCriteria));
v5 = *(_QWORD *)(v3 + 6848);
v6 = 0;
if( !*(_QWORD *)(v5 + 88) )
*(_QWORD *)(v5 + 88) = KeGetCurrentThread();
MiWakePageZeroing(v3, 0i64, v4);
if( (_MI_PARTITION *)v3 == &Irp )
{
MiDeleteStaleCacheMaps();
MiReclaimUnusedUltraMdlMaps();
MiCheckLogPinDriverAddresses();
}
MiEmptyDecayClusterTimers((_MI_PARTITION *)v3);
if( (*(_DWORD *)(v3 + 4) & 0x18) != 0 )
MiEnumerateSlabAllocators(
v3,
(unsigned int(__fastcall *)(__int64, unsigned __int64, __int64))MiFreeSlabEntries,
0i64);
if( ++*(_DWORD *)(v5 + 32) == *(_DWORD *)(v5 + 36) )
{
v7 = *(_DWORD *)(v5 + 24);
*(_DWORD *)(v5 + 32) = 0;
v8 = ((_BYTE)v7 + 1) & 0xF;
*(_DWORD *)(v5 + 24) = v8;
v9 = ((_BYTE)v8 - 8) & 0xF;
if( *(_QWORD *)(v3 + 40 * v9 + 3456) )
KeSetEvent((PRKEVENT)(v3 + 8 * (v9 + 2 * v9 + 551)), 0, 0);
}
if( (_MI_PARTITION *)v3 == &Irp && a2 == WorkingSetPeriodic )
KePulseEvent((PRKEVENT)((char *)&stru_140C4DB30 + 4192), 0, 0);
TrimCriteria[0].AgingPolicy = 1;
MiProcessWorkingSets((_MI_PARTITION *)v3, TrimCriteria);
AgingPolicy = TrimCriteria[0].AgingPolicy;
if( TrimCriteria[0].AgingPolicy != 1 )
{
v11 = 1;
do
{
if( v11 == AgingPolicy )
{
TrimCriteria[0].AgingPolicy = 1;
++*(_DWORD *)(v5 + 2576);
}
else
{
MiAdjustModifiedPageLoad((_MI_PARTITION *)v3, *(_QWORD *)(v5 + 2336), *(unsigned int *)(v5 + 120));
++*(_DWORD *)(v5 + 2572);
MiScanPagefiles((_MI_PARTITION *)v3);
v6 = 1;
}
v11 = TrimCriteria[0].AgingPolicy;
MiProcessWorkingSets((_MI_PARTITION *)v3, TrimCriteria);
AgingPolicy = TrimCriteria[0].AgingPolicy;
}
while( TrimCriteria[0].AgingPolicy != 1 );
}
if( (_MI_PARTITION *)v3 == &Irp )
{
MiAdjustPteBins();
MiAdjustCachedStacks();
if( byte_140C4C872 == 1 )
MiQueueExtentPfnDeletion(0i64, v12);
}
if( !v6 )
{
MiAdjustModifiedPageLoad((_MI_PARTITION *)v3, *(_QWORD *)(v5 + 2336), *(unsigned int *)(v5 + 120));
MiScanPagefiles((_MI_PARTITION *)v3);
}
MiCheckTrimUnusedPageFileRegions((_MI_PARTITION *)v3);
v13 = *(_QWORD *)(v3 + 7488);
v14 = *(_QWORD *)(v3 + 7600);
if( v13 > v14 && v13 - v14 >= 0x320 )
KeSetEvent((PRKEVENT)(v3 + 792), 0, 0);
MiSignalLargePageRebuild((_MI_PARTITION *)v3);
MiScheduleZeroPageThreads(v3);
}Referenced by:
KeBalanceSetManager
MiPartitionWorkingSetManager