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.
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:
- Abrir perfmon.msc.
- Navegar até Conjuntos de Coletores de Dados → Sessões de Rastreamento de Eventos e … → Sessões de Rastreamento de Eventos de Inicialização.
- 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ário | Ação recomendada | Observações |
---|---|---|
Evento isolado, não recorrente | Monitorar e não agir imediatamente | Ruído comum após atualização ou boot |
Eventos recorrentes após cada reinício | Desativar origem duplicada (PerfMon, Autologger ou GPO) | Caracteriza duas origens iniciando a mesma sessão |
Sessão não para com logman stop | Revisar serviços de sensor e reiniciar WMI em janela | Indica sessão presa por serviço/driver |
Equipamentos com pacote OEM/telemetria | Atualizar/remover agente que cria sessão ETW duplicada | Ferramentas de diagnóstico do fabricante costumam criar sessões |
Servidor sem uso de sensores/localização | Aplicar 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.