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