Ce périphérique ne peut pas démarrer (Code 10) : les étapes de réparation qui fonctionnent réellement

Cet article vous a aidé ?

Le Code 10 est la manière dont Windows hausse les épaules pendant que votre clavier, carte réseau, interface audio, concentrateur USB, contrôleur NVMe ou clé étrangère reste là comme une brique.
Le Gestionnaire de périphériques affiche Ce périphérique ne peut pas démarrer. (Code 10), et on s’attend à ce que vous « mettiez à jour le pilote » comme si nous étions en 2009 et que les pilotes étaient de la poussière magique.

Dans les environnements de production, nous ne réparons pas les pannes à l’intuition. Nous les résolvons en réduisant le domaine de la défaillance : lien matériel, firmware, alimentation, pile de pilotes, politique ou une mauvaise hypothèse.
Voici le plan pratique que je remettrais à un ingénieur d’astreinte qui a cinq minutes avant qu’un VP ne découvre qu’il n’a plus de Wi‑Fi.

Ce que signifie réellement le Code 10 (et ce qu’il n’est pas)

Le Code 10 n’est pas un bug unique. C’est une erreur générique « le pilote du périphérique a démarré… et le périphérique non ». Cela peut se produire parce que :
le périphérique ne s’est jamais correctement énuméré, le firmware est confus, le mauvais pilote est lié à l’ID matériel, le pilote a démarré mais
a planté pendant l’initialisation, ou Windows a appliqué une politique/fonction qui a cassé le chemin de démarrage du périphérique.

Pensez au démarrage d’un périphérique Windows comme à une chaîne de démarrage : découverte (PnP), correspondance (INF/magasin de pilotes), installation (copie + registre),
démarrage (chargement du service) et initialisation fonctionnelle (appels spécifiques au périphérique). Le Code 10 est typiquement lancé à la frontière « démarrage/init ».
Votre travail consiste à trouver ce qui a changé et quelle couche ment.

Lieux courants où se cache le Code 10

  • USB et docks : budget d’alimentation, selective suspend, firmware du hub, ou une illusion « ça marche sur mon port ».
  • Adaptateurs réseau : filtres NDIS, clients VPN, sécurité endpoint, ou un mauvais pilote fournisseur provenant de Windows Update.
  • Contrôleurs de stockage : Intel RST/VMD, pilotes NVMe, pilotes de chipset hors d’ordre, ou options du BIOS.
  • Bluetooth/interfaces audio : paquets de pilotes obsolètes, filtres de classe cassés, ou incompatibilité firmware/codec.

Une stratégie de correction fiable paraît ennuyeuse : collecter des preuves, identifier l’instance de périphérique énumérée, lire les bons journaux, puis
soit (1) corriger l’association du pilote, (2) supprimer un filtre en conflit, (3) réparer le firmware/l’alimentation, soit (4) accepter que le matériel échoue.

Une idée paraphrasée de Werner Vogels (CTO d’Amazon) : Tout échoue ; concevez et exploitez comme si l’échec était l’état normal.
Le Code 10 est la version desktop de cette philosophie, sauf qu’il échoue juste avant votre réunion.

Plan de diagnostic rapide (premier/deuxième/troisième)

Si vous n’avez que dix minutes, ne « réinstallez pas Windows ». N’ouvrez même pas encore une page de téléchargement de pilote.
Faites ceci dans l’ordre pour trouver rapidement le goulot d’étranglement et éviter d’empirer l’incident.

Premier : confirmer le domaine de la panne (énumération vs pilote vs politique)

  1. Le périphérique s’énumère-t-il ? S’il n’apparaît pas avec un ID matériel, vous êtes dans le domaine alimentation/port/câble/firmware.
  2. Windows lie-t-il le pilote attendu ? S’il a lié un pilote générique ou d’un mauvais fournisseur, corrigez l’association.
  3. Un pilote filtre a-t-il bloqué le démarrage ? VPN, EDR, filtre de stockage, améliorations audio—les filtres sont le « encore une chose » qui casse le démarrage.

Second : inspecter les journaux où Windows avoue

  1. Journaux d’installation SetupAPI pour les décisions de correspondance/liaison.
  2. Onglet « Événements » du Gestionnaire de périphériques pour les détails et horodatages « Périphérique non démarré ».
  3. Observateur d’événements pour les échecs de chargement de pilote/service, les réinitialisations de hub USB et les événements noyau PnP.

Troisième : appliquer le changement le plus petit et réversible

  1. Rétrogradation du pilote si le problème a commencé après une mise à jour.
  2. Supprimer un paquet de pilote suspect en utilisant les outils du magasin de pilotes (pas seulement « désinstaller » dans le Gestionnaire de périphériques).
  3. Sanity firmware / BIOS seulement après avoir compris l’état actuel — les changements de firmware peuvent réparer ou ruiner votre journée.

Blague n°1 : Redémarrer n’est pas une correction ; c’est une confession que vous n’avez pas eu le temps de déboguer.

Faits intéressants et contexte historique

  • Codes d’erreur du Gestionnaire de périphériques remontent à l’époque de Windows NT/2000, quand Plug and Play devait devenir sûr pour l’entreprise.
  • Les journaux SetupAPI sont la source de vérité autoritaire « pourquoi Windows a choisi ce pilote ? » depuis Windows 2000 — bien avant que « télémétrie » soit un mot courant.
  • La signature des pilotes est devenue progressivement plus stricte ; sur Windows x64 c’était un point d’inflexion majeur qui a réduit le chaos et augmenté les tickets « pourquoi mon ancien pilote ne se charge pas ? ».
  • La livraison de pilotes via Windows Update a amélioré le déploiement pour les consommateurs, mais a créé un nouveau mode de panne : le mauvais pilote « utile » distribué à grande échelle.
  • Le selective suspend USB existe pour économiser l’énergie, surtout sur les portables, mais il peut exposer des câbles, hubs et périphériques marginaux incapables de gérer des transitions d’état d’alimentation agressives.
  • Les filtres NDIS (VPN, pare-feu, EDR) sont puissants par conception : ils peuvent intercepter le trafic, et ils peuvent aussi casser l’initialisation de l’adaptateur de manière créative.
  • Intel VMD/RST a changé la façon dont les périphériques NVMe se présentent à Windows ; le basculer dans le BIOS peut faire « disparaître » un disque de démarrage tant que le bon pilote de contrôleur n’existe pas.
  • Les clés de registre de filtre de classe (UpperFilters/LowerFilters) sont un point d’extension historique utilisé par les fournisseurs ; elles sont aussi une cause fréquente de Code 10 et Code 19 quand elles deviennent obsolètes.

Tâches éprouvées : commandes, sorties, décisions

Les tâches ci‑dessous sont écrites pour Windows, mais j’applique une discipline ligne de commande : capturer l’état, changer une chose, revérifier.
Chaque tâche inclut une commande réaliste, une sortie représentative, ce que cela signifie et quelle décision prendre ensuite.

Task 1 — Identifier l’instance de périphérique en échec (entité PnP)

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Status Error | Select-Object -First 5 Status,Class,FriendlyName,InstanceId | Format-Table -Auto"
Status Class        FriendlyName                         InstanceId
------ -----        ------------                         ----------
Error  Net          Intel(R) Ethernet Connection (7)...  PCI\VEN_8086&DEV_15F3&SUBSYS_...
Error  USB          USB Composite Device                 USB\VID_0BDA&PID_5411\00A0C6...

Ce que cela signifie : Vous avez maintenant l’InstanceId, qui est l’ancre pour tout : événements, liaison de pilote et état du registre.

Décision : Si le périphérique n’est pas du tout listé, arrêtez. Vous êtes en territoire matériel/alimentation/BIOS — passez aux tâches USB/alimentation et aux vérifications de firmware.

Task 2 — Récupérer les IDs matériels (ce que la correspondance de pilote utilise)

cr0x@server:~$ powershell -NoProfile -Command "$id=(Get-PnpDevice -Status Error | Select-Object -First 1).InstanceId; Get-PnpDeviceProperty -InstanceId $id -KeyName 'DEVPKEY_Device_HardwareIds' | Select-Object -ExpandProperty Data"
PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03
PCI\VEN_8086&DEV_15F3&SUBSYS_00008086
PCI\VEN_8086&DEV_15F3&CC_020000

Ce que cela signifie : Les IDs matériels sont la vérité contre laquelle Windows compare les INFs. Si ceux-ci semblent génériques ou incorrects, vous pouvez être dans un mode différent (par ex. RAID/VMD).

Décision : Utilisez ces IDs pour vérifier si le pilote installé est bien celui prévu, et pas seulement « quelque chose qui se charge ».

Task 3 — Vérifier quel pilote est réellement lié (et son INF)

cr0x@server:~$ powershell -NoProfile -Command "$id=(Get-PnpDevice -Status Error | Select-Object -First 1).InstanceId; Get-PnpDeviceProperty -InstanceId $id -KeyName 'DEVPKEY_Device_DriverInfPath' | Select-Object -ExpandProperty Data"
oem42.inf

Ce que cela signifie : Le pilote est installé à partir d’un INF OEM dans le magasin de pilotes. Cet INF est ce que vous devrez peut‑être supprimer ou remplacer.

Décision : Si cet INF provient de Windows Update et que le problème a commencé après le jour de correctifs, planifiez une rétrogradation/suppression et un blocage.

Task 4 — Inspecter les détails du paquet de pilote (fournisseur, version, date)

cr0x@server:~$ powershell -NoProfile -Command "pnputil /enum-drivers | Select-String -Context 0,6 'Published Name\s*:\s*oem42.inf'"
Published Name : oem42.inf
Original Name  : e1d68x64.inf
Provider Name  : Intel
Class Name     : Net
Class GUID     : {4d36e972-e325-11ce-bfc1-08002be10318}
Driver Version : 12/15/2024 2.1.4.0
Signer Name    : Microsoft Windows Hardware Compatibility Publisher

Ce que cela signifie : Vous pouvez désormais corréler la version du pilote avec « quand ça s’est cassé ». Notez aussi le signataire — la signature WHCP ne garantit pas que c’est adapté à votre environnement.

Décision : Si le fournisseur est surprenant (par ex. un fournisseur de dock qui fournit un pilote NIC), considérez-le comme suspect et envisagez de passer au pilote du fabricant système OEM.

Task 5 — Lire les détails « Périphérique non démarré » depuis les événements du Gestionnaire via PowerShell

cr0x@server:~$ powershell -NoProfile -Command "$id=(Get-PnpDevice -Status Error | Select-Object -First 1).InstanceId; Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Kernel-PnP/Configuration'; ID=411} -MaxEvents 20 | Where-Object {$_.Message -like \"*$id*\"} | Select-Object -First 1 TimeCreated,Message | Format-List"
TimeCreated : 2/4/2026 9:12:44 AM
Message     : Device PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03\3&11583659&0&FE had a problem starting.
              Driver Name: oem42.inf
              Class Guid: {4d36e972-e325-11ce-bfc1-08002be10318}
              Service: e1dexpress
              Problem: 0x0
              Problem Status: 0xC00000E5

Ce que cela signifie : « Problem Status » vous donne un code d’état proche du noyau. C’est souvent plus exploitable que le Code 10 lui‑même.

Décision : Si le service est identifié (ici e1dexpress), vérifiez s’il échoue à démarrer, s’il est bloqué ou s’il entre en collision avec des filtres.

Task 6 — Vérifier que le service du pilote existe et s’exécute (ou échoue)

cr0x@server:~$ powershell -NoProfile -Command "Get-Service -Name e1dexpress | Format-List Name,Status,StartType"
Name      : e1dexpress
Status    : Stopped
StartType : Manual

Ce que cela signifie : Beaucoup de pilotes de périphériques sont des services noyau qui ne s’affichent pas « En cours d’exécution » comme un serveur web. « Arrêté » n’est pas automatiquement mauvais — mais c’est un indice.

Décision : Si le type de démarrage ou le statut du service est étrange (désactivé, manquant), vous êtes face à une installation cassée ou à une interférence d’une politique/outil de sécurité.

Task 7 — Vérifier SetupAPI pour la décision réelle de liaison du pilote

cr0x@server:~$ powershell -NoProfile -Command "Select-String -Path $env:windir'\inf\setupapi.dev.log' -Pattern 'PCI\\VEN_8086&DEV_15F3','oem42.inf','!    dvi: Device not started' -SimpleMatch | Select-Object -Last 12"
>>>  [Device Install (DiInstallDevice) - PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03]
>>>  Section start 2026/02/04 09:12:41.812
     dvi: Selected driver installs from section [E1DExpress.ndi.NTamd64.10.0] in "C:\WINDOWS\INF\oem42.inf".
     dvi: Driver Service Name: e1dexpress
!!!  dvi: Device not started: Device has problem: 0x0: 0xC00000E5
<<<  Section end 2026/02/04 09:12:45.120

Ce que cela signifie : SetupAPI vous dit exactement quelle section d’INF a été sélectionnée et où le démarrage a échoué. C’est ici que « Windows a choisi le mauvais pilote » cesse d’être une théorie.

Décision : Si SetupAPI montre plusieurs pilotes candidats, vous devrez peut‑être supprimer le mauvais du magasin afin que Windows ne puisse plus le choisir.

Task 8 — Lister les périphériques installés dans la même classe (repérer doublons/fantômes)

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class Net | Select-Object Status,FriendlyName,InstanceId | Format-Table -Auto"
Status Unknown  WAN Miniport (IP)                         ROOT\NET\0000
Status OK       Intel(R) Wi-Fi 6E AX211 160MHz            PCI\VEN_8086&DEV_51F0&SUBSYS_...
Status Error    Intel(R) Ethernet Connection (7)...       PCI\VEN_8086&DEV_15F3&SUBSYS_...

Ce que cela signifie : Vous pouvez voir si un seul périphérique échoue ou si toute la classe est affectée (ce qui indique des filtres de classe ou une politique).

Décision : Si plusieurs périphériques de la même classe échouent après l’installation d’un VPN/EDR, inspectez les pilotes filtres ensuite.

Task 9 — Vérifier les filtres NDIS (coupable fréquent de Code 10 pour les NIC)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetAdapterBinding -Name '*' -ComponentID ms_tcpip,ms_lltdio,ms_rspndr,ms_pacer | Select-Object Name,ComponentID,Enabled | Format-Table -Auto"
Name                          ComponentID Enabled
----                          ----------- -------
Intel(R) Ethernet Connection  ms_tcpip    True
Intel(R) Ethernet Connection  ms_lltdio   True
Intel(R) Ethernet Connection  ms_rspndr   True
Intel(R) Ethernet Connection  ms_pacer    True

Ce que cela signifie : Cela montre les liaisons standard. Les filtres tiers apparaissent souvent avec leurs propres IDs de composant.

Décision : Si vous voyez des composants de filtre inattendus (provenant d’un VPN/EDR), désactivez-les temporairement (selon les règles de changement) et retestez le démarrage du périphérique.

Task 10 — Énumérer les problèmes des contrôleurs et hubs USB (pour Code 10 USB)

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class USB | Where-Object {$_.Status -ne 'OK'} | Select-Object Status,FriendlyName,InstanceId | Format-Table -Auto"
Error USB Composite Device         USB\VID_0BDA&PID_5411\00A0C6...
Error Generic USB Hub              USB\VID_2109&PID_2817\5&2b3d...

Ce que cela signifie : Si les hubs/contrôleurs échouent, le périphérique n’est pas le problème — c’est votre arbre USB.

Décision : Déplacez le périphérique vers un autre port/contrôleur (avant vs arrière, USB-C vs USB-A), ou retirez le dock/hub et testez directement.

Task 11 — Désactiver le selective suspend USB (test ciblé, pas une religion)

cr0x@server:~$ powercfg /SETACVALUEINDEX SCHEME_CURRENT SUB_USB USBSELECTIVE SUSPEND_DISABLED
Power Setting Index value set.

Ce que cela signifie : Vous avez désactivé le selective suspend pour l’alimentation AC sur le schéma d’alimentation actif. Cela élimine toute une classe de comportements d’initialisation/reprise instables.

Décision : Si cela corrige le Code 10 pour des périphériques USB, vous avez probablement du matériel/firmware marginal (dock, hub, câble) ou un firmware de périphérique bogué. Décidez de conserver le paramètre ou de remplacer l’élément faible.

Task 12 — Reconstruire la pile de pilotes en supprimant le paquet de pilotes (la vraie désinstallation)

cr0x@server:~$ powershell -NoProfile -Command "pnputil /delete-driver oem42.inf /uninstall /force"
Microsoft PnP Utility

Driver package deleted successfully.

Ce que cela signifie : Le paquet de pilote est supprimé du magasin de pilotes et les périphériques qui l’utilisaient sont désinstallés. C’est plus efficace que « Désinstaller le périphérique » seul.

Décision : Après la suppression, relancez une recherche de matériel et installez le pilote connu bon provenant de votre OEM ou du paquet approuvé par l’entreprise.

Task 13 — Forcer un rescannage matériel (ré-énumération PnP)

cr0x@server:~$ powershell -NoProfile -Command "pnputil /scan-devices"
Microsoft PnP Utility

Scanning for hardware changes...
Scan completed.

Ce que cela signifie : Windows relance la découverte et la liaison. S’il lie maintenant un INF différent, vous le verrez dans SetupAPI.

Décision : S’il lie toujours le même INF problématique, vous avez manqué une autre copie (un autre oem INF) ou Windows l’a retéléchargé. Envisagez de désactiver temporairement les mises à jour de pilotes pour cette classe pendant la stabilisation.

Task 14 — Vérifier les surprises disque/contrôleur (Code 10 lié au stockage)

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class SCSIAdapter | Select-Object Status,FriendlyName,InstanceId | Format-Table -Auto"
OK    Intel(R) Volume Management Device NVMe RAID Controller   PCI\VEN_8086&DEV_9A0B&SUBSYS_...

Ce que cela signifie : Si vous attendiez un contrôleur NVMe simple mais voyez VMD/RST, le mode de stockage du BIOS compte. Le Code 10 lié au stockage apparaît souvent après des réinitialisations du BIOS ou des bascules « performances ».

Décision : Ne changez pas le mode de stockage du BIOS sur un disque de démarrage à la légère. Assurez-vous que le bon pilote de contrôleur est installé avant de changer de mode, sinon vous échangerez un Code 10 contre « pas de démarrage ».

Task 15 — Inspecter UpperFilters/LowerFilters (point de casse classique)

cr0x@server:~$ powershell -NoProfile -Command "reg query 'HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}' /v UpperFilters"
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}
    UpperFilters    REG_MULTI_SZ    edrNdisflt

Ce que cela signifie : Un filtre au niveau de la classe est attaché à toutes les cartes réseau. Si ce filtre est cassé ou partiellement désinstallé, les adaptateurs peuvent échouer au démarrage (bonjour, Code 10).

Décision : Si cela se corrèle avec une installation ou suppression d’EDR/VPN, réparez l’installation du produit correctement. Ne supprimez pas les filtres juste comme ça à moins d’être prêt à récupérer la connectivité réseau (et d’avoir un plan de retour en arrière).

Task 16 — Vérifier si Windows pense que le périphérique est présent mais « a un problème »

cr0x@server:~$ powershell -NoProfile -Command "$id=(Get-PnpDevice -Status Error | Select-Object -First 1).InstanceId; Get-PnpDeviceProperty -InstanceId $id -KeyName 'DEVPKEY_Device_ProblemCode','DEVPKEY_Device_ProblemStatus' | Format-Table KeyName,Data -Auto"
KeyName                     Data
-------                     ----
DEVPKEY_Device_ProblemCode  10
DEVPKEY_Device_ProblemStatus 3221225701

Ce que cela signifie : Vous pouvez capturer les valeurs numériques exactes utilisées par l’OS, ce qui aide à corréler entre journaux et incidents.

Décision : Utilisez ProblemStatus pour comparer entre machines — si beaucoup ont le même statut après la même mise à jour, vous avez une régression de flotte, pas un seul laptop défectueux.

Blague n°2 : Les docks USB‑C sont l’équivalent entreprise d’une dépendance surprise — vous ne l’avez pas déployée, mais elle est définitivement dans votre chemin critique.

Trois micro‑récits d’entreprise depuis le terrain

Micro‑récit 1 : L’incident causé par une mauvaise hypothèse

Une entreprise de taille moyenne a déployé de nouveaux portables à une équipe commerciale. Jour 1, une partie d’entre eux a ouvert des tickets : l’Ethernet sur le dock affichait Code 10.
L’équipe a supposé « docks défectueux » car les pannes étaient groupées autour d’un bureau.

Le service informatique a échangé des docks. Même problème. Ils ont changé les câbles Ethernet. Même problème. Ils ont réinstallé une image sur un portable. Ça a fonctionné pendant une heure, puis ça a de nouveau échoué.
Pendant ce temps, le Wi‑Fi du bureau était saturé parce que la moitié de l’équipe avait perdu l’accès filaire en même temps.

La vraie panne venait de l’hypothèse que le NIC du dock était « un problème de dock ». Ce n’était pas le cas. Une mise à jour du client VPN avait installé un filtre NDIS.
Sur les machines où le NIC du dock s’énumérait avant le Wi‑Fi au démarrage, le filtre se liait pendant l’initialisation de l’adaptateur et bloquait parfois le chemin de démarrage.
Le Code 10 était le symptôme ; le pilote filtre était la cause racine.

La correction fut brutalement ennuyeuse : rétrograder la version du client VPN, puis pousser une build corrigée qui ne laissait pas de clés de filtre obsolètes dans le registre.
Les docks étaient innocents. Le bureau était coupable uniquement d’avoir un ordre de démarrage cohérent.

Micro‑récit 2 : L’« optimisation » qui s’est retournée contre eux

Une organisation d’ingénierie voulait des démarrages plus rapides et une meilleure autonomie. Un guide interne bien intentionné recommandait des paramètres d’alimentation agressifs :
activer les fonctions de modern standby, laisser le selective suspend USB activé et laisser Windows gérer l’alimentation des périphériques de manière agressive.
Le guide n’était pas faux en théorie. Il était faux dans ce cas précis.

Un sous‑ensemble d’utilisateurs dépendait d’une interface audio USB particulière pour les appels. Après une mise à jour Windows, ces périphériques ont commencé à lancer des Code 10
après reprise. Rebrancher aidait parfois. Désactiver/réactiver le périphérique aidait parfois. Le vrai problème était le timing intermittent de la reprise :
le firmware de l’interface audio n’aimait pas être mis hors tension alors que le hub était aussi en transition.

L’organisation a doublé la mise : « Peut‑être que les utilisateurs ont de mauvais câbles. » Ils ont acheté de nouveaux câbles. Ils ont acheté de nouveaux hubs. Ils ont acheté de nouveaux appareils.
Le taux d’échec a changé mais n’a pas disparu, car le comportement de reprise était le déclencheur, pas les accessoires.

La solution pragmatique : désactiver le selective suspend sur les flottes concernées (seulement celles-ci) et standardiser sur une révision de firmware de dock qui se comportait.
À plus long terme, ils ont mis à jour le guide pour dire : les optimisations d’alimentation sont des changements de production — testez‑les sur du matériel réel, pas seulement sur des benchmarks.

Micro‑récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Un service financier utilisait une application métier dépendant d’une clé de sécurité matérielle. Un lundi, après des correctifs, les clés sur plusieurs postes de travail
ont commencé à échouer avec Code 10. La panique a suivi, car « les auditeurs arrivent » est une force de la nature.

L’équipe desktop avait une habitude peu à la mode : elle tenait un petit catalogue interne de « paquets de pilotes connus bons » et enregistrait quels noms d’INF OEM
étaient déployés pour les périphériques critiques. Ils avaient aussi une règle stricte : ne jamais se fier à Windows Update pour cette classe de périphériques ; empaquetez‑le dans votre outil de gestion.

Ainsi, quand le Code 10 est apparu, ils n’ont pas deviné. Ils ont comparé les liaisons oem*.inf des machines en échec avec le catalogue.
Bien sûr, Windows Update avait remplacé le pilote de la clé par un paquet plus récent qui prétendait être compatible mais a changé le comportement d’initialisation.

Ils ont supprimé le nouveau paquet du magasin de pilotes, réinstallé le paquet connu bon et bloqué cette mise à jour de pilote dans leur politique de flotte.
Pas d’héroïsme. Pas de réimages. Juste une hygiène rigoureuse des pilotes et des enregistrements — comme la gestion des changements, mais pour le démarrage des périphériques.

Erreurs courantes : symptômes → cause racine → correction

1) « Code 10 sur un périphérique USB, mais il fonctionne sur un autre PC »

  • Symptôme : Le périphérique échoue sur une machine, fonctionne ailleurs ; parfois marche après un rebranchement.
  • Cause racine : Cas limite de gestion d’alimentation (selective suspend), firmware du hub/dock instable, ou port/contrôleur de cette machine qui se comporte différemment.
  • Correction : Tester un port direct (sans hub), désactiver selective suspend comme diagnostic, mettre à jour le firmware du dock, et éviter les ports en façade sur les desktops si le câble est limite.

2) « Code 10 après Windows Update ; le pilote dit être à jour »

  • Symptôme : Cassé soudainement après un patch ; le Gestionnaire de périphériques insiste qu’il n’existe pas de pilote plus récent.
  • Cause racine : Windows Update a fourni un pilote « plus récent » qui est pire pour votre révision matériel/firmware.
  • Correction : Rétrograder, puis supprimer le oem*.inf fautif du magasin de pilotes et installer le paquet approuvé par l’OEM. Envisager de bloquer cette mise à jour.

3) « Adaptateur réseau Code 10 uniquement quand VPN/EDR est installé »

  • Symptôme : L’adaptateur n’arrive pas à démarrer ou disparaît ; réinstaller le pilote NIC ne résout pas.
  • Cause racine : Conflit de pilote filtre NDIS ou entrées UpperFilters/LowerFilters obsolètes après une désinstallation partielle.
  • Correction : Réparer ou désinstaller/réinstaller proprement le VPN/EDR. Si nécessaire, supprimer les entrées de filtre obsolètes avec un plan de retour en arrière et un accès hors ligne.

4) « Contrôleur de stockage Code 10 après mise à jour/réinitialisation du BIOS »

  • Symptôme : Le contrôleur NVMe/RAID affiche Code 10 ; parfois Windows démarre encore mais les performances chutent ou les disques disparaissent.
  • Cause racine : Le BIOS a basculé le mode VMD/RST, changé le mapping des lignes PCIe, ou réinitialisé les valeurs par défaut sans pile de pilotes correspondante.
  • Correction : Restaurer le mode de stockage précédent, ou installer le bon pilote de contrôleur avant de changer de mode. Traitez cela comme une migration, pas comme un interrupteur.

5) « Bluetooth Code 10 après mise en veille/hibernation »

  • Symptôme : L’adaptateur Bluetooth échoue après la reprise ; un redémarrage le rétablit temporairement.
  • Cause racine : Bug de transition d’état d’alimentation du firmware/du pilote, parfois déclenché par Fast Startup/hibernation.
  • Correction : Mettre à jour les pilotes Bluetooth et chipset, tester la désactivation de Fast Startup, et vérifier si l’adaptateur est derrière un hub USB interne ayant ses propres problèmes.

6) « Périphérique audio Code 10 avec les ‘améliorations’ activées »

  • Symptôme : Interface audio externe échoue ; les haut‑parleurs internes fonctionnent.
  • Cause racine : Couche d’amélioration fournisseur ou incompatibilité d’APO (audio processing object) après une mise à jour.
  • Correction : Réinstaller le paquet pilote audio correct ; désactiver les améliorations comme test ; supprimer les composants de filtre audio obsolètes si identifiés.

7) « Désinstaller le périphérique n’a pas aidé »

  • Symptôme : Vous désinstallez dans le Gestionnaire, redémarrez et il revient cassé.
  • Cause racine : Le paquet pilote reste dans le magasin de pilotes, donc Windows réassocie le même INF immédiatement.
  • Correction : Utilisez pnputil /delete-driver oemXX.inf /uninstall pour supprimer le paquet, puis rescannez et installez le pilote connu bon.

8) « Le périphérique affiche Code 10 et Code 43 selon les démarrages »

  • Symptôme : Les codes d’erreur varient ; le comportement dépend du timing de démarrage/reprise.
  • Cause racine : Lien matériel marginal, instabilité d’alimentation, ou conditions de course firmware (fréquent avec docks/hubs).
  • Correction : Éliminer les intermédiaires, mettre à jour le firmware, désactiver les transitions d’alimentation agressives, et remplacer câbles/hubs douteux.

Listes de contrôle / plan étape par étape

Plan étape par étape pour une machine unique (édition « ne pas empirer »)

  1. Enregistrer l’état : instance ID du périphérique, IDs matériels, INF du pilote, version du pilote, et l’horodatage du dernier fonctionnement.
  2. Confirmer la portée : est‑ce un seul périphérique, toute la classe (USB/Net), ou plusieurs périphériques qui échouent simultanément ?
  3. Vérifier les événements : journaux Kernel‑PnP de configuration et événements du Gestionnaire pour « Périphérique non démarré » plus les codes d’état.
  4. Lire SetupAPI : trouver la section d’installation et pourquoi Windows a choisi ce pilote.
  5. Tenter le plus petit changement réversible :
    • Rétrograder le pilote si mise à jour récente.
    • Désactiver le selective suspend (USB) comme diagnostic.
    • Supprimer un composant de filtre tiers s’il est clairement impliqué (préférer réparation/désinstallation produit, pas chirurgie du registre).
  6. Effectuer la vraie réinitialisation du pilote : supprimer le paquet de pilote du magasin de pilotes si nécessaire, puis rescanner.
  7. Installer les pilotes connus bons dans le bon ordre : chipset d’abord, puis pilotes de classe de contrôleur (stockage/USB), puis pilotes spécifiques au périphérique.
  8. Ne touchez au firmware qu’ensuite : mettre à jour BIOS/firmware du dock/périphérique avec notes de stabilité d’alimentation et retour en arrière.
  9. Retester démarrage à froid et reprise : certains bugs Code 10 n’apparaissent qu’après veille/hibernation.

Liste pour la flotte (quand le Code 10 devient soudainement « partout »)

  1. Arrêter les corrections aléatoires : un ingénieur qui « corrige » en réinstallant manuellement des pilotes crée un problème de pollution des données.
  2. Choisir 3 machines échantillons : différentes révisions matérielles si possible, et une machine témoin non affectée.
  3. Capturer les diffs du magasin de pilotes : identifier quels oem*.inf ont changé et les corréler aux anneaux de mise à jour.
  4. Vérifier les logiciels filtres partagés : VPN, EDR, DLP, suites audio — tout ce qui s’insère dans une pile.
  5. Déployer une correction déterministe : épingler un paquet pilote, réparer un filtre, ou appliquer un changement de paramètre d’alimentation ciblé.
  6. Mesurer la réapparition : si ça « marche pour la plupart », considérez que ce n’est pas résolu. Les bugs Code 10 aiment les pannes intermittentes.

Si vous devez modifier le registre

Parfois une entrée UpperFilters/LowerFilters cassée ne vous laisse pas le choix. Si vous le faites :
exportez d’abord le registre complet de la clé de classe concernée, assurez‑vous d’avoir un accès hors ligne (admin local, out‑of‑band, ou mode sans échec),
et sachez comment vous restaurerez la connectivité si vous cassez la pile réseau.

FAQ

1) Le Code 10 est‑il toujours un problème de pilote ?

Non. C’est souvent une liaison ou un échec d’initialisation de pilote, mais cela peut être de l’alimentation, du firmware, ou un périphérique qui ne s’est jamais correctement énuméré.
S’il n’y a pas d’ID matériel stable, arrêtez de blâmer les pilotes et commencez par vérifier les ports, hubs, BIOS et états d’alimentation.

2) Pourquoi « Mettre à jour le pilote » dans le Gestionnaire de périphériques n’aide‑t‑il si souvent pas ?

Parce qu’il recherche généralement ce que Windows connaît déjà ou ce que Windows Update propose, pas forcément ce dont votre matériel a besoin.
Si le mauvais pilote est déjà dans le magasin, Windows peut continuer à le choisir indéfiniment.

3) Quelle est la différence entre « Désinstaller le périphérique » et supprimer le paquet de pilote ?

Désinstaller le périphérique supprime l’instance du périphérique. Supprimer le paquet de pilote enlève l’INF et les binaires du magasin de pilotes.
Si vous ne supprimez pas le paquet, Windows peut réinstaller le même pilote problématique lors du prochain scan.

4) Comment savoir si un VPN ou un EDR a causé le Code 10 de ma carte réseau ?

Cherchez les composants de filtre NDIS, vérifiez UpperFilters sur le GUID de classe réseau, et corrélez l’horodatage de la panne avec l’installation/mise à jour de ce logiciel.
Si plusieurs adaptateurs échouent (Ethernet et Wi‑Fi), les filtres deviennent vos principaux suspects.

5) Une mise à jour du BIOS peut‑elle provoquer un Code 10 ?

Oui. Les mises à jour du BIOS peuvent réinitialiser les paramètres, changer les modes des périphériques ou altérer l’ordre d’énumération. Les modes de stockage (VMD/RST/AHCI) sont particulièrement sensibles.
Traitez les changements de BIOS comme des changements d’infrastructure : planifiez, vérifiez et revenez en arrière si nécessaire.

6) Pourquoi le périphérique fonctionne après un redémarrage mais échoue après la veille ?

Veille/reprise exercent des états d’alimentation différents du démarrage à froid. Des périphériques et hubs qui survivent au démarrage peuvent quand même échouer à l’initialisation après la reprise.
Testez en désactivant le selective suspend et évaluez le firmware et le comportement d’alimentation du dock/hub.

7) Le Code 10 est‑il un signe que le matériel est mort ?

Parfois. Si le périphérique échoue sur plusieurs ports, sur plusieurs machines, et que les journaux montrent des échecs répétés d’énumération, le matériel est une possibilité réelle.
Mais ne le déclarez pas mort tant que vous n’avez pas éliminé la liaison de pilote, les filtres et la gestion d’alimentation.

8) Dois‑je utiliser des outils tiers de « mise à jour des pilotes » ?

Non. En termes d’entreprise, c’est de la roulette d’approvisionnement. Ils peuvent installer des pilotes inadaptés, ajouter des filtres et créer de nouveaux modes de panne.
Utilisez les canaux OEM ou des paquets internes validés.

9) Que faire si le Code 10 concerne un contrôleur de stockage et que la machine ne démarre plus ?

N’agitez pas. Démarrez depuis un média de récupération, confirmez le mode de stockage du BIOS, et assurez‑vous que le bon pilote de contrôleur est disponible.
Les bascules aléatoires peuvent rendre l’OS non bootable en changeant l’identité du contrôleur attendue par Windows.

10) Quand le « Restauration du système » est‑elle raisonnable ?

Lorsqu’il y a des preuves solides que la panne est liée à une mise à jour récente de pilote ou de logiciel, et que vous avez besoin d’un retour rapide.
Ce n’est pas élégant, mais c’est un rollback contrôlé si vous capturez ce qui a changé ensuite.

Conclusion : prochaines étapes durables

Le Code 10 est Windows qui vous dit « le contrat de démarrage a été violé ». Le chemin le plus rapide est d’arrêter de deviner et d’interroger la pile :
énumérez le périphérique, confirmez la liaison du pilote, lisez SetupAPI, cherchez les filtres, puis faites un changement réversible à la fois.

Prochaines étapes pratiques :

  1. Sur la prochaine machine affichant Code 10, capturez InstanceId + IDs matériels + INF du pilote avant de cliquer sur quoi que ce soit.
  2. Utilisez SetupAPI pour confirmer ce que Windows a sélectionné et pourquoi.
  3. Si désinstaller ne suffit pas, supprimez le paquet de pilotes réel avec pnputil.
  4. Si les pannes se corrèlent avec un VPN/EDR, considérez les filtres comme des suspects de première classe et réparez via une correction produit appropriée.
  5. Pour les bizarreries USB/dock, testez la connexion directe, les paramètres d’alimentation et le firmware — puis remplacez l’élément le plus faible au lieu de vous battre avec lui.

L’objectif n’est pas de « faire disparaître » le problème. L’objectif est de rendre la panne compréhensible, reproductible et évitable.
C’est ainsi que vous transformez un incendie Code 10 en un élément de maintenance routinier — silencieux, documenté et un peu satisfait.

← Précédent
Écran bleu après l’installation d’un pilote : restauration depuis WinRE
Suivant →
Sécurité Proxmox : les jetons API bien faits (pour que le mot de passe root cesse d’être une arme)

Laisser un commentaire