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.