TlgRegisterAggregateProviderEx
INT64 __stdcall TlgRegisterAggregateProviderEx(PVOID CallbackContext){
__int64 v1;
__int64 v2;
__int64 v3;
__int64 v5;
CHAR *TlgAggregateSession;
CHAR *v7;
int v8;
_BYTE *v9;
_BYTE *v10;
INT64 v11;
INT64 *v12;
char v13;
v3 = v1;
v5 = v2;
TlgAggregateSession = CreateTlgAggregateSession(0, 1);
v7 = TlgAggregateSession;
if( !TlgAggregateSession )
return TraceLoggingRegisterEx_EtwRegister_EtwSetInformation(CallbackContext);
*((_QWORD *)TlgAggregateSession + 41) = v3;
*((_QWORD *)TlgAggregateSession + 42) = v5;
*((_QWORD *)TlgAggregateSession + 43) = CallbackContext;
TlgAggregateSession[373] = 0;
*((_DWORD *)TlgAggregateSession + 92) = ComputeFlushPeriod((UINT64)TlgAggregateSession);
v8 = TraceLoggingRegisterEx_EtwRegister_EtwSetInformation(CallbackContext);
if( v8 < 0 )
{
DestroyAggregateSession(v7);
return(unsigned int)v8;
}
else
{
LODWORD(v9) = KeAbPreAcquire(&qword_140CDB268, 0i64, 0i64);
v10 = v9;
if( _interlockedbittestandset64((volatile signed __int32 *)&qword_140CDB268, 0i64) )
ExfAcquirePushLockExclusiveEx(&qword_140CDB268, v9, &qword_140CDB268);
if( v10 )
v10[26] |= 1u;
v11 = qword_140CF47A0;
if( !qword_140CF47A0 )
{
TraceLoggingRegisterEx_EtwRegister_EtwSetInformation(&dword_140C04750);
v11 = qword_140CF47A0;
}
v12 = &qword_140CF47A0;
while( v11 )
{
if( *(PVOID *)(v11 + 344) == CallbackContext )
goto LABEL_14;
v12 = (INT64 *)(v11 + 352);
v11 = *(_QWORD *)(v11 + 352);
}
*v12 = (INT64)v7;
LABEL_14:
v13 = _InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140CDB268, 0xFFFFFFFFFFFFFFFFui64);
if( (v13 & 2) != 0 && (v13 & 4) == 0 )
ExfTryToWakePushLock((volatile INT64 *)&qword_140CDB268);
KeAbPostRelease(&qword_140CDB268);
return 0i64;
}
}Referenced by:
CmpRegisterTraceLoggingProvider
EtwpInitialize
MiInitSystem
TlgRegisterAggregateProvider