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.