EtwpFailLogging

void __fastcall EtwpFailLogging(
        UINT8 a1,
        UINT64 a2,
        __int64 a3,
        __int64 a4,
        unsigned __int8 a5,
        int a6,
        __int16 *a7,
        char a8){
  __int64 v9; 
  UINT8 v10; 
  __int64 v13; 
  _WMI_LOGGER_CONTEXT *v14; 
  unsigned __int8 v15; 
  bool i; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  __int64 v20; 
  __int64 v21; 

  v9 = *(_QWORD *)(a3 + 392);
  v10 = a1;
  if( *(_DWORD *)(a4 + 384) )
  {
    v13 = 0i64;
    do
    {
      v14 = *(_WMI_LOGGER_CONTEXT **)(a4 + 48 * v13);
      if( (v14->LoggerMode & 0x8000000) == 0 )
      {
        **(_DWORD **)(a4 + 48 * v13 + 8) = v14->ErrorMarker | **(_DWORD **)(a4 + 48 * v13 + 8) & v14->SizeMask;
        EtwpUpdateEventsLostCount(v14);
        if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_LOST_EVENT) )
          EtwpTraceLostEvent((_QWORD *)(a3 + 40), a7, &v14->LoggerName.Length, a6);
      }
      EtwpReleaseTraceBuffer((_ETW_BUFFER_HANDLE *)(a4 + 16 + 48 * v13));
      if( a8 )
        ExReleaseRundownProtectionCacheAwareEx(*(_QWORD *)(*(_QWORD *)(v9 + 448) + 8i64 * v14->LoggerId), 1i64);
      v13 = (unsigned int)(v13 + 1);
    }
    while( (unsigned int)v13 < *(_DWORD *)(a4 + 384) );
    v10 = a1;
  }
  v15 = a5;
  for( i = !_BitScanForward((unsigned int *)&v17, a5); !i; i = !_BitScanForward((unsigned int *)&v17, v15) )
  {
    v15 &= v15 - 1;
    if( EtwpLevelKeywordEnabled((_TRACE_ENABLE_INFO *)(a3 + 32 * (v17 + 4)), v10, a2) )
    {
      v19 = *(unsigned __int16 *)(v18 + 6);
      v20 = v19;
      if( !a8 || ExAcquireRundownProtectionCacheAwareEx(*(_QWORD *)(*(_QWORD *)(v9 + 448) + 8 * v19), 1i64) )
      {
        if( (unsigned int)v19 >= *(_DWORD *)(v9 + 16) )
          v21 = 1i64;
        else
          v21 = *(_QWORD *)(*(_QWORD *)(v9 + 456) + 8 * v19);
        if( (v21 & 1) == 0 )
        {
          EtwpUpdateEventsLostCount((_WMI_LOGGER_CONTEXT *)v21);
          if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_LOST_EVENT) )
            EtwpTraceLostEvent((_QWORD *)(a3 + 40), a7, (unsigned __int16 *)(v21 + 152), a6);
        }
        if( a8 )
          ExReleaseRundownProtectionCacheAwareEx(*(_QWORD *)(*(_QWORD *)(v9 + 448) + 8 * v20), 1i64);
      }
    }
    v10 = a1;
  }
}

Referenced by:

EtwpEventWriteFull
EtwpWriteUserEvent