EtwWmitraceWorker

VOID __stdcall EtwWmitraceWorker(){
  _ETW_SILODRIVERSTATE *v0; 
  NTSTATUS SiloBySessionId; 
  unsigned int v2; 
  NTSTATUS Trace; 
  NTSTATUS v4; 
  NTSTATUS updated; 
  NTSTATUS v6; 
  NTSTATUS started; 
  UINT64 EnableProperty; 
  _EJOB *ServerSilo; 
  _STRING ServerSilo_8; 
  _UNICODE_STRING LoggerInfo[11]; 

  memset(LoggerInfo, 0i64, sizeof(LoggerInfo));
  ServerSilo = 0i64;
  ServerSilo_8 = 0i64;
  if( *(&ExBootDevicesRemovedEvent + 657) )
  {
    SiloBySessionId = PsGetSiloBySessionId(
                        *(&ExBootDevicesRemovedEvent + 657),
                        (PFLUSH_ADAPTER_BUFFERS_EX *)&ServerSilo);
    if( SiloBySessionId < 0 || !ServerSilo )
      goto LABEL_33;
    v0 = *(_ETW_SILODRIVERSTATE **)(*((_QWORD *)ServerSilo + 159) + 864i64);
  }
  else
  {
    v0 = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
  }
  if( *(&ExBootDevicesRemovedEvent + 3016) == 1 )
  {
    EtwpPrepareWmitraceLoggerInfo((_WMI_LOGGER_INFORMATION *)LoggerInfo);
    RtlInitAnsiString(&ServerSilo_8, (PCSZ)&ExBootDevicesRemovedEvent + 2632);
    RtlAnsiStringToUnicodeString(&LoggerInfo[9], &ServerSilo_8, 1u);
    *(_QWORD *)(&LoggerInfo[3].MaximumLength + 1) = *(&ExBootDevicesRemovedEvent + 354);
    *(_DWORD *)&LoggerInfo[3].Length = *(&ExBootDevicesRemovedEvent + 710);
    *(_DWORD *)&LoggerInfo[4].Length = *(&ExBootDevicesRemovedEvent + 711);
    *(_DWORD *)(&LoggerInfo[4].MaximumLength + 1) = *(&ExBootDevicesRemovedEvent + 712);
    HIDWORD(LoggerInfo[3].Buffer) = *(&ExBootDevicesRemovedEvent + 707);
    if( *(&ExBootDevicesRemovedEvent + 2697) )
    {
      RtlInitAnsiString(&ServerSilo_8, (PCSZ)&ExBootDevicesRemovedEvent + 2697);
      RtlAnsiStringToUnicodeString(&LoggerInfo[8], &ServerSilo_8, 1u);
    }
    started = EtwpStartTrace(v0, (_WMI_LOGGER_INFORMATION *)LoggerInfo);
    SiloBySessionId = started;
    if( started >= 0 )
      *(&ExBootDevicesRemovedEvent + 656) = LOWORD(LoggerInfo[0].Buffer);
    else
      DbgPrintEx(0x17u, 3u, "wmitrace: EtwpStartTrace failed: 0x%x\n", (unsigned int)started);
    RtlFreeAnsiString(&LoggerInfo[9]);
    if( *(&ExBootDevicesRemovedEvent + 2697) )
      RtlFreeAnsiString(&LoggerInfo[8]);
  }
  else
  {
    v2 = 2;
    if( *(&ExBootDevicesRemovedEvent + 3016) == 2 )
    {
      EtwpPrepareWmitraceLoggerInfo((_WMI_LOGGER_INFORMATION *)LoggerInfo);
      Trace = EtwpQueryTrace(v0, (_WMI_LOGGER_INFORMATION *)LoggerInfo);
      SiloBySessionId = Trace;
      if( Trace < 0 )
        goto LABEL_22;
      v6 = EtwpStopTrace(v0, (_WMI_LOGGER_INFORMATION *)LoggerInfo, 0);
      SiloBySessionId = v6;
      if( v6 < 0 )
        DbgPrintEx(0x17u, 3u, "wmitrace: EtwpStopTrace failed: 0x%x\n", (unsigned int)v6);
    }
    else
    {
      if( *(&ExBootDevicesRemovedEvent + 3016) != 3 )
      {
        if( (unsigned __int8)(*(&ExBootDevicesRemovedEvent + 3016) - 4) > 2u )
        {
          SiloBySessionId = -1073741637;
          DbgPrintEx(0x17u, 3u, "Unknown command passed to EtwWmitraceWorker.\n");
          goto LABEL_33;
        }
        EtwpPrepareWmitraceLoggerInfo((_WMI_LOGGER_INFORMATION *)LoggerInfo);
        Trace = EtwpQueryTrace(v0, (_WMI_LOGGER_INFORMATION *)LoggerInfo);
        SiloBySessionId = Trace;
        if( Trace >= 0 )
        {
          if( *(&ExBootDevicesRemovedEvent + 3016) == 4 )
          {
            v2 = 1;
          }
          else if( *(&ExBootDevicesRemovedEvent + 3016) == 5 )
          {
            v2 = 0;
          }
          LODWORD(EnableProperty) = *(&ExBootDevicesRemovedEvent + 662);
          v4 = EtwEnableTrace(
                 (const _GUID *)((char *)&ExBootDevicesRemovedEvent + 2652),
                 0i64,
                 *(&ExBootDevicesRemovedEvent + 656),
                 v2,
                 *(&ExBootDevicesRemovedEvent + 2668),
                 *(&ExBootDevicesRemovedEvent + 329),
                 *(&ExBootDevicesRemovedEvent + 330),
                 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)Trace);
        goto LABEL_33;
      }
      EtwpPrepareWmitraceLoggerInfo((_WMI_LOGGER_INFORMATION *)LoggerInfo);
      Trace = EtwpQueryTrace(v0, (_WMI_LOGGER_INFORMATION *)LoggerInfo);
      SiloBySessionId = Trace;
      if( Trace < 0 )
        goto LABEL_22;
      *(_DWORD *)&LoggerInfo[4].Length |= 0x80000u;
      updated = EtwpUpdateTrace(v0, (_WMI_LOGGER_INFORMATION *)LoggerInfo);
      SiloBySessionId = updated;
      if( updated < 0 )
        DbgPrintEx(0x17u, 3u, "wmitrace: failed to enable KD_FILTER 0x%x\n", (unsigned int)updated);
    }
  }
LABEL_33:
  *(&ExBootDevicesRemovedEvent + 714) = SiloBySessionId;
  *(&ExBootDevicesRemovedEvent + 3016) = 0;
}

Referenced by:

ExpDebuggerWorker