PopUpdateSystemIdleContext

VOID __stdcall PopUpdateSystemIdleContext(INT64 a1){
  unsigned int v1; 
  unsigned int v2; 
  unsigned int v3; 
  unsigned __int64 v4; 
  int v5; 
  unsigned int v6; 
  size_t *pcchRemaining; 
  ULONG v8; 
  _SYSTEM_POWER_CAPABILITIES FilteredCapabilities[20]; 

  v1 = a1;
  memset(FilteredCapabilities, 0i64, 0x4Cu);
  if( !PopPlatformAoAc )
    KeBugCheckEx(0xA0u, (PVOID)0xA, (PVOID)0x101, 0i64, 0i64);
  PopAcquireRwLockExclusive((_POP_RW_LOCK *)&PopIrpWorkerControlEvent + 15);
  v2 = PopSystemIdleContext;
  v3 = dword_140C0F194;
  v4 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart / 0x989680ui64;
  PopFilterCapabilities((_SYSTEM_POWER_CAPABILITIES *)&stru_140C23628 + 518, FilteredCapabilities);
  if( (*(&stru_140C23628 + 1864) & 3) != 0 || (*(&stru_140C23628 + 582) & 0x1000000) != 0 )
  {
    v5 = *(_DWORD *)(*(&stru_140C23628 + 232) + 60i64);
    if( v5 )
    {
      v6 = 1;
      goto LABEL_9;
    }
LABEL_8:
    v5 = 0;
    v6 = 5;
    goto LABEL_9;
  }
  v5 = *(&stru_140C23628 + 446);
  if( !*(&stru_140C23628 + 446) )
    goto LABEL_8;
  v6 = 4;
LABEL_9:
  if( v1 == 1 || v1 == 4 )
    PopPulseSystemIdleEvent(3ui64);
  if( v1 == 3 )
  {
    PopIdleCancelAoAcDozeS4Timer(PopDozeTimerCancelledReasonMax);
    if( byte_140C231F1 )
      PopIdleArmAoAcDozeS4Timer();
  }
  LODWORD(PopSystemIdleContext) = v6;
  LODWORD(dword_140C0F194) = v5;
  qword_140C0F2C0 = v4;
  dword_140C0F2C8 = v1;
  dword_140C0F2CC = v2;
  dword_140C0F2D0 = v3;
  LODWORD(pcchRemaining) = v5;
  PopDiagTraceSystemIdleContextUpdate(v1, v2, v3, v6, pcchRemaining, v8);
  PopReleaseRwLock((_POP_RW_LOCK *)&PopIrpWorkerControlEvent + 15);
}

Referenced by:

PopInitSIdle