MiAdjustModifiedPageLoad
VOID __stdcall MiAdjustModifiedPageLoad(_MI_PARTITION *Partition, UINT64 AvailableAverage, UINT64 SecondCounter){
unsigned __int64 v3;
unsigned __int64 v5;
char v7;
unsigned __int64 v8;
unsigned __int64 v9;
unsigned __int64 v10;
UINT64 v11;
unsigned __int64 v12;
int v13;
unsigned int v14;
char *v15;
__int64 v16;
__int64 v17;
unsigned __int64 v18;
unsigned __int64 v19;
unsigned __int64 v20;
__int64 v21;
signed __int64 v22;
__int64 v23;
unsigned __int64 v24;
__int64 v25;
char v26;
int v27[14];
v3 = *((_QWORD *)Partition + 950);
v5 = 0x4000i64;
if( *((_QWORD *)Partition + 888) >> 5 > 0x4000ui64 )
v5 = *((_QWORD *)Partition + 888) >> 5;
v7 = SecondCounter;
v8 = *((_QWORD *)Partition + 888) >> 4;
if( v8 >= v5 )
v8 = v5;
v9 = *((_QWORD *)Partition + 280) + *((_QWORD *)Partition + 288);
v10 = *(_QWORD *)(*((_QWORD *)Partition + 856) + 2384i64);
v11 = 0i64;
v12 = 20000i64;
if( v10 > 0x4E20 )
v12 = v10;
if( v9 > v12 && v3 < v9 / 0xA )
goto LABEL_9;
if( v3 >= v8 )
{
v11 = v8 >> 1;
LABEL_36:
if( !(unsigned int)MiUseLowIoPriorityForModifiedPages(Partition) )
v11 = -1i64;
MiWakeModifiedPageWriter(Partition, v11);
*((_QWORD *)Partition + 102) = 0i64;
*((_QWORD *)Partition + 103) = 0i64;
goto LABEL_9;
}
v19 = 15i64 * (*((_QWORD *)Partition + 103) >> 4);
v20 = v19 + (v3 >> 4);
*((_QWORD *)Partition + 103) = v20;
if( v19 > v20 )
goto LABEL_36;
if( v3 < 0x320 )
{
*((_QWORD *)Partition + 102) = 0i64;
goto LABEL_9;
}
v21 = *((_QWORD *)Partition + 102);
v22 = v20 <= v3 ? v20 - v3 + v21 : v3 + v21 - v20;
v23 = v22 + v3;
*((_QWORD *)Partition + 102) = v22 + v3;
if( v22 > (__int64)(v22 + v3) )
goto LABEL_36;
v24 = v8 >> 1;
v25 = 0x7FFFFFFFFFFFFFFFi64;
if( v24 < 0x369D0369D0369Di64 )
v25 = 600 * v24;
if( v23 >= v25 )
goto LABEL_36;
LABEL_9:
*((_QWORD *)Partition + 104) = AvailableAverage;
if( (v7 & 7) == 0 )
{
v13 = 0;
if( (*((_BYTE *)Partition + 876) & 1) != 0 )
{
_InterlockedOr(v27, 0);
if( AvailableAverage > 0x4000 || KiQueryUnbiasedInterruptTime(1u) - *((_QWORD *)Partition + 108) >= 0x47868C00 )
{
v13 = 1;
*((_WORD *)Partition + 438) &= ~1u;
}
}
v14 = *((_DWORD *)Partition + 1734);
if( v14 )
{
v15 = (char *)Partition + 6944;
v16 = v14;
do
{
v17 = *(_QWORD *)v15;
if( (*(_BYTE *)(*(_QWORD *)v15 + 204i64) & 0x40) == 0 )
{
v18 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v17 + 232));
if( *(_DWORD *)(v17 + 132) != *(_DWORD *)(v17 + 128) )
*(_DWORD *)(v17 + 124) = dword_140CFA18C;
*(_DWORD *)(v17 + 136) = 4 * dword_140CFA18C;
if( v13 )
{
v26 = *(_BYTE *)(v17 + 207);
if( (v26 & 1) != 0 )
*(_BYTE *)(v17 + 207) = v26 & 0xFE;
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v17 + 232));
__writecr8(v18);
}
v15 += 8;
--v16;
}
while( v16 );
}
if( v13 )
MiUpdateReserveClusterInfo((INT64)Partition, 0i64, 0);
}
if( *((_DWORD *)Partition + 290) )
MiStoreUpdateMemoryConditions(Partition);
}Referenced by:
MiWorkingSetManager