PopPolicySystemIdle

UINT64 __stdcall PopPolicySystemIdle(){
  bool v0; 
  bool v1; 
  int ConsoleDisplayRequestCount; 
  bool v3; 
  CHAR S0LowPowerIdleAction; 
  char v5; 
  UINT8 SubstitutionPolicy; 
  UINT64 DozeS4Timeout; 
  POWER_ACTION Action; 
  _SYSTEM_POWER_STATE MinState; 
  _POP_ACTION_TRIGGER Trigger; 
  _SYSTEM_POWER_CAPABILITIES FilteredCapabilities[20]; 

  memset(FilteredCapabilities, 0i64, 0x4Cu);
  v0 = 0;
  memset(&Trigger, 0, sizeof(Trigger));
  if( PopPlatformAoAc )
    KeBugCheckEx(0xA0u, (PVOID)0xA, (PVOID)3, 0i64, 0i64);
  v1 = 0;
  ConsoleDisplayRequestCount = PopGetConsoleDisplayRequestCount();
  PopAcquirePolicyLock();
  if( KUSER_SHARED_DATA.LastSystemRITEventTickCount != dword_140C231B0 )
  {
    dword_140C231B0 = KUSER_SHARED_DATA.LastSystemRITEventTickCount;
    PopResetIdleTime(PopSystemIdleTimeResetReasonUserInput);
  }
  PopFilterCapabilities((_SYSTEM_POWER_CAPABILITIES *)&stru_140C23628 + 518, FilteredCapabilities);
  v3 = 0;
  if( !LOBYTE(FilteredCapabilities[5]) && dword_140C231E0 )
    v3 = (unsigned int)(AccumulatedIdleTime - dword_140C231E0) < *(&stru_140C23628 + 446);
  if( (_DWORD)Timeout
    && (unsigned int)AccumulatedIdleTime >= (unsigned int)Timeout
    && !v3
    && !*(&stru_140C23628 + 2352) )
  {
    if( LOBYTE(FilteredCapabilities[5]) )
    {
      if( !dword_140C50478 || !ConsoleDisplayRequestCount )
        v0 = 1;
    }
    else
    {
      v0 = dword_140C231C4 == 0;
    }
  }
  byte_140C231F0 = v0;
  if( LOBYTE(FilteredCapabilities[5]) && ::Action.Action == PowerActionSleep )
    v1 = LightestState == PowerSystemWorking;
  if( v0 )
  {
    if( !v1 )
      PopResetIdleTime(PopSystemIdleTimeResetReasonIdleActionInitiated);
    byte_140C231D5 = 0;
  }
  PopIsHibernateSupported(FilteredCapabilities);
  S0LowPowerIdleAction = PopIsDozeSupported(FilteredCapabilities);
  LOBYTE(MinState) = ::MinState;
  LOBYTE(Action) = v1;
  LOBYTE(DozeS4Timeout) = v5;
  PopTraceSystemIdleUpdate(
    (unsigned int)AccumulatedIdleTime,
    v0,
    dword_140C231C4 != 0,
    v3,
    SubstitutionPolicy,
    DozeS4Timeout,
    S0LowPowerIdleAction,
    *(_DWORD *)(*(&stru_140C23628 + 232) + 88i64),
    Action,
    MinState);
  if( v0 && !v1 )
  {
    Trigger.Type = PolicySystemIdle;
    Trigger.Flags = 128;
    PopExecutePowerAction(&Trigger, 0i64, &::Action, LightestState, SubstituteLightestOverallDownwardBounded);
  }
  PopReleasePolicyLock();
  if( !v0 && PsWin32CalloutsEstablished )
    PopScanIdleList();
  if( KeGetCurrentThread()->WaitBlock[3].SpareLong )
    __fastfail(0x20u);
  return 0i64;
}

Referenced by:

No references.