PopDiagTraceFxRundown

VOID __stdcall PopDiagTraceFxRundown(){
  _ETHREAD *CurrentThread; 
  UINT64 *i; 
  EVENT_DESCRIPTOR *v2; 
  __int64 j; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockSharedEx((UINT64)&PopFxPluginLock, 0i64);
  for( i = (UINT64 *)PopFxPluginList; i != &PopFxPluginList; i = (UINT64 *)*i )
    PopDiagTraceFxPluginRegistration(i, i[3], 1u);
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxPluginLock, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&PopFxPluginLock);
  KeAbPostRelease(&PopFxPluginLock);
  ExAcquirePushLockSharedEx((UINT64)&PopFxDeviceListLock, 0i64);
  for( j = PopFxDeviceList; (ULONG_PTR *)j != &PopFxDeviceList; j = *(_QWORD *)j )
  {
    if( *(_QWORD *)(j + 48) )
    {
      PopFxTraceDeviceRegistration(j, 1, v2);
      PopDiagTraceDeviceVerboseRundown((_POP_FX_DEVICE *)j);
    }
  }
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxDeviceListLock, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&PopFxDeviceListLock);
  KeAbPostRelease(&PopFxDeviceListLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

PopDiagTraceControlCallback