PopFxIdleTimeoutDpcRoutine
VOID __stdcall PopFxIdleTimeoutDpcRoutine(
_KDPC *Dpc,
VOID *DeferredContext,
VOID *SystemArgument1,
VOID *SystemArgument2){
UINT64 *v4;
unsigned __int64 v6;
signed __int32 v7;
signed __int32 v8;
v4 = (UINT64 *)((char *)DeferredContext + 360);
v6 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)DeferredContext + 45);
_m_prefetchw((char *)DeferredContext + 32);
v7 = *((_DWORD *)DeferredContext + 8);
do
{
v8 = v7;
v7 = _InterlockedCompareExchange((volatile signed __int32 *)DeferredContext + 8, v7, v7);
}
while( v8 != v7 );
if( (v7 & 4) != 0 )
{
_InterlockedAnd((volatile signed __int32 *)DeferredContext + 8, 0xFFFFFFFB);
if( *((_DWORD *)DeferredContext + 10) != 2 )
PopFxBugCheck(0x613u, (ULONG_PTR)DeferredContext, 0, 0);
PopDiagTraceFxDevicePowerRequirement(*((VOID **)DeferredContext + 6), 0, 0);
(*((void(__fastcall **)(_QWORD))DeferredContext + 18))(*((_QWORD *)DeferredContext + 24));
_InterlockedOr((volatile signed __int32 *)DeferredContext + 8, 0x40u);
if( _InterlockedExchangeAdd((volatile signed __int32 *)DeferredContext + 10, 0xFFFFFFFF) != 1 )
PopFxAddLogEntry(*((_QWORD *)DeferredContext + 6), 0, 17, 0i64);
}
else
{
PopFxDeliverDevicePowerRequired((_POP_FX_DEVICE *)DeferredContext, 0i64);
}
KxReleaseSpinLock(v4);
__writecr8(v6);
}Referenced by:
No references.