Sur certains serveurs Windows, l’Observateur d’événements affiche « Kernel‑EventTracing / 2 : SensorFramework‑{GUID}… 0xC0000035 ». Ce guide expose la cause (collision de nom ETW), un diagnostic reproductible et des correctifs sûrs, avec scripts pour l’automatiser à grande échelle.
Vue d’ensemble de l’erreur et de sa cause
Le journal Kernel‑EventTracing peut enregistrer régulièrement le message :
Session « SensorFramework‑{GUID} » failed to start with the following error: 0xC0000035
Le code 0xC0000035
correspond à STATUS_OBJECT_NAME_COLLISION : Windows tente de créer une session ETW (Event Tracing for Windows) qui porte un nom déjà utilisé ou qui n’a pas été correctement libéré après une exécution précédente. Résultat : la session SensorFramework‑{GUID} échoue au démarrage et l’événement ID 2 est journalisé.
Pourquoi « SensorFramework » ? Ce préfixe renvoie à la Windows Sensor Platform (pilotes et services liés aux capteurs : luminosité ambiante, rotation, emplacement, etc.). Sur des serveurs, ces fonctions sont rarement nécessaires ; néanmoins, un pilote, un service, une tâche planifiée, un script ou une stratégie peut créer une session de traçage portant ce nom.
Ce que signifie concrètement l’ID 2
- Symptôme : l’événement Kernel‑EventTracing / ID 2 apparaît, parfois à chaque démarrage ou de façon périodique.
- Interprétation : Windows n’a pas pu démarrer la session car un objet du même nom existe déjà (session encore ouverte, « zombie », autologger qui persiste, ou double démarrage).
- Impact : bruit dans les journaux, éventuelle perte de traces utiles, et suspicion d’un composant qui gère mal son cycle de vie.
Diagnostic pas à pas
Objectif : vérifier si une session portant SensorFramework est active, identifier qui la démarre, puis corriger la cause racine.
Où regarder et quoi chercher
Emplacement / Commande | But | Exemple / Indice attendu |
---|---|---|
Observateur d’événements Applications and Services Logs → Microsoft → Windows → Kernel‑EventTracing → Admin | Confirmer les ID 2 et le texte exact (SensorFramework‑{GUID}, 0xC0000035) | Plusieurs occurrences corrélées à un redémarrage ou à une tâche planifiée |
logman query -ets (CMD en admin) | Lister les sessions ETW en cours | Présence d’une session SensorFramework‑… → conflit probable |
PerfMon → Jeux de collecteurs de données → Sessions de suivi d’événements | Vue GUI des sessions, état, fournisseur, tampon | Session SensorFramework‑{GUID} en Exécution ou Arrêtée mais présente |
Get-Service *sensor* (PowerShell) | Identifier des services « capteurs » pouvant recréer la session | Services liés aux capteurs activés sur un serveur non concerné |
Planificateur de tâches / Scripts de démarrage | Détecter un démarrage régulier de traçage (logman, wpr, etc.) | Tâche qui exécute logman start avec un nom SensorFramework |
Stratégies de groupe (GPO) | Voir si des scripts ou paramètres créent/recréent des sessions | Script d’ordinateur qui lance un traçage ETW à chaque boot |
reg query HKLM\System\CurrentControlSet\Control\WMI\Autologger /s | Inspection en lecture des autologgers qui démarrent au boot | Clés contenant SensorFramework → source potentielle |
Filtrer rapidement les événements au format XML (PowerShell)
Pour compter les occurrences récentes par machine :
$log = 'Microsoft-Windows-Kernel-EventTracing/Admin'
$xpath = "*[System[(EventID=2)] and EventData[Data[contains(.,'SensorFramework')]]]"
Get-WinEvent -LogName $log -FilterXPath $xpath -MaxEvents 200 |
Group-Object MachineName | Sort-Object Count -Descending |
Format-Table Name,Count
Correctifs immédiats (sans redémarrage)
Idée directrice : supprimer la session ETW en double et empêcher sa recréation incorrecte.
Arrêter et supprimer la session en conflit
- Ouvrez CMD en administrateur puis exécutez :
logman query -ets
Recherchez une session qui commence parSensorFramework-
. - Si trouvée, arrêtez puis supprimez la session :
logman stop "NomExactDeLaSession" -ets logman delete "NomExactDeLaSession" -ets
- Alternative GUI : dans PerfMon → Jeux de collecteurs de données → Sessions de suivi d’événements : clic droit sur
SensorFramework‑{GUID}
→ Arrêter puis Supprimer.
Redémarrer WMI si une dépendance maintient la session ouverte
Dans certains environnements, un composant WMI peut conserver la session. Redémarrez prudemment WMI :
net stop winmgmt
net start winmgmt
Si vous utilisez la journalisation ou des outils d’inventaire intensifs, planifiez cette action hors des heures de pointe.
Vérifier et neutraliser la recréation automatique
- Stratégies de groupe : inspectez les scripts d’ordinateur (démarrage) qui appellent
logman
,wpr
ou similaires. - Planificateur de tâches : recherchez une tâche qui démarre régulièrement un traçage
SensorFramework
. - Pilotes / services « capteurs » : si les capteurs ne sont pas utilisés sur serveurs, envisagez de désactiver prudemment les services correspondants après validation sur un serveur pilote.
Pour recenser les services susceptibles d’être en cause :
Get-Service | Where-Object {$_.DisplayName -match 'Sensor' -or $_.Name -match 'Sensor'} |
Select-Object Status, Name, DisplayName
Bonnes pratiques : mettez d’abord les services en Manual
, vérifiez l’absence d’impact (applications métier, sécurité, télémetrie) puis, si OK, passez en Disabled
et surveillez les journaux.
Points d’attention importants
- Ne confondez pas :
wevtutil
gère les journaux (canaux, fichiers .evtx), tandis quelogman
gère les sessions ETW. Pour ce problème précis, utilisezlogman
ou PerfMon. - Un simple redémarrage peut libérer une session verrouillée mais ne corrige pas la cause de sa recréation. Traitez la source (service, tâche, GPO, script).
- Si la session provient d’un Autologger, elle redémarrera à chaque boot. Évitez la suppression brutale de clés Registre en production ; mieux vaut corriger le composant qui crée la session.
Exemples concrets de commandes utiles
Inventaire express des sessions ETW
:: Lister les sessions ETW actives
logman query -ets
\:: Détails d'une session (tampons, fichier, statut)
logman query "SensorFramework-{GUID}" -ets
Recherche de tâches qui démarrent des traces
Get-ScheduledTask | ForEach-Object {
try {
$xml = [xml](Export-ScheduledTask -TaskName $_.TaskName -TaskPath $_.TaskPath)
if ($xml.Task.Actions.Exec.Command -match 'logman|wpr') {
[PSCustomObject]@{
Task = $_.TaskName
Path = $_.TaskPath
Command = $xml.Task.Actions.Exec.Command
Args = $xml.Task.Actions.Exec.Arguments
}
}
} catch {}
} | Format-Table -AutoSize
Inspection non destructive des autologgers
reg query HKLM\System\CurrentControlSet\Control\WMI\Autologger /s | findstr /I SensorFramework
But : identifier une clé d’autologger « SensorFramework… » susceptible de provoquer la recréation à chaque démarrage. Corrigez la source (service/tâche/GPO) plutôt que d’éditer la clé en direct.
Automatisation PowerShell pour plusieurs serveurs
Le fragment suivant arrête/supprime toute session qui correspond à SensorFramework‑
sur un ensemble de machines. Testez toujours sur un périmètre pilote.
$servers = @('srv01','srv02','srv03')
$pattern = '^SensorFramework-'
\$script = {
\$sessions = & logman query -ets | Select-String -Pattern \$using\:pattern | ForEach-Object { $\_.Line.Trim() }
foreach (\$s in \$sessions) {
try { & logman stop \$s -ets | Out-Null } catch {}
try { & logman delete \$s -ets | Out-Null } catch {}
}
# Redémarrer WMI si besoin (décommenter si nécessaire)
# Start-Process -FilePath 'cmd.exe' -ArgumentList '/c','net stop winmgmt && net start winmgmt' -Verb RunAs
}
Invoke-Command -ComputerName \$servers -ScriptBlock \$script
Version avec journalisation et mode WhatIf
Pour tracer ce qui est fait et pouvoir rejouer/justifier, utilisez un journal CSV et un interrupteur WhatIf :
param(
[string[]]$ComputerName,
[switch]$WhatIf,
[string]$OutCsv = ".\Etw_SensorFramework_Cleanup_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
)
\$results = @()
\$sb = {
param(\$Pattern, \$DoIt)
\$found = & logman query -ets | Select-String -Pattern \$Pattern | ForEach-Object { $\_.Line.Trim() }
foreach (\$name in \$found) {
if (\$DoIt) {
try { & logman stop \$name -ets | Out-Null } catch {}
try { & logman delete \$name -ets | Out-Null } catch {}
}
}
return \$found
}
foreach (\$c in \$ComputerName) {
try {
\$sessions = Invoke-Command -ComputerName \$c -ScriptBlock \$sb -ArgumentList '^SensorFramework-', (-not \$WhatIf)
\$results += \[PSCustomObject]@{ Computer=\$c; Timestamp=Get-Date; Found=\$sessions -join ';'; Action=(\$(if(\$WhatIf){'Planned'}else{'Executed'})) }
} catch {
\$results += \[PSCustomObject]@{ Computer=\$c; Timestamp=Get-Date; Found='ERROR'; Action=$\_.Exception.Message }
}
}
\$results | Export-Csv -NoTypeInformation -Path \$OutCsv
Write-Host "Journal écrit :" (Resolve-Path \$OutCsv)
Prévention et bonnes pratiques
- Nommer de façon unique toute session ETW démarrée par vos scripts ou outils internes. Par exemple, inclure le nom de machine ou un GUID pour éviter les collisions :
logman start "MyTrace-%COMPUTERNAME%-%RANDOM%" -ets -p {GUID_FOURNISSEUR} 0xFFFFFFFF 0x5
- Conditionner le démarrage : ne démarrer que si la session n’existe pas déjà.
if (-not (logman query -ets | Select-String -Quiet -Pattern '^SensorFramework-')) { logman start "SensorFramework-$(New-Guid)" -ets }
- Superviser la présence répétée des ID 2 pour déclencher une alerte « bruit anormal » sur Kernel‑EventTracing/Admin.
- Capteurs inutilisés : sur des serveurs dédiés, désactivez les fonctionnalités de capteurs via services/GPO lorsque validé par les équipes applicatives et sécurité.
Contrôles après remédiation
- Exécutez
logman query -ets
: aucune session ne doit commencer parSensorFramework-
tant que vous n’en avez pas explicitement besoin. - Surveillez pendant quelques cycles de démarrage et de tâches planifiées : l’ID 2 doit avoir disparu du journal Kernel‑EventTracing/Admin.
- Validez que les applications métier et la collecte de journaux fonctionnent normalement.
Dépannage avancé
Quand le problème réapparaît après suppression
Dans ce cas, quelque chose recrée la session : un service capteur, un driver, un script d’observabilité, un outil de performance (WPR/WPA), une GPO. Utilisez la corrélation temporelle :
- Notez l’heure de l’ID 2 et recherchez les événements applicatifs ou système générés à la même minute.
- Activez la journalisation d’audit sur vos scripts de démarrage, si applicable.
- Inspectez les tâches planifiées déclenchées à l’ouverture de session système ou à heure fixe.
Cas des autologgers
Un autologger est une session ETW qui démarre très tôt au boot. Si une clé Autologger liée à SensorFramework existe, vous devez corriger l’élément qui l’installe (package, pilote, GPO). Évitez la suppression directe ; procédez par mise à jour du composant ou ajustement de configuration afin de rester supportable.
Foire aux questions
Peut‑on ignorer cet événement ?
Ignorer l’ID 2 ne casse pas immédiatement le système, mais : 1) vous perdez la trace attendue par la session, 2) vous masquez un défaut de cycle de vie, 3) vous bruitez la télémétrie. Il vaut mieux corriger la cause.
Un redémarrage suffit‑il ?
Parfois, oui : il libère l’objet ETW. Mais si la session est recréée de manière fautive au démarrage (autologger/script), le problème revient. Le seul correctif durable consiste à supprimer la session en double et empêcher sa recréation erronée.
Quels services « capteurs » viser sur serveur ?
Cela dépend des versions et des rôles installés. La règle : si vous n’utilisez pas de capteurs, recensez les services dont le nom ou l’affichage contient « Sensor » et évaluez l’impact avant désactivation contrôlée. Procédez par vague pilote, puis généralisation.
Quelle différence entre wevtutil
et logman
?
wevtutil
manipule des canaux de journaux (logs), pas des sessions ETW. Pour créer, arrêter, supprimer des sessions ETW, utilisez logman
(ou PerfMon).
Modèle d’intervention réutilisable
Étape | Action | Critère de succès | Plan de repli |
---|---|---|---|
Validation | Confirmer ID 2 & 0xC0000035 pour SensorFramework | Événement reproduit et horodaté | N/A |
Arrêt/suppression | logman stop/delete de la session en double | Session n’apparaît plus dans logman query -ets | Redémarrer WMI, puis réessayer |
Blocage recréation | Corriger service/tâche/GPO à l’origine | Absence d’ID 2 sur 48–72 h | Revenir à l’état précédent et revoir la stratégie |
Prévention | Noms uniques + démarrage conditionnel des traces | Aucune collision de nom | Revue de code/ops des scripts |
Exemple de script d’audit de l’environnement
Ce script dresse l’inventaire des occurrences récentes de l’ID 2 « SensorFramework » sur une liste de serveurs et produit un rapport CSV.
param(
[Parameter(Mandatory=$true)]
[string]$ServerListPath,
[string]$OutCsv = ".\SensorFramework_EventID2_Audit_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
)
\$servers = Get-Content -Path \$ServerListPath | Where-Object {$\_ -and $\_.Trim() -ne ''}
\$log = 'Microsoft-Windows-Kernel-EventTracing/Admin'
\$xpath = "\*\[System\[(EventID=2)] and EventData\[Data\[contains(.,'SensorFramework')]]]"
\$rows = foreach (\$s in \$servers) {
try {
\$events = Get-WinEvent -ComputerName \$s -LogName \$log -FilterXPath \$xpath -MaxEvents 100
\[PSCustomObject]@{
Computer = \$s
Count = \$events.Count
LastSeen = (\$events | Select-Object -First 1).TimeCreated
}
} catch {
\[PSCustomObject]@{ Computer=\$s; Count=0; LastSeen=\$null }
}
}
\$rows | Sort-Object Count -Descending | Export-Csv -NoTypeInformation -Path \$OutCsv
Write-Host "Rapport :" (Resolve-Path \$OutCsv)
Résumé opérationnel
- Constat : l’événement Kernel‑EventTracing / ID 2 avec
0xC0000035
indique une collision de nom de session ETW, iciSensorFramework‑{GUID}
. - Action immédiate : supprimer la session en double (
logman stop/delete
) et, si nécessaire, redémarrer WMI. - Action durable : empêcher la recréation via correction du service/tâche/GPO/driver qui lance la session.
- Prévention : nommer les sessions de façon unique et conditionner leur démarrage.
Résultat attendu
Après nettoyage des sessions ETW en double et correction de la source (tâche, GPO, pilote/service capteur), les événements Kernel‑EventTracing / ID 2 liés à SensorFramework‑{GUID}
cessent d’apparaître. Le journal redevient sain, les traces utiles fonctionnent et les opérations gagnent en lisibilité.