TlgRegisterAggregateProviderEx

NTSTATUS __stdcall TlgRegisterAggregateProviderEx(PVOID CallbackContext){
  __int64 v1; 
  __int64 v2; 
  __int64 v3; 
  __int64 v5; 
  _TLG_AGGR_SESSION *TlgAggregateSession; 
  _TLG_AGGR_SESSION *v7; 
  int v8; 
  _BYTE *v9; 
  _BYTE *v10; 
  __int64 v11; 
  _TLG_AGGR_SESSION **v12; 
  char v13; 

  v3 = v1;
  v5 = v2;
  TlgAggregateSession = CreateTlgAggregateSession(0);
  v7 = TlgAggregateSession;
  if( !TlgAggregateSession )
    return TraceLoggingRegisterEx_EtwRegister_EtwSetInformation(CallbackContext);
  *((_QWORD *)TlgAggregateSession + 41) = v3;
  *((_QWORD *)TlgAggregateSession + 42) = v5;
  *((_QWORD *)TlgAggregateSession + 43) = CallbackContext;
  *((_BYTE *)TlgAggregateSession + 373) = 0;
  TlgAggregateSession[92] = ComputeFlushPeriod(TlgAggregateSession);
  v8 = TraceLoggingRegisterEx_EtwRegister_EtwSetInformation(CallbackContext);
  if( v8 < 0 )
  {
    DestroyAggregateSession(v7);
    return v8;
  }
  else
  {
    v9 = KeAbPreAcquire((char *)&WheapErrorSourceTable + 1040, 0i64, 0i64);
    v10 = v9;
    if( _interlockedbittestandset64((volatile signed __int32 *)&WheapErrorSourceTable + 260, 0i64) )
      ExfAcquirePushLockExclusiveEx(
        (_EX_PUSH_LOCK *)&WheapErrorSourceTable + 130,
        v9,
        (char *)&WheapErrorSourceTable + 1040);
    if( v10 )
      v10[26] |= 1u;
    v11 = *(&stru_140CF2E80 + 804);
    if( !*(&stru_140CF2E80 + 804) )
    {
      TraceLoggingRegisterEx_EtwRegister_EtwSetInformation(&dword_140C04750);
      v11 = *(&stru_140CF2E80 + 804);
    }
    v12 = (_TLG_AGGR_SESSION **)((char *)&stru_140CF2E80 + 6432);
    while( v11 )
    {
      if( *(PVOID *)(v11 + 344) == CallbackContext )
        goto LABEL_14;
      v12 = (_TLG_AGGR_SESSION **)(v11 + 352);
      v11 = *(_QWORD *)(v11 + 352);
    }
    *v12 = v7;
LABEL_14:
    v13 = _InterlockedExchangeAdd64((_QWORD *)&WheapErrorSourceTable + 130, 0xFFFFFFFFFFFFFFFFui64);
    if( (v13 & 2) != 0 && (v13 & 4) == 0 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&WheapErrorSourceTable + 130);
    KeAbPostRelease((char *)&WheapErrorSourceTable + 1040);
    return 0;
  }
}

Referenced by:

CmpRegisterTraceLoggingProvider
EtwpInitialize
MiInitSystem
TlgRegisterAggregateProvider