PopDeepSleepSetDisengageReason

VOID __stdcall PopDeepSleepSetDisengageReason(POP_DEEP_SLEEP_DISENGAGE_REASON Reason){
  unsigned __int8 v2; 
  void *v3; 
  int v4; 
  unsigned __int64 v5; 
  _IRP *v6; 

  v2 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&PopIrpWorkerControlEvent + 27);
  v4 = *(&PopIrpWorkerControlEvent + 52);
  v5 = v2;
  v6 = (_IRP *)(*(&PopIrpWorkerControlEvent + 52) | (unsigned int)(1 << Reason));
  *(&PopIrpWorkerControlEvent + 52) = (_DWORD)v6;
  if( v4 != (_DWORD)v6 )
  {
    PopDiagTraceSetDeepSleepConstraint((_DEVICE_OBJECT *)(unsigned int)Reason, v6, v3);
    PopDeepSleepResiliencyPhaseAccountingUpdate((PVOID)(unsigned int)Reason);
    if( !v4 )
    {
      if( PopIsForceIdleSet )
      {
        KeClearForceIdle();
        PopIsForceIdleSet = 0;
      }
      if( !*(&PopIrpWorkerControlEvent + 144) )
      {
        *(&PopIrpWorkerControlEvent + 144) = 1;
        ExQueueWorkItem((PWORK_QUEUE_ITEM)&PopIrpWorkerControlEvent + 5, DelayedWorkQueue);
      }
    }
  }
  KxReleaseSpinLock((UINT64 *)&PopIrpWorkerControlEvent + 27);
  __writecr8(v5);
}

Referenced by:

PopCheckResiliencyScenarios
PopDirectedDripsIdleResiliencyCallback
PopEnforceResiliencyScenarios
PopFxPlatformStateAvailable
PopIdleAoAcDozeS4TimerCallback
PopIncrementPowerSettingPendingUpdates
PopPowerInformationInternal
PopQueueQuerySetIrp
PopSetPowerActionState