KiForceIdleStartDpcRoutine
VOID __stdcall KiForceIdleStartDpcRoutine(
KDPC *Dpc,
PVOID DeferredContext,
PVOID SystemArgument1,
PVOID SystemArgument2){
char v4;
UINT64 SpinCount[3];
v4 = 0;
_disable();
LODWORD(SpinCount[0]) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&KiForceIdleLock, 0i64) )
{
do
KeYieldProcessorEx(SpinCount);
while( KiForceIdleLock );
}
if( (_DWORD)KiForceIdleState == 1 )
{
KiSetForceIdleState(4i64, (INT64)DeferredContext, (EVENT_DESCRIPTOR *)SystemArgument1);
KiForceIdleActiveLastStartTime = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
}
else
{
v4 = 1;
}
_InterlockedAnd64(&KiForceIdleLock, 0i64);
_enable();
if( !v4 )
KiForceIdleUpdateSchedulerParkState(1u);
}Referenced by:
No references.