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