PopTransitionSystemPowerStateEx

VOID __stdcall PopTransitionSystemPowerStateEx(UINT64 *a1){
  int v1; 
  UINT64 *v2; 
  _DWORD *v4; 
  int v5; 
  int v6; 
  char PreviousMode; 
  _EJOB *CurrentServerSilo; 
  POWER_ACTION v9; 
  int v10; 
  POWER_POLICY_DEVICE_TYPE v11; 
  bool v12; 
  NTSTATUS v13; 
  POWER_ACTION v14; 
  int v15; 
  UINT8 *v16; 
  unsigned int v17; 
  _SYSTEM_POWER_STATE *v18; 
  unsigned int v19; 
  int v20; 
  _DWORD *v21; 
  signed int v22; 
  __int64 v23; 
  int v24; 
  _SYSTEM_POWER_STATE v25; 
  NTSTATUS v26; 
  UINT8 v27; 
  NTSTATUS HiberContext; 
  UINT64 v29; 
  POWER_STATE_HANDLER_TYPE v30; 
  NTSTATUS inited; 
  __int64 v32; 
  UINT64 v33; 
  UINT8 NextSystemPowerState; 
  __int64 v35; 
  UINT64 v36; 
  __int64 v37; 
  __int64 v38; 
  __int64 v39; 
  UINT64 v40; 
  UINT64 v41; 
  __int64 *v42; 
  UINT64 *v43; 
  _DWORD *v44; 
  __int64 *v45; 
  UINT64 v46; 
  UINT8 v47; 
  UINT64 *v48; 
  _DIAGNOSTIC_BUFFER **v49; 
  UINT8 NextWakeTime; 
  UINT8 v51; 
  UINT8 v52; 
  __int64 v53; 
  UINT64 v54; 
  _XSTATE_CONFIGURATION *v55; 
  _SYSTEM_POWER_STATE v56; 
  _SYSTEM_POWER_STATE v57; 
  _SYSTEM_POWER_STATE v58; 
  _DIAGNOSTIC_BUFFER *v59; 
  __int64 v60; 
  _EX_RUNDOWN_REF *v61; 
  INT64 *v62; 
  INT64 v63; 
  VOID *v64; 
  VOID *v65; 
  UINT64 v66; 
  UINT8 v67; 
  __int64 v68; 
  _DWORD *v69; 
  UINT64 SubstitutionPolicya; 
  UINT64 SubstitutionPolicy; 
  UINT64 SubstitutionPolicyb; 
  _DIAGNOSTIC_BUFFER *WakeInfoAc; 
  _DIAGNOSTIC_BUFFER *WakeInfoAca; 
  _DIAGNOSTIC_BUFFER *WakeInfoDc; 
  _DIAGNOSTIC_BUFFER *WakeInfoDca; 
  _DIAGNOSTIC_BUFFER *WakeInfoDcb; 
  _UNICODE_STRING DestinationString; 
  int v79; 
  char *v80; 
  int v81; 
  int v82; 
  __int64 v83; 
  int v84; 
  char v85; 
  _SYSTEM_POWER_STATE TargetState; 

  v1 = 0;
  v2 = a1 + 29;
  *((_BYTE *)a1 + 24) = 0;
  v4 = (_DWORD *)a1 + 59;
  *((_BYTE *)a1 + 36) = 0;
  *((_DWORD *)a1 + 10) = 0;
  a1[10] = 0i64;
  *((_DWORD *)a1 + 37) = 1;
  *((_DWORD *)a1 + 38) = 1;
  *((_BYTE *)a1 + 256) = 1;
  a1[47] = 1i64;
  a1[7] = 0i64;
  *((_DWORD *)a1 + 29) = 0;
  a1[30] = 0i64;
  a1[27] = 0i64;
  a1[28] = 0i64;
  a1[43] = 0i64;
  *((_BYTE *)a1 + 384) = 0;
  a1[45] = 0i64;
  a1[46] = 0i64;
  *((_DWORD *)a1 + 58) = 0;
  *((_DWORD *)a1 + 59) = 0;
  v5 = *(&stru_140C23628 + 582) & 0x10000;
  *((_DWORD *)a1 + 26) = 0;
  *((_DWORD *)a1 + 97) = v5 != 0 ? 300000000 : 600000000;
  PopTransitionCheckpoint(8i64);
  if( (unsigned int)(*((_DWORD *)a1 + 1) - 1) > 5 )
    return;
  v6 = *(_DWORD *)a1;
  TargetState = PowerSystemShutdown;
  if( (unsigned int)(v6 - 1) > 6 || (a1[1] & 0xCFFFFC0) != 0 || v6 < 4 && SleepReason >= PolicyDeviceMax )
    return;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  *((_BYTE *)a1 + 72) = PreviousMode;
  if( PreviousMode )
  {
    if( SeSinglePrivilegeCheck(*(_QWORD *)&SeShutdownPrivilege, PreviousMode) )
      ZwSetSystemPowerState(*(POWER_ACTION *)a1, *((_SYSTEM_POWER_STATE *)a1 + 1), *((unsigned int *)a1 + 2));
    return;
  }
  CurrentServerSilo = PsGetCurrentServerSilo();
  v9 = *(_DWORD *)a1;
  a1[12] = (UINT64)CurrentServerSilo;
  if( !PsIsHostSilo(CurrentServerSilo) )
  {
    if( (unsigned int)(v9 - 4) > 2 )
    {
      v1 = -1073741637;
    }
    else
    {
      v10 = -2147483599;
      if( v9 != PowerActionShutdownReset )
        v10 = -1073741077;
      *((_DWORD *)a1 + 8) = v10;
      PsTerminateServerSilo();
    }
    *((_DWORD *)a1 + 26) = v1;
    return;
  }
  if( v9 == PowerActionShutdown )
    PopReadShutdownPolicy();
  *((_DWORD *)a1 + 5) = 0;
  *((_DWORD *)a1 + 3) = *(_DWORD *)a1;
  *((_DWORD *)a1 + 4) = *((_DWORD *)a1 + 2);
  *(_OWORD *)(a1 + 15) = 0i64;
  a1[17] = 0i64;
  v11 = SleepReason;
  v12 = SleepReason < PolicyDeviceMax;
  *((_DWORD *)a1 + 31) = 128;
  if( !v12 )
    v11 = PolicySetPowerStateAPI;
  *((_DWORD *)a1 + 30) = v11;
  PopAcquireTransitionLock();
  MmLockPagableSectionByHandle(ExPageLockHandle);
  PopRunMaximumIrpWorkers();
  *(&PopIrpWorkerControlEvent + 235) = 0i64;
  *(&PopIrpWorkerControlEvent + 234) = PopUnlockAfterSleepWorker;
  *(&PopIrpWorkerControlEvent + 232) = 0i64;
  CmSetLazyFlushState(0);
  PopNotifyCallbacksPreSleep();
  ExSwapinWorkerThreads(0);
  v13 = PoInitializeBroadcast();
  *((_DWORD *)a1 + 26) = v13;
  if( v13 < 0 )
  {
    ExQueueWorkItem((PWORK_QUEUE_ITEM)&PopIrpWorkerControlEvent + 58, DelayedWorkQueue);
    return;
  }
  PopCheckPowerSourceAfterRtcWakeCancel();
  PopAcquirePolicyLock();
  *((_BYTE *)a1 + 64) = 1;
  PopFilterCapabilities((_SYSTEM_POWER_CAPABILITIES *)&stru_140C23628 + 518, &FilteredCapabilities);
  if( byte_140C23261 )
  {
    if( byte_140C23261 != 2 )
    {
      PopReleasePolicyLock();
      PoClearBroadcast();
      ExQueueWorkItem((PWORK_QUEUE_ITEM)&PopIrpWorkerControlEvent + 58, DelayedWorkQueue);
      return;
    }
  }
  else
  {
    PopResetActionDefaults();
  }
  PopSetPowerActionState(3u);
  qword_140C23298 = rcx0;
  PopExecutePowerAction(
    (_POP_ACTION_TRIGGER *)a1 + 5,
    0i64,
    (POWER_ACTION_POLICY *)a1 + 1,
    *((_SYSTEM_POWER_STATE *)a1 + 1),
    SubstituteLightestOverallDownwardBounded);
  PopIgnoreBatteryStatusChange();
  PopCheckResiliencyScenarios();
  PopEnforceResiliencyScenarios((PPOWER_IDLE_RESILIENCY)a1 + 31);
  PopExecuteOnTargetProcessors(
    &KeActiveProcessors,
    (INT64 *)PpmStopIllegalProcessorThrottleLogging,
    0i64,
    0i64,
    SubstitutionPolicya,
    (UINT64)WakeInfoAc,
    (UINT64)WakeInfoDc);
  v14 = *(_DWORD *)a1;
  if( *(_DWORD *)a1 == 6 )
  {
    SystemAction = PowerActionShutdownOff;
    v14 = *(_DWORD *)a1;
  }
  if( (unsigned int)(v14 - 4) <= 2 )
  {
    PoPowerDownActionInProgress = 1;
    if( v14 == PowerActionShutdownReset )
      PoPowerResetActionInProgress = 1;
    if( *(_QWORD *)&PopHiberInfo )
    {
      if( FileObject )
      {
        MmZeroPageFileAtShutdown();
        if( v15 )
          PopZeroHiberFile(*(VOID **)&PopHiberInfo, (_FILE_OBJECT *)FileObject);
      }
    }
  }
  v16 = (UINT8 *)(a1 + 11);
  v17 = *(_DWORD *)a1 - 2;
  *((_BYTE *)a1 + 88) = 0;
  v18 = (_SYSTEM_POWER_STATE *)a1 + 7;
  *((_DWORD *)a1 + 7) = 0;
  if( v17 <= 1 )
    PoPowerDownActionInProgress = 1;
  *((_BYTE *)a1 + 112) = 0;
LABEL_38:
  *((_DWORD *)a1 + 26) = -1073741536;
LABEL_39:
  while( 2 )
  {
    v19 = 0x80000000;
    while( 1 )
    {
      while( 1 )
      {
        if( !*((_BYTE *)a1 + 64) )
        {
          PopAcquirePolicyLock();
          v19 = 0x80000000;
          *((_BYTE *)a1 + 64) = 1;
        }
        if( SystemAction == PowerActionNone )
        {
          *((_DWORD *)a1 + 26) = 0;
          goto LABEL_178;
        }
        *((_BYTE *)a1 + 144) = PopAction;
        LOBYTE(PopAction) = 0;
        v20 = *((_DWORD *)a1 + 26);
        if( v20 == -1073741536 )
        {
          if( (a1[18] & 2) != 0 && ((unsigned int)Flags & v19) == 0 && (Flags & 3) != 0 )
          {
            PopGetPolicyWorker(2ui64);
            goto LABEL_178;
          }
          PopActionRetrieveInitialState(
            (_SYSTEM_POWER_STATE *)&SystemAction + 1,
            (_SYSTEM_POWER_STATE *)a1 + 7,
            &SystemState,
            (UINT8 *)a1 + 88);
          if( (unsigned int)(SystemAction - 4) <= 2 )
          {
            byte_140C23262 = 1;
            LODWORD(Flags) = *((_DWORD *)a1 + 2);
          }
          *((_DWORD *)a1 + 26) = 0;
          v20 = 0;
        }
        if( v20 < 0 )
          goto LABEL_178;
        PopReleasePolicyLock();
        *((_BYTE *)a1 + 64) = 0;
        *((_DWORD *)a1 + 94) = 1;
        *((_DWORD *)a1 + 95) = 0;
        PopQueryPowerSettingUlong(&GUID_ALLOW_RTC_WAKE, (_DWORD *)a1 + 94, (_DWORD *)a1 + 95);
        v21 = (_DWORD *)a1 + 95;
        if( (Flags & 0x40000000) != 0 )
        {
          *((_DWORD *)a1 + 94) = 0;
          *v21 = 0;
        }
        if( !byte_140C23346 && !byte_140C23334 && !byte_140C2333B )
          *v21 = 0;
        PopInitializePowerPolicySimulate();
        PowerState = SystemState;
        v22 = ((unsigned int)Flags >> 27) & 2;
        *((_DWORD *)a1 + 27) = v22;
        PopAdvanceSystemPowerState(
          &PowerState,
          (POP_SUBSTITUTION_POLICY)v22,
          (_SYSTEM_POWER_STATE)*(&SystemAction + 1),
          *v18);
        if( (a1[1] & 8) != 0 )
        {
          byte_140C23480 = 1;
          *((_BYTE *)a1 + 36) = 0;
          EffectiveState = PowerSystemHibernate;
          *((_DWORD *)a1 + 11) = 6;
          v23 = SystemState;
LABEL_62:
          v24 = PopPowerStateHandlerLookup[v23];
          goto LABEL_63;
        }
        if( !PopFastS4Check() )
        {
          EffectiveState = SystemState;
          *((_DWORD *)a1 + 11) = SystemState;
          v23 = SystemState;
          *((_BYTE *)a1 + 36) = 0;
          goto LABEL_62;
        }
        *((_DWORD *)a1 + 11) = SystemState;
        v24 = 6;
        EffectiveState = PowerSystemHibernate;
        *((_BYTE *)a1 + 36) = 1;
LABEL_63:
        *((_DWORD *)a1 + 17) = v24;
        if( v24 < 0 || v24 >= 7 || !*((_QWORD *)&stru_140C23628 + 3 * v24 + 236) )
        {
          NextSystemPowerState = PopFindNextSystemPowerState(*v18, *((_BYTE *)a1 + 36), (UINT8 *)a1 + 88);
          *((_BYTE *)a1 + 48) = NextSystemPowerState;
          if( NextSystemPowerState )
          {
            *((_DWORD *)a1 + 26) = 0;
            goto LABEL_39;
          }
LABEL_178:
          if( byte_140C23480 )
          {
            *(&stru_140C23628 + 99) = KeQueryPerformanceCounter(0i64);
            dword_140C23464 = PopQpcTimeInMs(
                                (_LARGE_INTEGER *)&stru_140C23628 + 98,
                                (_LARGE_INTEGER *)&stru_140C23628 + 99);
          }
          if( *((int *)a1 + 26) >= 0 )
          {
            qword_140C232B0 = a1[43];
            ExUpdateSystemTimeFromCmos(1u, 1ui64);
            LOBYTE(v60) = 1;
            if( ((unsigned __int8(__fastcall *)(__int64))off_140C00948[0])(v60) )
              *((_BYTE *)a1 + 208) = 1;
            *(&stru_140C23628 + 40) = KeQueryPerformanceCounter(0i64);
            PfPowerActionNotify((_EPROCESS *)2, 0i64, 0i64);
            qword_140C232A8 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
            PopDiagComputeEarlyHiberStats();
            if( *((_DWORD *)a1 + 10) == 4 )
              PopDiagTraceFirmwareS3Stats();
          }
          byte_140C2327D = 1;
          PoPowerDownActionInProgress = 0;
          PoPowerResetActionInProgress = 0;
          PsIumResumeAfterHibernate();
          if( *((_BYTE *)a1 + 112) )
          {
            PfPowerActionNotify((_EPROCESS *)3, 0i64, 0i64);
            PopSetDevicesSystemState();
            PfPowerActionNotify((_EPROCESS *)3, 1i64, 0i64);
          }
          PpmCheckResumePpmEngineFromSx();
          if( *((_BYTE *)a1 + 208) )
          {
            LODWORD(WakeInfoDca) = 0;
            LODWORD(WakeInfoAca) = 0;
            ZwUpdateWnfStateData(
              &WNF_BOOT_INVALID_TIME_SOURCE,
              0i64,
              0i64,
              0i64,
              0i64,
              (UINT64)WakeInfoAca,
              (UINT64)WakeInfoDca);
          }
          if( !PopSleepReliabilityDetailedDiagEnabled )
          {
            LOBYTE(v62) = 1;
            RtlBootStatusDisableFlushing(v62, v61, v63);
          }
          PopBootStatCheckpointAvailable = 1;
          PopCheckpointSystemSleep(PopSleepCheckpointBootstatAvailable);
          v65 = (VOID *)a1[30];
          if( v65 )
          {
            ExFreePoolEx(v65, v64);
            a1[30] = 0i64;
          }
          ((void(__fastcall *)(_QWORD, _QWORD))off_140C005C0)(0i64, 0i64);
          *((_DWORD *)a1 + 29) = PopNotifyTelemetryOsState(
                                   SystemAction,
                                   SystemState,
                                   EffectiveState,
                                   *((unsigned int *)a1 + 2),
                                   0);
          PopQueueBatteryStatusTimeout();
          PopExecuteOnTargetProcessors(
            &KeActiveProcessors,
            (INT64 *)PpmStartIllegalProcessorThrottleLogging,
            0i64,
            0i64,
            SubstitutionPolicyb,
            (UINT64)WakeInfoAca,
            (UINT64)WakeInfoDca);
          if( *((_BYTE *)a1 + 64) )
          {
            PopReleasePolicyLock();
            *((_BYTE *)a1 + 64) = 0;
          }
          PoClearBroadcast();
          qword_140C23298 = 0i64;
          PopEsExitSleep(v66);
          PopCurrentPowerStatePrecise((SYSTEM_BATTERY_STATE *)((char *)a1 + 156));
          *((_DWORD *)a1 + 38) = *(&stru_140C23628 + 441);
          *(&PopIrpWorkerControlEvent + 227) = 0i64;
          *(&PopIrpWorkerControlEvent + 226) = PopSpoilEstimatesOnPowerStateTransitionWorker;
          *(&PopIrpWorkerControlEvent + 224) = 0i64;
          ExQueueWorkItem((PWORK_QUEUE_ITEM)&PopIrpWorkerControlEvent + 56, DelayedWorkQueue);
          PopThermalSxExit(v67);
          if( !*((_BYTE *)a1 + 64) )
          {
            PopAcquirePolicyLock();
            *((_BYTE *)a1 + 64) = 1;
          }
          if( *((int *)a1 + 26) >= 0 )
          {
            PopInitSIdle();
            LOBYTE(PopAction) = 0;
            if( (unsigned __int64)dword_140C232C0 < 3 )
            {
              qword_140C23318 = *(&ProgrammedWakeTimeAc + 3 * dword_140C232C0);
              v68 = qword_140C232D8[3 * dword_140C232C0];
              *(&stru_140C23628 + 466) = 0;
              PopPendingUserPresenceDuringSystemSleep = 0;
              PopPendingUserPresenceMonitorOnReason = MonitorRequestReasonUnknown;
              switch( v68 )
              {
                case -1i64:
                  if( PopDeferDoze(*((unsigned int *)a1 + 94), *((unsigned int *)a1 + 95), (_BYTE *)a1 + 156) )
                    *(_QWORD *)&SystemAction = *a1;
                  else
                    *(_QWORD *)&SystemAction = 0x500000002i64;
                  LOBYTE(PopAction) = PopAction | 2;
LABEL_212:
                  *((_BYTE *)a1 + 256) = 0;
                  break;
                case -2i64:
                  if( !qword_140C232B8 )
                    qword_140C232B8 = qword_140C232A8;
                  break;
                case -3i64:
                  PopWakeAlarmTimeOverride = 0i64;
                  break;
                default:
                  v69 = (_DWORD *)a1 + 95;
                  if( *(&stru_140C23628 + 441) == 1 )
                  {
                    if( !*v69 )
                    {
                      *(_QWORD *)&SystemAction = *a1;
                      LOBYTE(PopAction) = 2;
                      goto LABEL_212;
                    }
                  }
                  else if( !*v69 && *((_DWORD *)a1 + 37) == *((_DWORD *)a1 + 38) )
                  {
                    PopCheckPowerSourceAfterRtcWakeSet();
                  }
                  break;
              }
            }
          }
          if( byte_140C23310 && *((_BYTE *)a1 + 256) )
          {
            ExWakeTimersResume();
            byte_140C23310 = 0;
            qword_140C23318 = 0i64;
          }
          if( PoResumeFromHibernate )
          {
            PopBootLoaderTraceProcess();
            PoResumeFromHibernate = 0;
          }
          byte_140C23480 = 0;
          PopResetActionDefaults();
          PopSetPowerActionState(2u);
          PopReleasePolicyLock();
          if( PopPendingUserPresenceDuringSystemSleep )
            PoSetUserPresent(PopPendingUserPresenceMonitorOnReason);
          ExQueueWorkItem((PWORK_QUEUE_ITEM)&PopIrpWorkerControlEvent + 58, DelayedWorkQueue);
          PopCheckForWork();
          if( *((int *)a1 + 26) >= 0 )
            PpmPerfReApplyStates();
          SleepReason = PolicyDeviceMax;
          *(&stru_140C23628 + 85) = PopCaptureTimeOnProcZero();
          return;
        }
        if( (a1[1] & 8) != 0 )
        {
          v25 = PowerSystemShutdown;
LABEL_70:
          PopSetSleepMarker(v25);
          goto LABEL_72;
        }
        if( !byte_140C23262 )
        {
          v25 = SystemState;
          goto LABEL_70;
        }
        PopSetShutdownMarker();
LABEL_72:
        PopAcquirePolicyLock();
        if( (PopAction & 6) != 0 )
        {
          *((_BYTE *)a1 + 64) = 1;
          goto LABEL_38;
        }
        PopReleasePolicyLock();
        PopCheckpointSystemSleep(PopSleepCheckpointSleepTransactionCommitted);
        byte_140C2327C = 3;
        PopDiagTraceKernelQueriesAllowed(*v16);
        if( !*v16 )
          break;
        v26 = PopSetDevicesSystemState();
        *((_DWORD *)a1 + 26) = v26;
        if( (int)(v26 + 0x80000000) < 0 || v26 == -1073741536 )
        {
          if( !Feature_Servicing_2207c_QxS0Irp__private_IsEnabled() )
            break;
          v19 = 0x80000000;
          if( *((int *)a1 + 26) >= 0 )
          {
            *((_BYTE *)a1 + 112) = 1;
            break;
          }
        }
        else
        {
          v27 = PopFindNextSystemPowerState(*v18, *((_BYTE *)a1 + 36), (UINT8 *)a1 + 88);
          *((_BYTE *)a1 + 48) = v27;
          if( !v27 )
            goto LABEL_178;
          *((_DWORD *)a1 + 26) = 0;
        }
      }
      v19 = 0x80000000;
      if( *((int *)a1 + 26) >= 0 )
      {
        PopCheckpointSystemSleep(PopSleepCheckpointAllocatingHiberContext);
        HiberContext = PopAllocateHiberContext();
        *((_DWORD *)a1 + 26) = HiberContext;
        v19 = 0x80000000;
        if( HiberContext >= 0 )
          break;
      }
    }
    *((_DWORD *)a1 + 29) = PopNotifyTelemetryOsState(
                             SystemAction,
                             SystemState,
                             EffectiveState,
                             *((unsigned int *)a1 + 2),
                             1u);
    PopTransitionCheckpoint(9i64);
    if( !byte_140C23262 )
    {
      LODWORD(SubstitutionPolicy) = *((_DWORD *)a1 + 29);
      PopDiagTracePreSleepNotification(
        *((_SYSTEM_POWER_STATE *)a1 + 11),
        EffectiveState,
        SleepReason,
        (unsigned int)dword_140C23278,
        SubstitutionPolicy);
      PopCheckpointSystemSleep(PopSleepCheckpointPreSleepNotification);
      PopUmpoSendFlushSleepStudyLoggerNotification();
    }
    PopEsEnterSleepShutdown();
    PopThermalSxEntry();
    if( !*((_BYTE *)a1 + 24) )
    {
      if( byte_140C23262 )
      {
        v85 = 1;
        v79 = 5;
        v81 = 1;
        v80 = &v85;
        v82 = 11;
        v83 = 0xFFFFF780000002C4ui64;
        v84 = 4;
        RtlSetSystemBootStatusEx((__int64)&v79, 2u, 0i64);
      }
      *((_BYTE *)a1 + 24) = 1;
    }
    v29 = 5i64;
    if( !*((_BYTE *)a1 + 36) )
      v29 = (unsigned int)SystemState;
    PopFlushVolumes(v29);
    if( EffectiveState < SystemState )
      EffectiveState = SystemState;
    byte_140C2327C = 2;
    if( !byte_140C23262 )
    {
      v30 = *((_DWORD *)a1 + 17);
      KeMtrrComparisonFailed = 0;
      inited = PopInitSystemSleeperThread(v30, (POP_SLEEPER_HANDOFF *)a1 + 66);
      *((_DWORD *)a1 + 26) = inited;
      if( inited < 0 )
        continue;
      if( !byte_140C23310 )
      {
        ExWakeTimersPause();
        byte_140C23310 = 1;
      }
      a1[24] = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
      v32 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
      v33 = PopWakeAlarmTimeOverride;
      a1[25] = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
      a1[28] = 0i64;
      if( v33 )
      {
        a1[27] = v33;
        a1[28] = -3i64;
      }
      else if( !*(_DWORD *)(*(&stru_140C23628 + 232) + 88i64)
             || SystemState == PowerSystemHibernate
             || !PopIsDozeSupported((_BYTE *)&stru_140C23628 + 2072)
             || (Flags & 0x40000000) != 0 )
      {
        if( *(&stru_140C23628 + 2092)
          && SystemState == PowerSystemHibernate
          && !byte_140C23480
          && qword_140C231C8
          && SleepReason == PolicyImmediateDozeS4Predicted )
        {
          v38 = qword_140C231C8 - v32;
          a1[44] = qword_140C231C8 - v32;
          v39 = -10000000i64 * (unsigned int)PopSmartUserPresenceWakeOffset;
          a1[28] = -2i64;
          v40 = v39 + v38;
          v41 = a1[24];
          a1[44] = v40;
          a1[27] = v40 + v41;
        }
      }
      else
      {
        v36 = a1[24];
        a1[27] = v36;
        v37 = *(unsigned int *)(v35 + 88);
        a1[28] = -1i64;
        a1[27] = v36 + 10000000 * v37;
        if( !qword_140C23320 )
          qword_140C23320 = v36;
      }
      v42 = &qword_140C232C8;
      memset(&qword_140C232C8, 0i64, 0x48u);
      dword_140C232C0 = 3;
      if( a1[28] == -3i64 )
      {
        do
        {
          v42[2] = a1[28];
          *v42 = a1[27];
          v42 += 3;
        }
        while( (__int64)v42 < (__int64)&unk_140C232F8 );
      }
      else if( !byte_140C23480 && SleepReason != PolicyImmediateDozeS4AdaptiveReserveNoWake )
      {
        v43 = a1 + 47;
        v44 = (_DWORD *)a1 + 95;
        if( SystemState == PowerSystemHibernate && *(_DWORD *)v43 != 1 && *v44 != 1 )
        {
          PopQueryPowerSettingUlong(&GUID_LEGACY_RTC_MITIGATION, v2, v4);
          if( *(_DWORD *)v2 || *v4 )
          {
            v43 = a1 + 47;
            *v44 = 0;
            *((_DWORD *)a1 + 94) = 0;
          }
          else
          {
            v43 = a1 + 47;
          }
        }
        if( a1[27] )
        {
          if( a1[28] == -2i64 )
          {
            if( *(_DWORD *)v43 )
            {
              qword_140C232C8 = a1[27];
              qword_140C232D8[0] = a1[28];
            }
            if( *v44 )
            {
              qword_140C232E0 = a1[27];
              qword_140C232F0 = a1[28];
            }
          }
          else
          {
            do
            {
              *v42 = a1[27];
              v42 += 3;
            }
            while( (__int64)v42 < (__int64)&unk_140C232F8 );
            v45 = qword_140C232D8;
            do
            {
              *v45 = a1[28];
              v45 += 3;
            }
            while( (__int64)v45 < (__int64)&unk_140C23308 );
          }
        }
        v46 = qword_140C23318;
        a1[10] = qword_140C23318;
        if( v46 )
        {
          if( v46 < a1[24] + 20000000 )
            v46 = a1[24] + 20000000;
          a1[10] = v46;
        }
        if( *(_DWORD *)v43 )
        {
          if( *(_DWORD *)v43 != 2 || (v47 = 1, (*(&stru_140C23628 + 582) & 0x80000000) != 0) )
            v47 = 0;
          *((_BYTE *)a1 + 209) = v47;
          v48 = a1 + 7;
          v49 = (_DIAGNOSTIC_BUFFER **)(a1 + 30);
          NextWakeTime = ExGetNextWakeTime(a1[10] + 1, a1[27], v47, a1 + 7, (_DIAGNOSTIC_BUFFER **)a1 + 30);
          *((_BYTE *)a1 + 384) = NextWakeTime;
          if( NextWakeTime )
          {
            qword_140C232C8 = *v48;
            qword_140C232D8[0] = (__int64)*v49;
          }
        }
        else
        {
          v48 = a1 + 7;
          v49 = (_DIAGNOSTIC_BUFFER **)(a1 + 30);
        }
        if( *v44 )
        {
          if( *v44 != 2 || (v51 = 1, (*(&stru_140C23628 + 582) & 0x80000000) != 0) )
            v51 = 0;
          *((_BYTE *)a1 + 209) = v51;
          v52 = ExGetNextWakeTime(a1[10] + 1, a1[27], v51, v48, v49);
          *((_BYTE *)a1 + 384) = v52;
          if( v52 )
          {
            qword_140C232E0 = *v48;
            qword_140C232F0 = (__int64)*v49;
          }
        }
      }
      ProgrammedWakeTimeAc = qword_140C232C8;
      if( qword_140C232C8 && qword_140C232C8 < a1[24] + *((unsigned int *)a1 + 97) )
        ProgrammedWakeTimeAc = a1[24] + *((unsigned int *)a1 + 97);
      ProgrammedWakeTimeDc = qword_140C232E0;
      if( qword_140C232E0 && qword_140C232E0 < a1[24] + *((unsigned int *)a1 + 97) )
        ProgrammedWakeTimeDc = a1[24] + *((unsigned int *)a1 + 97);
      v53 = qword_140C232D8[0];
      if( (unsigned __int64)(qword_140C232D8[0] - 1) <= 0xFFFFFFFFFFFFFFFBui64 )
        v53 = *(int *)(qword_140C232D8[0] + 8);
      a1[45] = v53;
      v54 = qword_140C232F0;
      if( (unsigned __int64)(qword_140C232F0 - 1) <= 0xFFFFFFFFFFFFFFFBui64 )
        v54 = *(int *)(qword_140C232F0 + 8);
      a1[46] = v54;
      *(&stru_140C23628 + 37) = KeQueryPerformanceCounter(0i64);
      ExAcquireTimeRefreshLock(1u);
      ExUpdateSystemTimeFromCmos(1u, 1ui64);
      ExReleaseTimeRefreshLock();
      ((void(__fastcall *)(UINT64, UINT64))off_140C005C0)(ProgrammedWakeTimeAc, ProgrammedWakeTimeDc);
      PopBootStatCheckpointAvailable = 0;
      PpmCheckPausePpmEngineForSx();
      PopSetDevicesSystemState();
      *((_BYTE *)a1 + 112) = 1;
      PopNewWakeInfo();
      a1[43] = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
      *((_DWORD *)a1 + 37) = *(&stru_140C23628 + 441);
      KeSetEvent((PRKEVENT)(a1 + 36), 0, 1u);
      KeWaitForSingleObject((UINT64)(a1 + 39), 0, 0, 0, 0i64);
      BugCheckParameter4 = 0i64;
      *((_DWORD *)a1 + 26) = *((_DWORD *)a1 + 85);
      PopSetPowerActionWatchdogState(2ui64, v55);
      v56 = SystemState;
      if( PoResumeFromHibernate )
        v56 = EffectiveState;
      WakeFromState = v56;
      if( (a1[1] & 8) != 0 )
      {
        *((_DWORD *)a1 + 11) = 6;
      }
      else
      {
        *((_DWORD *)a1 + 11) = SystemState;
        TargetState = SystemState;
      }
      v57 = WakeFromState;
      v58 = TargetState;
      WakeInfoDcb = (_DIAGNOSTIC_BUFFER *)a1[46];
      v59 = (_DIAGNOSTIC_BUFFER *)a1[45];
      *((_DWORD *)a1 + 10) = WakeFromState;
      PopDiagTracePostSleepNotification(
        v58,
        EffectiveState,
        v57,
        ProgrammedWakeTimeAc,
        ProgrammedWakeTimeDc,
        v59,
        WakeInfoDcb);
      if( KeMtrrComparisonFailed )
        PopDiagTraceMtrrError();
      if( *((int *)a1 + 26) < 0 && SystemState == PowerSystemHibernate )
      {
        DestinationString = 0i64;
        StringCchPrintfW((WCHAR *)&PopIrpWorkerControlEvent + 768, 0x80ui64, (WCHAR *)L"0x%x");
        RtlInitUnicodeString(&DestinationString, (PCWSTR)&PopIrpWorkerControlEvent + 768);
        IoRaiseInformationalHardError(3221226513i64, (INT8 **)&DestinationString, 0i64);
        PopDiagTraceHibernateErrorStatus(*((unsigned int *)a1 + 26));
      }
      goto LABEL_178;
    }
    break;
  }
  PopFxPrepareDevicesForShutdown();
  IoFreePoDeviceNotifyList((PO_DEVICE_NOTIFY_ORDER *)((char *)qword_140C23298 + 48));
  if( SleepReason == PolicyDeviceBattery )
    PopCriticalShutdownInProgress = 1;
  PopTransitionCheckpoint(8i64);
  if( PsGetCurrentProcess() == (_KPROCESS *)PsInitialSystemProcess )
    PopGracefulShutdown(0i64);
  *(&PopIrpWorkerControlEvent + 231) = 0i64;
  *(&PopIrpWorkerControlEvent + 230) = PopGracefulShutdown;
  *(&PopIrpWorkerControlEvent + 228) = 0i64;
  ExQueueWorkItem((PWORK_QUEUE_ITEM)&PopIrpWorkerControlEvent + 57, CriticalWorkQueue);
  KeSuspendThread(KeGetCurrentThread());
}

Referenced by:

NtSetSystemPowerState