PopFxResidentTimeoutRoutine

VOID __stdcall PopFxResidentTimeoutRoutine(PVOID Parameter){
  _ETHREAD *CurrentThread; 
  __int64 v2; 
  ULONG_PTR v3; 
  __int64 v4; 
  unsigned int i; 
  __int64 v6; 
  INT64 CurrentQpc; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockSharedEx((UINT64)&PopFxDeviceListLock, 0i64);
  if( (ULONG_PTR *)PopFxDeviceList != &PopFxDeviceList )
  {
    LODWORD(v2) = RtlGetInterruptTimePrecise(&CurrentQpc);
    v3 = PopFxDeviceList;
    v4 = v2;
    while( (ULONG_PTR *)v3 != &PopFxDeviceList )
    {
      for( i = 0; i < *(_DWORD *)(v3 + 828); ++i )
      {
        v6 = *(_QWORD *)(*(_QWORD *)(v3 + 832) + 8i64 * i);
        if( *(int *)(v6 + 96) > 0
          && v4 - *(_QWORD *)(v6 + 144) >= (unsigned __int64)(unsigned int)PopFxActiveIdleThreshold )
        {
          _InterlockedAdd((volatile signed __int32 *)(v6 + 96), 0xFFFFFFFF);
          _InterlockedAdd(&PopFxResidentComponentCount, 0xFFFFFFFF);
          PopFxIdleComponent(v3, i, 1, 0i64);
        }
      }
      v3 = *(_QWORD *)v3;
    }
  }
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxDeviceListLock, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&PopFxDeviceListLock);
  KeAbPostRelease(&PopFxDeviceListLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  PopFxArmResidentTimer(1u);
}

Referenced by:

No references.