MiFlushAllHintedStorePages
INT64 __stdcall MiFlushAllHintedStorePages(){
_ETHREAD *CurrentThread;
unsigned int v1;
int v2;
__int64 v3;
__int64 v4;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v1 = 0;
if( !dword_140C50F48 )
return 1i64;
--*((_WORD *)CurrentThread + 243);
v2 = KeSetActualBasePriorityThread((__int64)CurrentThread, 18);
v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
_InterlockedExchangeAdd(&dword_140C50F40, 2u);
v4 = 5i64 * (unsigned int)dword_140C50F44;
while( *(&MiSystemPartition + v4 + 352) )
{
if( (unsigned int)MiCanFlushMakeProgress((_MI_PARTITION *)&MiSystemPartition, 1ui64) )
{
MiWakeModifiedPageWriter((_MI_PARTITION *)&MiSystemPartition, 0xFFFFFFFFFFFFFFFFui64);
MiStoreUpdateMemoryConditions((_MI_PARTITION *)&MiSystemPartition);
KeDelayExecutionThread(0, 0, (PLARGE_INTEGER)&Mi30Milliseconds);
if( (unsigned __int64)(*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v3) <= 0x2FAF080 )
continue;
}
goto LABEL_8;
}
v1 = 1;
LABEL_8:
_InterlockedOr(&dword_140C50F40, 1u);
_InterlockedExchangeAdd(&dword_140C50F40, 0xFFFFFFFE);
KeSetEvent(&stru_140C50E30, 0);
KeSetActualBasePriorityThread((__int64)CurrentThread, v2);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
return v1;
}Referenced by:
MmStoreFlushAllHintedPages