EtwpLogSystemEventUnsafe

void __fastcall EtwpLogSystemEventUnsafe(
        __int64 a1,
        __int64 a2,
        __int64 a3,
        unsigned int a4,
        unsigned int a5,
        __int16 a6,
        unsigned int a7){
  unsigned int v9; 
  UINT64 *v10; 
  INT64 v11; 
  int v12; 
  _DWORD *v13; 
  __int64 v14; 
  INT64 v15; 
  int v16; 
  struct _RTL_SPLAY_LINKS *v17; 
  int v18; 
  __int64 v19; 
  int v20; 
  __int16 v21; 
  unsigned int v22; 
  __int64 v23; 
  __int64 v24; 
  char a3a[4]; 
  int v26; 
  __int64 a2a; 
  int v28; 
  UINT64 *v29; 
  INT64 v30; 
  UINT64 *v31; 
  INT64 a1a[2]; 
  __int64 v33; 
  *(_OWORD *)a1a = 0i64;
  v33 = 0i64;
  v9 = 0;
  a3a[0] = 0;
  a2a = 0i64;
  v10 = (UINT64 *)EtwpOpenLogger(a4, a1, 1, a3a);
  v29 = v10;
  v11 = (INT64)v10;
  v31 = v10;
  if( v10 )
  {
    v12 = 0;
    v26 = 0;
    if( a5 )
    {
      v13 = (_DWORD *)(a2 + 8);
      v14 = a5;
      do
      {
        v12 += *v13;
        v13 += 4;
        --v14;
      }
      while( v14 );
      v26 = v12;
    }
    v15 = EtwpReserveTraceBuffer(v10, (unsigned int)(v12 + 32), (INT64)a1a, &a2a, a7);
    if( v15 )
    {
      v16 = -1073676288;
      if( (a7 & 0xC0000000) != 0x80000000 )
        v16 = -1073610752;
      *(_DWORD *)v15 = (unsigned __int8)a7 | v16;
      *(_QWORD *)(v15 + 16) = a2a;
      *(_WORD *)(v15 + 4) = v12 + 32;
      *(_WORD *)(v15 + 6) = a6;
      *(_DWORD *)(v15 + 8) = *(_DWORD *)(a3 + 1152);
      *(_DWORD *)(v15 + 12) = *(_DWORD *)(a3 + 1144);
      *(_DWORD *)(v15 + 24) = *(_DWORD *)(a3 + 652);
      *(_DWORD *)(v15 + 28) = *(_DWORD *)(a3 + 732);
      v17 = (struct _RTL_SPLAY_LINKS *)(v15 + 32);
      v30 = v15 + 32;
      if( v15 != -32 )
      {
        EtwpCopyEventData(v17, (PRTL_SPLAY_LINKS *)a2);
        v28 = v18;
        v19 = (__int64)v29;
        if( v18 )
        {
          memset((INT64)v17, 0i64);
          EtwpUpdateEventsLostCount(v11);
        }
        if( (*(_DWORD *)(v11 + 12) & 0x80000) != 0
          && (!(_BYTE)KdDebuggerNotPresent && !KdPitchDebugger || KdEventLoggingPresent) )
        {
          EtwpSendTraceEvent(v11, (INT64)a1a);
        }
        if( *(_QWORD *)(v11 + 1272) )
          EtwpInvokeEventCallback(v11, (INT64)a1a, 0i64);
        EtwpReleaseTraceBuffer(a1a);
        v20 = *(_DWORD *)(v11 + 832);
        if( (v20 & 0x80u) != 0 )
        {
          v21 = a6;
          if( _bittest(*(const signed __int32 **)(v11 + 984), a6 & 0x1FFF) )
          {
            EtwpStackTraceDispatcher(v11, &a2a, a3, a7);
            v20 = *(_DWORD *)(v19 + 832);
          }
        }
        else
        {
          v21 = a6;
        }
        if( (v20 & 0x8000) != 0 )
        {
          v22 = 0;
          if( *(_DWORD *)(*(_QWORD *)(v11 + 1008) + 8i64) )
          {
            while( 1 )
            {
              v23 = *(_QWORD *)(v11 + 1008);
              if( *(_WORD *)(v23 + 2i64 * v22 + 12) == v21 )
                break;
              if( ++v22 >= *(_DWORD *)(v23 + 8) )
                goto LABEL_18;
            }
            EtwpTraceLastBranchRecord((UINT64 *)v11, &a2a, (_ETHREAD *)a3, a7);
          }
        }
LABEL_18:
        if( (*(_DWORD *)(v11 + 832) & 0x4000000) != 0 && *(_DWORD *)(*(_QWORD *)(v11 + 1016) + 24i64) )
        {
          while( 1 )
          {
            v24 = *(_QWORD *)(v11 + 1016);
            if( *(_WORD *)(v24 + 2i64 * v9 + 28) == v21 )
              break;
            if( ++v9 >= *(_DWORD *)(v24 + 24) )
              goto LABEL_19;
          }
          EtwpTraceProcessorTrace((VOID **)v11, (UINT64)&a2a);
        }
      }
    }
LABEL_19:
    EtwpCloseLogger(a4, a1, a3a[0]);
  }
}

Referenced by:

EtwpLogRegistryEvent
EtwpSetMark
EtwpTraceThreadRundown
NtTraceEvent