PopCheckForIdleness
VOID __stdcall PopCheckForIdleness(KDPC *Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2){
int ActiveProcessorCount;
unsigned __int8 CurrentIrql;
int v6;
volatile unsigned __int64 TickCountQuad;
unsigned int v8;
unsigned int v9;
int v10;
signed int v11;
UINT64 v12;
UINT8 v13;
signed int v14;
unsigned int v15;
volatile unsigned __int64 v16;
_KAFFINITY_EX *v17;
unsigned __int64 v18;
__int16 v19;
int v20;
__int16 v21;
v20 = 0;
v21 = 0;
v15 = 0;
ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v6 = qword_140C231D8;
TickCountQuad = KUSER_SHARED_DATA.TickCountQuad;
v16 = KUSER_SHARED_DATA.TickCountQuad;
__writecr8(CurrentIrql);
if( byte_140C231D5 )
{
v8 = TickCountQuad - v6;
if( (int)TickCountQuad - v6 <= 0 )
{
byte_140C231D5 = 0;
goto LABEL_25;
}
v18 = KeActiveProcessors.Bitmap[0];
v19 = 0;
v9 = 100;
v17 = &KeActiveProcessors;
v10 = 0;
v11 = 100;
if( !(unsigned int)KeEnumerateNextProcessor(&v15, (unsigned __int16 **)&v17) )
{
do
{
v14 = 100
* (*(_DWORD *)(*((_QWORD *)*(&KiProcessorBlock + v15) + 3) + 652i64)
- *((_DWORD *)*(&KiProcessorBlock + v15) + 8247))
/ v8;
if( v14 < v11 )
v11 = 100
* (*(_DWORD *)(*((_QWORD *)*(&KiProcessorBlock + v15) + 3) + 652i64)
- *((_DWORD *)*(&KiProcessorBlock + v15) + 8247))
/ v8;
v10 += v14;
}
while( !(unsigned int)KeEnumerateNextProcessor(&v15, (unsigned __int16 **)&v17) );
TickCountQuad = v16;
if( v11 <= 100 )
{
if( v11 < 0 )
v11 = 0;
}
else
{
v11 = 100;
}
}
if( v10 / ActiveProcessorCount <= 100 )
{
v9 = v10 / ActiveProcessorCount;
if( v10 / ActiveProcessorCount < 0 )
v9 = 0;
}
dword_140C231A4 = v11;
PopSIdle = v9;
if( !PopPlatformAoAc )
{
if( *(_DWORD *)a5 )
{
LODWORD(AccumulatedIdleTime) = PopIdleScanInterval + AccumulatedIdleTime;
PopDiagTraceIdleCheck(v12, (unsigned int)v11, v9, v13);
if( !PopPlatformAoAc
&& (unsigned int)(PopPreSleepNotificationSeconds + 120) <= *(_DWORD *)a5
&& (unsigned int)(AccumulatedIdleTime + PopPreSleepNotificationSeconds) >= *(_DWORD *)a5
&& !PopIsAboutToSleep )
{
PopIsAboutToSleep = 1;
PopQueueWorkItem((INT64)&PopPreSleepNotifyWorkItem, DelayedWorkQueue);
}
}
}
}
v18 = KeActiveProcessors.Bitmap[0];
v17 = &KeActiveProcessors;
qword_140C231D8 = TickCountQuad;
byte_140C231D5 = 1;
v19 = 0;
while( !(unsigned int)KeEnumerateNextProcessor(&v15, (unsigned __int16 **)&v17) )
*((_DWORD *)*(&KiProcessorBlock + v15) + 8247) = *(_DWORD *)(*((_QWORD *)*(&KiProcessorBlock + v15) + 3) + 652i64);
LABEL_25:
PopGetPolicyWorker(PopPlatformAoAc != 0 ? 128 : 8);
PopCheckForWork();
}Referenced by:
No references.