MiFlushAllPagesWorker
VOID __fastcall MiFlushAllPagesWorker(_MI_PARTITION *Partition, INT64 a2, UINT64 a3, INT64 a4){
_ETHREAD *CurrentThread;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
_InterlockedIncrement((volatile signed __int32 *)Partition + 196);
_InterlockedIncrement((volatile signed __int32 *)Partition + 197);
do
{
if( !(unsigned int)MiCanFlushMakeProgress(Partition, 0i64) || a4 && *(_DWORD *)(a4 + 4) )
break;
KeSetEvent((PRKEVENT)Partition + 33, 0);
MiWakeModifiedPageWriter(Partition, 0xFFFFFFFFFFFFFFFFui64);
CcNotifyWriteBehindEx(2, *((_QWORD *)Partition + 22));
if( *((_DWORD *)Partition + 290) )
MiStoreUpdateMemoryConditions(Partition);
KeDelayExecutionThread(0, 0, (PLARGE_INTEGER)&Mi30Milliseconds);
if( KiQueryUnbiasedInterruptTime(1u) - a2 > a3 )
break;
}
while( *((_QWORD *)Partition + 936) > 0x32ui64 );
_InterlockedAdd((volatile signed __int32 *)Partition + 196, 0xFFFFFFFF);
_InterlockedAdd((volatile signed __int32 *)Partition + 197, 0xFFFFFFFF);
KeLeaveCriticalRegionThread((__int64)CurrentThread);
}Referenced by:
MiFlushAllPages