EtwWmitraceWorker
VOID __stdcall EtwWmitraceWorker(){
_ETW_SILODRIVERSTATE *EtwSiloState;
int SiloBySessionId;
unsigned int v2;
int v3;
int v4;
int updated;
int v6;
INT8 v7;
INT8 v8;
int started;
UINT64 EnableProperty;
_EJOB *DestinationString;
struct _STRING DestinationString_8;
INT64 result;
unsigned __int16 v14;
int v15;
int v16;
int v17;
int v18;
int v19;
int v20;
UNICODE_STRING v21;
struct _UNICODE_STRING UnicodeString;
memset((INT64)&result, 0i64);
DestinationString = 0i64;
DestinationString_8 = 0i64;
if( (_DWORD)SessionId )
{
SiloBySessionId = PsGetSiloBySessionId((unsigned int)SessionId, &DestinationString);
if( SiloBySessionId < 0 || !DestinationString )
goto LABEL_33;
EtwSiloState = DestinationString->ServerSiloGlobals->EtwSiloState;
}
else
{
EtwSiloState = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
}
if( EtwWmitraceWork == 1 )
{
EtwpPrepareWmitraceLoggerInfo((INT64)&result);
RtlInitAnsiString(&DestinationString_8, (PCSZ)&OrKeywordMask, v7);
RtlAnsiStringToUnicodeString(&UnicodeString, &DestinationString_8, 1u);
v16 = dword_140C19D10;
v17 = dword_140C19D14;
v15 = dword_140C19D18;
v19 = dword_140C19D1C;
v20 = dword_140C19D20;
v18 = dword_140C19D0C;
if( byte_140C19C89 )
{
RtlInitAnsiString(&DestinationString_8, &byte_140C19C89, v8);
RtlAnsiStringToUnicodeString(&v21, &DestinationString_8, 1u);
}
started = EtwpStartTrace((__int64)EtwSiloState, (__int64)&result);
SiloBySessionId = started;
if( started >= 0 )
LODWORD(EtwpWmitraceParams) = v14;
else
DbgPrintEx(0x17u, 3u, "wmitrace: EtwpStartTrace failed: 0x%x\n", (unsigned int)started);
RtlFreeAnsiString(&UnicodeString);
if( byte_140C19C89 )
RtlFreeAnsiString(&v21);
}
else
{
v2 = 2;
if( EtwWmitraceWork == 2 )
{
EtwpPrepareWmitraceLoggerInfo((INT64)&result);
v3 = EtwpQueryTrace((__int64)EtwSiloState, &result);
SiloBySessionId = v3;
if( v3 < 0 )
goto LABEL_22;
v6 = EtwpStopTrace((__int64)EtwSiloState, &result, 0);
SiloBySessionId = v6;
if( v6 < 0 )
DbgPrintEx(0x17u, 3u, "wmitrace: EtwpStopTrace failed: 0x%x\n", (unsigned int)v6);
}
else
{
if( EtwWmitraceWork != 3 )
{
if( (unsigned __int8)(EtwWmitraceWork - 4) > 2u )
{
SiloBySessionId = -1073741637;
DbgPrintEx(0x17u, 3u, "Unknown command passed to EtwWmitraceWorker.\n");
goto LABEL_33;
}
EtwpPrepareWmitraceLoggerInfo((INT64)&result);
v3 = EtwpQueryTrace((__int64)EtwSiloState, &result);
SiloBySessionId = v3;
if( v3 >= 0 )
{
if( EtwWmitraceWork == 4 )
{
v2 = 1;
}
else if( EtwWmitraceWork == 5 )
{
v2 = 0;
}
LODWORD(EnableProperty) = ::EnableProperty;
v4 = EtwEnableTrace(
&stru_140C19C5C,
0i64,
(unsigned int)EtwpWmitraceParams,
v2,
Level,
OrKeywordMask,
AndKeywordMask,
EnableProperty);
SiloBySessionId = v4;
if( v4 < 0 )
DbgPrintEx(0x17u, 3u, "wmitrace: EtwpEnableTraceEx failed: 0x%x\n", (unsigned int)v4);
goto LABEL_33;
}
LABEL_22:
DbgPrintEx(0x17u, 3u, "wmitrace: EtwpQueryTrace failed: 0x%x\n", (unsigned int)v3);
goto LABEL_33;
}
EtwpPrepareWmitraceLoggerInfo((INT64)&result);
v3 = EtwpQueryTrace((__int64)EtwSiloState, &result);
SiloBySessionId = v3;
if( v3 < 0 )
goto LABEL_22;
v19 |= 0x80000u;
updated = EtwpUpdateTrace((__int64)EtwSiloState, (__int64)&result);
SiloBySessionId = updated;
if( updated < 0 )
DbgPrintEx(0x17u, 3u, "wmitrace: failed to enable KD_FILTER 0x%x\n", (unsigned int)updated);
}
}
LABEL_33:
dword_140C19D28 = SiloBySessionId;
EtwWmitraceWork = 0;
}Referenced by:
ExpDebuggerWorker