PopFxIdleDevicesFromSx

VOID __stdcall PopFxIdleDevicesFromSx(UINT64 MaxLevel){
  _ETHREAD *CurrentThread; 
  ULONG_PTR i; 
  __int64 v3; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockSharedEx((UINT64)&PopFxDeviceListLock, 0i64);
  for( i = PopFxDeviceList; (ULONG_PTR *)i != &PopFxDeviceList; i = *(_QWORD *)i )
  {
    v3 = *(_QWORD *)(i + 48);
    if( v3 && (*(_DWORD *)(i + 824) & 1) == 0 && !*(_BYTE *)(v3 + 216) )
    {
      PoFxIdleDevice(*(DEVICE_OBJECT **)(v3 + 32));
      _InterlockedAnd((volatile signed __int32 *)(v3 + 296), 0xFFFFEFFF);
    }
  }
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxDeviceListLock, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&PopFxDeviceListLock);
  KeAbPostRelease(&PopFxDeviceListLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

PoBroadcastSystemState