Kernel‑EventTracing Event ID 2: SensorFramework 0xC0000035 no Windows Server — diagnóstico e correção

Se o Visualizador de Eventos está inundado por “Kernel‑EventTracing / Event ID 2” com a sessão SensorFramework‑{…} e erro 0xC0000035, este guia explica a causa real (colisão de nome em ETW) e traz passos práticos para diagnosticar e corrigir em ambientes Windows e Windows Server.

Índice

Resumo do problema

Em diversos servidores e estações, surge o evento abaixo no canal Microsoft‑Windows‑Kernel‑EventTracing:

Session 'SensorFramework-{d61722cd-d3ce-0897-1694-d917cab88c2a}' failed to start with the following error: 0xC0000035

O código 0xC0000035 corresponde a STATUSOBJECTNAME_COLLISION: existe (ou ficou presa) uma sessão ETW com o mesmo nome, e outro componente tenta iniciá‑la novamente. Resultado: o Windows registra a falha de início, ainda que o sistema siga operando.

Entendendo a causa raiz

ETW (Event Tracing for Windows) é a infraestrutura de rastreamento de baixo nível do Windows. Cada rastreio é uma sessão com um nome. Se duas entidades (serviços, drivers, autologgers, ferramentas) tentam criar uma sessão com o mesmo nome, ocorre colisão. A família “SensorFramework‑{GUID}” é usada pelo subsistema de sensores/localização e, em muitos servidores, não tem utilidade prática — o que a torna candidata a ruído quando algum agente tenta iniciá‑la duas vezes.

Impacto e quando agir

  • Impacto funcional: geralmente inexistente; trata‑se de log de falha ao iniciar uma sessão duplicada.
  • Impacto operacional: poluição de logs, dificultando a observabilidade e auditoria.
  • Quando agir: se os eventos são recorrentes, se há políticas de higiene de logs, ou se sua equipe precisa reduzir “falsos positivos” no monitoramento.

Correção rápida com linha de comando

Primeiro, confirme e encerre a sessão em conflito. Execute um prompt cmd como Administrador:

logman query -ets
logman query "SensorFramework-{d61722cd-d3ce-0897-1694-d917cab88c2a}" -ets
logman stop  "SensorFramework-{d61722cd-d3ce-0897-1694-d917cab88c2a}" -ets

Se o stop liberar a sessão, acompanhe: o evento tende a desaparecer. Se ele voltar após reinicialização ou ciclos de serviço, vá à remediação definitiva abaixo.

Remediação definitiva da origem duplicada

Verificação no PerfMon

A interface do Performance Monitor (perfmon.msc) mostra sessões ETW registradas:

  1. Abrir perfmon.msc.
  2. Navegar até Conjuntos de Coletores de Dados → Sessões de Rastreamento de Eventos e … → Sessões de Rastreamento de Eventos de Inicialização.
  3. Procurar entradas que contenham SensorFramework‑{…}. Desativar a que não deve iniciar.

Autologgers no Registro

Algumas sessões nascem via autologger (antes do logon), configuradas no Registro:

HKLM\SYSTEM\CurrentControlSet\Control\WMI\Autologger\

Procure chaves relacionadas a SensorFramework. Na chave que não deve iniciar, ajuste Start=0. Faça backup e registre a mudança (Change Control) antes de editar.

Política de Grupo para ambientes de servidor

Se você não usa sensores/localização em servidores, desabilitar o subsistema por GPO elimina a origem do problema:

Configuração do Computador → Modelos Administrativos → Componentes do Windows → Localização e Sensores → Desativar sensores.

Após aplicar a GPO, gpupdate /force e reinicie em janela de manutenção, se necessário.

Serviços de sensor

Para servidores que não requerem sensores, você pode desabilitar os serviços relacionados com testes controlados:

sc stop SensrSvc
sc config SensrSvc start= disabled

sc stop SensorDataService
sc config SensorDataService start= disabled 

Valide aplicações dependentes antes de desabilitar qualquer serviço.

Liberação de sessões presas via WMI

Se, mesmo assim, a sessão parecer “grudada”, reinicie o serviço WMI em janela de manutenção:

net stop winmgmt
net start winmgmt

Isso reinicia o gerenciamento WMI; interrompe temporariamente algumas consultas de inventário/monitoramento.

Verificação, evidências e monitoramento

  • Visualizador de Eventos: Applications and Services Logs → Microsoft → Windows → Kernel‑EventTracing. Filtre por Event ID igual a 2 e verifique SessionName contendo SensorFramework‑{…}.
  • Validação final: logman query -ets deve retornar no máximo uma sessão SensorFramework‑{…} ativa (ou nenhuma).

Filtro XML pronto para uso

Para localizar com precisão os eventos do SensorFramework, use este filtro XML no Visualizador de Eventos:

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-Kernel-EventTracing/Admin">
    <Select Path="Microsoft-Windows-Kernel-EventTracing/Admin">
      *[System[(EventID=2)]]
      and
      *[EventData[Data[@Name='SessionName'] and (contains(., 'SensorFramework-'))]]
    </Select>
  </Query>
</QueryList>

Matriz de decisão por cenário

CenárioAção recomendadaObservações
Evento isolado, não recorrenteMonitorar e não agir imediatamenteRuído comum após atualização ou boot
Eventos recorrentes após cada reinícioDesativar origem duplicada (PerfMon, Autologger ou GPO)Caracteriza duas origens iniciando a mesma sessão
Sessão não para com logman stopRevisar serviços de sensor e reiniciar WMI em janelaIndica sessão presa por serviço/driver
Equipamentos com pacote OEM/telemetriaAtualizar/remover agente que cria sessão ETW duplicadaFerramentas de diagnóstico do fabricante costumam criar sessões
Servidor sem uso de sensores/localizaçãoAplicar GPO “Desativar sensores”Reduz ruído e superfície de suporte

Checklist de pós‑mudança

  • Executar logman query -ets e confirmar inexistência de sessões duplicadas SensorFramework‑{…}.
  • Reiniciar o servidor (se aplicável) e revalidar após o boot.
  • Verificar o canal Kernel‑EventTracing por 24–48 horas; zero eventos ID 2 para SensorFramework é o alvo.
  • Documentar a alteração: chave(s) editada(s), GPO aplicada, serviço(s) alterado(s) e evidências.

Script de auditoria em massa em PowerShell

O script abaixo lista, por máquina, sessões ETW SensorFramework‑{…} ativas e, opcionalmente, tenta encerrá‑las. Use com credenciais administrativas e PowerShell Remoting habilitado.

# Requer: PowerShell Remoting habilitado nos alvos
Uso:
.\Audit-SensorFramework.ps1 -Computers SRV1,SRV2 -StopIfFound -CsvOut .\resultado.csv

param(
\[Parameter(Mandatory=\$true)]
\[string\[]]\$Computers,
\[switch]\$StopIfFound,
\[string]\$CsvOut
)

\$results = @()

foreach (\$c in \$Computers) {
try {
\$sessionData = Invoke-Command -ComputerName \$c -ScriptBlock {
\$lines = & logman query -ets
\$names = @()
foreach (\$ln in \$lines) {
if (\$ln -match '^\s\*(SensorFramework-{\[0-9a-fA-F-]+})\b') {
\$names += \$Matches\[1]
}
}
\$names | Select-Object -Unique
}```
if ($sessionData -and $StopIfFound.IsPresent) {
  $stopData = Invoke-Command -ComputerName $c -ScriptBlock {
    param($toStop)
    $out = @()
    foreach ($n in $toStop) {
      $msg = & logman stop $n -ets
      $out += [pscustomobject]@{ Name = $n; Message = ($msg -join ' ') }
    }
    $out
  } -ArgumentList (,$sessionData)
}

if (-not $sessionData) {
  $results += [pscustomobject]@{
    ComputerName = $c
    HasSensorFramework = $false
    Names = ''
    Action = 'None'
  }
} else {
  $results += [pscustomobject]@{
    ComputerName = $c
    HasSensorFramework = $true
    Names = ($sessionData -join ';')
    Action = $(if ($StopIfFound) { 'Stop attempted' } else { 'Audit only' })
  }
}
```
}
catch {
\$results += \[pscustomobject]@{
ComputerName = \$c
HasSensorFramework = \$null
Names = ''
Action = 'Error: ' + $\_.Exception.Message
}
}
}

if (\$CsvOut) { \$results | Export-Csv -NoTypeInformation -Path \$CsvOut }
\$results | Format-Table -AutoSize </code></pre>

<p><em>Dica</em>: para um inventário rápido, você pode alimentar o parâmetro <code>-Computers</code> com a saída de um arquivo: <code>-Computers (Get-Content .\servidores.txt)</code>.</p>

<h2>Boas práticas de governança</h2>
<ul>
  <li><strong>Menos é mais</strong>: se o servidor não usa sensores, desative o recurso via GPO; diminui ruído e possíveis conflitos de sessões.</li>
  <li><strong>Padronize</strong>: inclua a verificação de sessões ETW nos checklists de imagem base e hardening.</li>
  <li><strong>Gerencie agentes</strong>: mantenha telemetrias OEM e ferramentas de diagnóstico atualizadas; verifique se criam ETW duplicadas.</li>
  <li><strong>Documente exceções</strong>: se alguma aplicação precisar de sensores, registre o motivo e a abrangência.</li>
</ul>

<h2>Sinais que apontam para origem específica</h2>
<table>
  <thead>
    <tr>
      <th>Pista</th>
      <th>Interpretação provável</th>
      <th>Onde atuar</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Evento aparece apenas no boot</td>
      <td>Autologger iniciando em paralelo com serviço/driver</td>
      <td>Chaves em <code>Autologger\</code> e serviços de sensor</td>
    </tr>
    <tr>
      <td>Evento aparece em ciclos de inventário</td>
      <td>Agente de inventário/telemetria criando sessão duplicada</td>
      <td>Atualizar ou reconfigurar o agente</td>
    </tr>
    <tr>
      <td><code>logman stop</code> sem efeito imediato</td>
      <td>Serviço reaprendendo a sessão logo após o <em>stop</em></td>
      <td>Desabilitar a origem ou aplicar GPO</td>
    </tr>
  </tbody>
</table>

<h2>Perguntas frequentes</h2>
<p><strong>Limpar o log com wevtutil resolve?</strong><br>
Não. <code>wevtutil</code> lida com canais de log; não cria, para ou gerencia sessões ETW. A colisão de nome continuará ocorrendo até eliminar a origem duplicada.</p>
<p><strong>É seguro desabilitar serviços de sensor em servidores?</strong><br>
Na maioria dos servidores, sim. Em estações e dispositivos com sensores (tablets, laptops com giroscópio/assessor de rotação), avalie impacto antes.</p>
<p><strong>O GUID precisa ser exatamente o mesmo?</strong><br>
Para este caso comum, o padrão é <em>SensorFramework‑{d61722cd‑d3ce‑0897‑1694‑d917cab88c2a}</em>. O que importa é que haja apenas uma sessão <em>SensorFramework‑{…}</em> ativa, sem duplicidade.</p>
<p><strong>Qual o risco de simplesmente ignorar?</strong><br>
O sistema costuma continuar normal, mas você aceita ruído de log e perde sinal para outros incidentes. Recomenda‑se corrigir a fonte duplicada.</p>

<h2>Passo a passo consolidado</h2>
<ol>
  <li><strong>Diagnosticar</strong>: confirmar o código <strong>0xC0000035</strong> e a sessão <em>SensorFramework‑{…}</em>.</li>
  <li><strong>Conter</strong>: parar a sessão com <code>logman stop</code> e observar.</li>
  <li><strong>Erradicar</strong>: remover o arranque duplicado (PerfMon, Autologger, GPO, serviços).</li>
  <li><strong>Restaurar</strong>: atualizar drivers/agentes que recriem a sessão.</li>
  <li><strong>Validar</strong>: checar o canal <em>Kernel‑EventTracing</em> sem novos eventos ID 2 e certificar que <code>logman query -ets</code> não liste duplicidade.</li>
</ol>

<h2>Anexo de comandos úteis</h2>
<pre><code>:: Listar todas as sessões ETW ativas
logman query -ets

\:: Ver detalhes de uma sessão específica
logman query "SensorFramework-{d61722cd-d3ce-0897-1694-d917cab88c2a}" -ets

\:: Parar a sessão problemática
logman stop "SensorFramework-{d61722cd-d3ce-0897-1694-d917cab88c2a}" -ets </code></pre>

<h2>Conclusão prática</h2>
<p>O evento <em>Kernel‑EventTracing / ID 2</em> para <em>SensorFramework‑{…}</em> com erro <strong>0xC0000035</strong> é, quase sempre, uma colisão de nome por tentativa dupla de iniciar a mesma sessão ETW. A correção passa por: encerrar a sessão atual, impedir o arranque duplicado (PerfMon, Autologger, GPO ou serviços), liberar sessões presas e atualizar os agentes que a produzem. Com isso, você elimina ruído de log, mantém a observabilidade limpa e reduz chamadas de suporte.</p>

<hr>

<p><strong>Resumo de ação rápida</strong></p>
<ol>
  <li>Executar como Admin:
    <pre><code>logman query -ets
logman stop "SensorFramework-{d61722cd-d3ce-0897-1694-d917cab88c2a}" -ets
</code></pre>
  </li>
  <li>Se voltar após boot:
    <ul>
      <li>Desativar a sessão no PerfMon ou Autologger.</li>
      <li>Aplicar GPO “Desativar sensores” em servidores.</li>
      <li>Desabilitar <code>SensrSvc</code> e <code>SensorDataService</code> quando aplicável.</li>
    </ul>
  </li>
  <li>Se persistir:
    <pre><code>net stop winmgmt
net start winmgmt

Validar:

  • Sem eventos ID 2 para SensorFramework.
  • logman query -ets sem duplicidade.

Se desejar, adapte o script PowerShell acima para rodar via tarefa agendada e gerar CSV periódico de conformidade.

Índice