MiFlushAllHintedStorePages
NTSTATUS __stdcall MiFlushAllHintedStorePages(){
_ETHREAD *CurrentThread;
NTSTATUS v1;
unsigned int v2;
__int64 v3;
__int64 v4;
INT64 v5;
INT64 v6;
INT64 v8;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v1 = 0;
if( !*(&stru_140C50B28 + 264) )
return 1;
--CurrentThread->Tcb.SpecialApcDisable;
v2 = KeSetActualBasePriorityThread(&CurrentThread->Tcb, 18i64);
v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
_InterlockedExchangeAdd((_DWORD *)&stru_140C50B28 + 262, 2u);
v4 = *(&stru_140C50B28 + 263);
while( Irp.PageLists.ModifiedPageListByReservation[v4].Total )
{
if( MiCanFlushMakeProgress(&Irp, 1ui64) )
{
MiWakeModifiedPageWriter(&Irp, 0xFFFFFFFFFFFFFFFFui64, v5, v6, v8);
MiStoreUpdateMemoryConditions(&Irp);
KeDelayExecutionThread(0, 0, (_LARGE_INTEGER *)&Mi30Milliseconds);
if( (unsigned __int64)(*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v3) <= 0x2FAF080 )
continue;
}
goto LABEL_8;
}
v1 = 1;
LABEL_8:
_InterlockedOr((_DWORD *)&stru_140C50B28 + 262, 1u);
_InterlockedExchangeAdd((_DWORD *)&stru_140C50B28 + 262, 0xFFFFFFFE);
KeSetEvent((PRKEVENT)((char *)&stru_140C50B28 + 776), 0, 0);
KeSetActualBasePriorityThread(&CurrentThread->Tcb, v2);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
return v1;
}Referenced by:
MmStoreFlushAllHintedPages