PopFxUpdateDeviceIdleTimer
void __fastcall PopFxUpdateDeviceIdleTimer(__int64 a1){
signed __int32 v2;
signed __int32 v3;
_m_prefetchw((const void *)(a1 + 32));
v2 = *(_DWORD *)(a1 + 32);
do
{
v3 = v2;
v2 = _InterlockedCompareExchange((volatile signed __int32 *)(a1 + 32), v2, v2);
}
while( v3 != v2 );
if( (v2 & 4) != 0 )
{
if( KeCancelTimer((PKTIMER)(a1 + 368)) )
{
_InterlockedAnd((volatile signed __int32 *)(a1 + 32), 0xFFFFFFFB);
if( !PopFxScheduleDeviceIdleTimer(a1) )
{
PopDiagTraceFxDevicePowerRequirement(*(PVOID *)(a1 + 48), 0, 0);
(*(void(__fastcall **)(_QWORD))(a1 + 144))(*(_QWORD *)(a1 + 192));
_InterlockedOr((volatile signed __int32 *)(a1 + 32), 0x40u);
if( _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 40), 0xFFFFFFFF) != 1 )
PopFxAddLogEntry(*(_QWORD *)(a1 + 48), 0, 17, 0i64);
}
}
}
}Referenced by:
PoFxSetDeviceIdleTimeout
PopFxProcessWork