EtwpTracingProvEnableCallback
VOID __fastcall EtwpTracingProvEnableCallback(
const _GUID *SourceId,
UINT64 ControlCode,
UINT8 Level,
UINT64 MatchAnyKeyword,
UINT64 MatchAllKeyword,
_EVENT_FILTER_DESCRIPTOR *FilterData,
VOID *CallbackContext){
_ETW_SILODRIVERSTATE *v7;
char v8;
unsigned int i;
volatile INT64 *j;
_WMI_LOGGER_CONTEXT *v11;
UINT64 v12;
unsigned int *v13;
_ETHREAD *CurrentThread;
EVENT_DESCRIPTOR *v15;
INT64 v16;
EVENT_DESCRIPTOR *v17;
unsigned int v18;
_DWORD *v19;
INT64 v20;
volatile INT64 *NextGuidEntry;
INT64 v22;
volatile INT64 *k;
__int64 v24;
_ETHREAD *v25;
EVENT_DESCRIPTOR *v26;
INT64 v27;
EVENT_DESCRIPTOR *v28;
unsigned int v29;
_DWORD *v30;
INT64 v31;
volatile INT64 *m;
INT64 v33;
volatile INT64 *v34;
volatile INT64 *v35;
if( (_DWORD)ControlCode == 2 )
{
v7 = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
v8 = 0;
for( i = 0; i < *(_DWORD *)(EtwpHostSiloState + 16); ++i )
{
v11 = EtwpAcquireLoggerContextByLoggerId(v7, i, 0);
v13 = (unsigned int *)v11;
if( v11 )
{
EtwpEventWriteTemplateSession(v12, &ETW_EVENT_SESSION_INFO, v11);
EtwpReleaseLoggerContext(v13, 0);
}
v7 = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
}
for( j = 0i64; ; j = (volatile INT64 *)v22 )
{
NextGuidEntry = EtwpGetNextGuidEntry((INT64)v7, j, 2i64);
v22 = (INT64)NextGuidEntry;
if( !NextGuidEntry )
break;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)(NextGuidEntry + 51), 0i64);
*(_QWORD *)(v22 + 416) = KeGetCurrentThread();
if( EtwEventEnabled(EtwpEventTracingProvRegHandle, (EVENT_DESCRIPTOR *)&ETW_EVENT_GROUP_ENTRY_INFO, v15) )
EtwpEventWriteGuidEntry(v16, (EVENT_DESCRIPTOR *)&ETW_EVENT_GROUP_ENTRY_INFO, v22);
v18 = 0;
v19 = (_DWORD *)(v22 + 128);
do
{
if( *v19 && EtwEventEnabled(EtwpEventTracingProvRegHandle, (EVENT_DESCRIPTOR *)&ETW_EVENT_ENABLE_INFO, v17) )
EtwpEventWriteEnableInfo(v20, v22, v18);
++v18;
v19 += 8;
}
while( v18 < 8 );
*(_QWORD *)(v22 + 416) = 0i64;
ExReleasePushLockEx(v22 + 408, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
v7 = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
}
for( k = 0i64; ; k = v35 )
{
v34 = EtwpGetNextGuidEntry(EtwpHostSiloState, k, 0i64);
v35 = v34;
if( !v34 )
break;
v24 = *((_QWORD *)v34 + 5) - *(_QWORD *)&EventTracingProvGuid.Data1;
if( !v24 )
v24 = *((_QWORD *)v35 + 6) - *(_QWORD *)EventTracingProvGuid.Data4;
if( v24 )
{
v25 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v25 + 242);
ExAcquirePushLockExclusiveEx((UINT64)(v35 + 51), 0i64);
v8 = 1;
*((_QWORD *)v35 + 52) = KeGetCurrentThread();
}
if( EtwEventEnabled(EtwpEventTracingProvRegHandle, (EVENT_DESCRIPTOR *)&ETW_EVENT_GUID_ENTRY_INFO, v26) )
EtwpEventWriteGuidEntry(v27, (EVENT_DESCRIPTOR *)&ETW_EVENT_GUID_ENTRY_INFO, (INT64)v35);
v29 = 0;
v30 = v35 + 16;
do
{
if( *v30 && EtwEventEnabled(EtwpEventTracingProvRegHandle, (EVENT_DESCRIPTOR *)&ETW_EVENT_ENABLE_INFO, v28) )
EtwpEventWriteEnableInfo(v31, (INT64)v35, v29);
++v29;
v30 += 8;
}
while( v29 < 8 );
for( m = (volatile INT64 *)*((_QWORD *)v35 + 7); m != v35 + 7; m = (volatile INT64 *)*m )
{
if( EtwEventEnabled(EtwpEventTracingProvRegHandle, (EVENT_DESCRIPTOR *)&ETW_EVENT_REG_ENTRY_INFO, v28) )
EtwpEventWriteRegEntry(v33, (INT64)m);
}
if( v8 )
{
*((_QWORD *)v35 + 52) = 0i64;
ExReleasePushLockEx((UINT64)(v35 + 51), 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
v8 = 0;
}
}
}
}Referenced by:
No references.