PopIssueActionRequest

NTSTATUS __stdcall PopIssueActionRequest(
        UINT8 Promote,
        POWER_ACTION Action,
        _SYSTEM_POWER_STATE LightestState,
        UINT64 Flags){
  VOID *v4; 
  NTSTATUS v5; 
  int v6; 
  char v9; 
  _XSTATE_CONFIGURATION *v10; 
  POWER_MONITOR_REQUEST_REASON v11; 
  int v12; 
  int v13; 
  int v14; 
  UINT8 *v15; 
  INT64 v16; 
  NTSTATUS started; 
  int v18; 
  INT64 v19; 
  char v20; 
  unsigned int v21; 
  _KNOWN_CONTROLLER_TYPE v22; 
  _XSTATE_CONFIGURATION *v23; 
  char v25; 
  bool v26; 
  signed __int32 v27[8]; 
  bool v28; 
  char v29; 
  _DWORD Console[3]; 
  _WIN32_POWERSTATE_PARAMETERS Parms; 

  Console[1] = Flags;
  v4 = (VOID *)(int)LightestState;
  v5 = 0;
  memset(&Parms, 0, sizeof(Parms));
  Console[0] = 0;
  v6 = Flags;
  PopAcquireAwaymodeLock();
  PopReadSystemAwayModePolicy();
  v9 = 1;
  if( !*(&stru_140C23628 + 884)
    || Action != PowerActionSleep
    || (int)v4 >= 5
    || (SleepReason & 0xFFFFFFFA) != 0
    || SleepReason == PolicyDeviceThermalZone )
  {
    PopReleaseAwaymodeLock();
    if( SleepReason )
    {
      if( SleepReason > PolicySetPowerStateAPI
        && (SleepReason <= PolicySystemIdle || SleepReason == PolicyImmediateDozeS4Predicted) )
      {
        v11 = MonitorRequestReasonSystemIdle;
      }
      else
      {
        v11 = MonitorRequestReasonSxTransition;
      }
    }
    else
    {
      v11 = MonitorRequestReasonPowerButton;
    }
    if( Action == PowerActionDisplayOff )
    {
      if( !dword_140C50478 )
        return -1073700861;
      PopReleasePolicyLock();
      PopScreenOff(v11);
      PopAcquirePolicyLock();
      return 0;
    }
    PopSetPowerActionWatchdogState(1ui64, v10);
    v28 = (unsigned int)(Action - 4) <= 2;
    if( PsWin32CalloutsEstablished && (unsigned int)(Action - 4) > 2 )
      v9 = 0;
    v12 = v6;
    v13 = v6 & 0xFFFFFFFE;
    v14 = v12 | 1;
    if( Console[1] >= 0 )
      v13 = v14;
    if( v9 )
      LOBYTE(PopAction) = PopAction & 0xFD;
    v29 = byte_140C23310;
    PopReleasePolicyLock();
    PpmBeginHighPerfRequest();
    *(&stru_140C23628 + 280) = 0;
    if( !Promote )
    {
      if( v28 )
        goto LABEL_18;
      memset((char *)&stru_140C23628 + 280, 0i64, 0x278u);
      PopDiagTracePowerTransitionStart(SleepReason, (unsigned int)dword_140C23278);
      *(&stru_140C23628 + 36) = KeQueryPerformanceCounter(0i64);
      PopEnableSystemSleepCheckpoint(v16, v15);
      PopCheckpointSystemSleep(PopSleepCheckpointPowerTransitionStart);
    }
    if( !v28 )
      PopSetSleepMarker(PowerSystemWorking);
LABEL_18:
    if( v9 )
    {
      v18 = ZwSetSystemPowerState(Action, (_SYSTEM_POWER_STATE)v4, (unsigned int)v13);
      goto LABEL_39;
    }
    Parms.Promotion = Promote;
    Parms.SystemAction = Action;
    Parms.MinSystemState = (int)v4;
    Parms.Flags = v13;
    Parms.RequestReason = v11;
    started = PoStartPowerStateTasks(&Parms);
    v18 = started;
    if( !Promote )
    {
      if( started >= 0 && !v29 )
        PopPrepareSleep(&Parms);
      Console[0] = PoBlockConsoleSwitch(&Parms);
    }
    if( v18 >= 0 && !Promote )
    {
      v19 = (v13 >> 31) & 2 | 4u;
      if( (v13 & 8) == 0 )
        v19 = (v13 >> 31) & 2;
      PfPowerActionNotify(0i64, v19, v4);
      PopNoMoreInput = 1;
      _InterlockedOr(v27, 0);
      if( !v29 )
      {
        PopPowerAggregatorNotifySuspendResume(1u);
        PopSuspendApps((_XSTATE_FEATURE *)&Parms);
        PopSuspendServices((_XSTATE_FEATURE *)&Parms);
      }
      if( (v13 & 8) != 0 )
        EtwShutdown(1u);
      PopDispatchSuperfetchNotification((unsigned int)v13, (_SYSTEM_POWER_STATE)v4);
      v18 = ZwSetSystemPowerState(Action, (_SYSTEM_POWER_STATE)v4, (unsigned int)v13);
      PopAcquirePolicyLock();
      v20 = byte_140C23310;
      PopReleasePolicyLock();
      PopNoMoreInput = 0;
      _InterlockedOr(v27, 0);
      if( !v20 )
      {
        PopResumeServices((_XSTATE_FEATURE *)&Parms);
        PopPowerAggregatorNotifySuspendResume(0);
        PopResumeApps((_XSTATE_FEATURE *)&Parms);
      }
      PfPowerActionNotify((_EPROCESS *)7, 0i64, v4);
    }
    PoEndPowerStateTasks(&Parms);
    if( TtmpEnabled == 1 )
    {
      if( Promote )
        goto LABEL_44;
      PopAcquirePolicyLock();
      v25 = *(&stru_140C23628 + 2521);
      *(&stru_140C23628 + 2520) = 0;
      PopReleasePolicyLock();
      v26 = v25 == 0;
      v21 = Console[0];
      if( v26 )
        goto LABEL_38;
      TtmNotifyLowPowerStateExited(Console[0]);
      PopAcquirePolicyLock();
      *(&stru_140C23628 + 2521) = 0;
      PopReleasePolicyLock();
    }
    else
    {
      v21 = Console[0];
    }
    if( !Promote )
    {
LABEL_38:
      PoUnblockConsoleSwitch(&Parms, v21);
LABEL_39:
      if( !Promote && !v28 )
      {
        if( v18 >= 0 )
        {
          *(&stru_140C23628 + 41) = KeQueryPerformanceCounter(0i64);
          PopDiagTraceHiberStats();
          PopDiagTracePowerTransitionTime();
          PopDiagTracePerfTrackData((_KNOWN_CONTROLLER_TYPE)v13, v22);
          *(&stru_140C23628 + 597) = 0i64;
          *(&stru_140C23628 + 226) = Action;
          *(&stru_140C23628 + 227) = (_DWORD)v4;
          *(&stru_140C23628 + 280) = 1;
        }
        PopDiagTracePowerTransitionEnd((unsigned int)v18);
        PopCheckpointSystemSleep(PopSleepCheckpointPowerTransitionEnd);
      }
    }
LABEL_44:
    PpmEndHighPerfRequest(PpmHighPerfDurationTypeSxExit);
    PopAcquirePolicyLock();
    PopSetPowerActionWatchdogState(0i64, v23);
    return v18;
  }
  if( !*(&stru_140C23628 + 444) )
  {
    if( *(&stru_140C23628 + 1769) )
    {
      if( (*(&stru_140C23628 + 582) & 0x4000000) != 0 )
        PopSetSystemState(
          (unsigned int)(*(&stru_140C23628 + 444) + 4),
          (POWER_MONITOR_REQUEST_REASON)(*(&stru_140C23628 + 444) + 7));
    }
    else
    {
      PopReleasePolicyLock();
      v5 = PopSetSystemAwayMode(1ui64);
      PopAcquirePolicyLock();
    }
  }
  PopReleaseAwaymodeLock();
  return v5;
}

Referenced by:

PopPolicyWorkerAction
PopPolicyWorkerActionPromote