Mise à jour du microprogramme d’appareil pour les appareils USB sans utiliser de co-programme d’installation
Important
À compter de WDK pour Windows 11, version 22H2, les co-programmes d’installation redistribuables WDF ne sont plus pris en charge. Pour savoir comment contourner cette modification, consultez les co-programmes d’installation redistribuables WDF ne fonctionnent pas dans l’article sur les problèmes connus de WDK.
Les fournisseurs de périphériques USB utilisent des co-programmes d’installation pour mettre à jour le microprogramme d’appareil pour les appareils qui utilisent des pilotes de périphériques USB de boîte de réception. Toutefois, les co-programmes d’installation ne sont pas pris en charge par la nouvelle norme « Universal INF », qui est une exigence sur Windows 10. Cela pose un défi au processus de mise à jour du microprogramme du périphérique USB existant. Cet article décrit une méthode recommandée pour mettre à jour le microprogramme d’appareil USB sans co-programme d’installation.
Spécifications
Les principales exigences du processus de mise à jour du microprogramme du périphérique USB sont les suivantes :
Mise à jour transparente du microprogramme sans interaction utilisateur
Mécanisme de récupération fiable (par exemple, aucune brique d’appareils)
Fonctionne sur Windows 7 et versions ultérieures
Vue d’ensemble
Les périphériques USB tels que les caméras UVC sont libérés avec un microprogramme pouvant être mis à jour en champ. Il n’existe aucune méthode standard pour mettre à jour le microprogramme aujourd’hui. Un élément commun à tous les mécanismes de mise à jour existants est que certaines suites logicielles personnalisées s’exécutent sur le client et télécharge le microprogramme sur l’appareil. En règle générale, dans le cadre du processus d’installation de l’appareil, la suite logicielle de mise à jour du microprogramme est installée. Le lancement du co-programme d’installation démarre le processus de mise à jour du microprogramme. L’absence de co-programme d’installation sur Windows 10 empêche les fournisseurs d’appareils de mettre à jour le microprogramme sur ces appareils dans le champ.
La méthode recommandée pour contourner l’absence d’un co-programme d’installation pour le scénario de mise à jour du microprogramme du périphérique USB consiste à utiliser un pilote de filtre inférieur pour le périphérique USB qui démarre le processus de mise à jour du microprogramme. Pendant l’appel AddDevice , le pilote de filtre vérifie la version du microprogramme de l’appareil et met à jour le microprogramme si nécessaire.
Vue d’ensemble de la mise à jour du micro
Lorsqu’un périphérique USB est branché au système, le pilote de boîte de réception générique est installé pour l’appareil. Après l’installation du pilote générique, le système d’exploitation interroge le serveur Windows Update pour toute disponibilité du package de pilotes spécifique au fournisseur et le télécharge et installe le pilote. Le package de pilotes installé effectue la mise à jour du microprogramme.
Il existe deux façons de mettre à jour le microprogramme :
Pilote de filtre de mise à jour du microprogramme
- Un fournisseur a fourni un pilote de filtre inférieur qui effectue la mise à jour du microprogramme.
Pilote de périphérique de mise à jour du microprogramme
Un fournisseur a fourni un pilote de filtre inférieur qui place l’appareil en mode de mise à jour du microprogramme.
L’appareil énumère en tant qu’appareil de mise à jour du microprogramme.
Le pilote de mise à jour du microprogramme fourni par le fournisseur se charge sur cet appareil et met à jour le microprogramme.
Méthode 1 : Pilote de filtre de mise à jour du microprogramme
Dans cette méthode, un pilote de filtre inférieur vers le pilote de périphérique USB s’installe dans le cadre du processus de mise à jour du pilote. Ce pilote de filtre effectue la mise à jour du microprogramme.
Le package de mise à jour du pilote sur le serveur Windows Update contient :
Un pilote de filtre inférieur WDF de mise à jour du microprogramme
Inf d’extension pour installer le pilote de filtre inférieur WDF de mise à jour du microprogramme
Fichier « firmware.bin »
Lors de l’installation du package de mise à jour du pilote, la routine AddDevice du pilote de filtre WDF de mise à jour du microprogramme est appelée. À partir de cette routine, le pilote de filtre WDF obtient pour la version du microprogramme de l’appareil à partir de la clé de Registre HW de l’appareil. Le microprogramme de l’appareil doit placer la version du microprogramme à l’aide du descripteur MSOS sur la clé de Registre HW de l’appareil.
Si la version du microprogramme de l’appareil et la version attendue du microprogramme du pilote de filtre sont différentes, ou
La version du microprogramme n’est pas disponible dans la clé de Registre HW de l’appareil
- Ensuite, le pilote de filtre s’insère dans la pile d’appareils en retournant la réussite au rappel AddDevice.
Sinon, le pilote de filtre ne s’insère pas dans la pile d’appareils
- Étant donné qu’il n’est pas nécessaire de mettre à jour le microprogramme, car l’appareil a le microprogramme attendu.
Lorsque le rappel EVT_WDF_DEVICE_D0_ENTRY du pilote de filtre WDF est appelé ultérieurement, le pilote de filtre doit s’inscrire aux notifications de modification de l’interface de périphérique à l’aide de CM_Register_Notification ou IoRegisterPlugPlayNotification (UMDF ou KMDF) pour écouter la classe d’interface de périphérique dans laquelle l’appareil USB inscrit l’appareil. Exemple Ror, le pilote de filtre de mise à jour du microprogramme pour une caméra RVB s’inscrit pour KSCATEGORY_VIDEO_CAMERA. Lors de la réception de la notification, le pilote de filtre doit publier un élément de travail qui effectuerait la mise à jour du microprogramme.
Les pilotes de mise à jour de microprogramme basés sur UMDF peuvent utiliser les API spécifiques de l’appareil ou émettre les transferts de contrôle directement pour accéder au périphérique USB pour effectuer la mise à jour du microprogramme. Par exemple, le pilote de filtre basé sur UMDF pour une caméra utilise les API caméra pour effectuer la mise à jour du microprogramme.
Les pilotes de mise à jour de microprogramme basés sur KMDF peuvent envoyer les commandes spécifiques du fournisseur pour effectuer la mise à jour du microprogramme.
Une fois le microprogramme flashé, l’appareil doit se déconnecter et se reconnecter au bus. L’appareil est réinscrit avec le nouveau microprogramme.
La méthode d’utilisation d’un « pilote de filtre de mise à jour du microprogramme » est recommandée pour les appareils qui ont suffisamment de ressources pour contenir deux images de microprogramme complètes (l’image de mise à jour et une image de sauvegarde) sur la mémoire de l’appareil. La raison est qu’il y a eu des défaillances lors du téléchargement du microprogramme mis à jour, l’appareil peut abandonner la mise à jour et démarrer dans son microprogramme d’origine. Ainsi, pas de briquer l’appareil.
Méthode 2 : Pilote de périphérique de mise à jour du microprogramme
Dans cette méthode, un pilote de filtre inférieur sur le périphérique USB est installé dans le cadre du processus de mise à jour du pilote. Ce pilote de filtre envoie une commande à l’appareil pour redémarrer en mode de mise à jour du microprogramme, où l’appareil expose une interface de mise à jour du microprogramme. Le pilote de l’interface de mise à jour du microprogramme se charge et effectue la mise à jour du microprogramme.
Le package de mise à jour du pilote sur le serveur Windows Update pour l’appareil contient :
Pilote de filtre inférieur WDF qui place l’appareil en mode de mise à jour du microprogramme
Inf d’extension pour installer le pilote de filtre inférieur WDF
En plus du package de mise à jour du pilote, un package de pilote de périphérique de mise à jour du microprogramme distinct est présent sur Windows Update, avec :
Un pilote de périphérique de mise à jour du microprogramme WDF et son INF, et
Fichier « firmware.bin ».
Lors de l’installation du package de mise à jour du pilote, la routine AddDevice du pilote de filtre inférieur WDF est appelée. À partir de cette routine, le pilote de filtre interroge la version du microprogramme de l’appareil à partir de la clé de Registre HW de l’appareil. Le microprogramme de l’appareil doit avoir placé la « version du microprogramme », à l’aide du descripteur MSOS ou de l’extension INF de l’appareil USB, sur la clé de Registre HW de l’appareil.
Si la version du microprogramme de l’appareil et les versions attendues du microprogramme du pilote de filtre sont différentes ou
La version du microprogramme n’est pas disponible dans la clé de Registre HW de l’appareil
Ensuite, le pilote de filtre WDF s’insère dans la pile d’appareils.
Sinon, le pilote de filtre WDF ne s’insère pas dans la pile d’appareils.
Lorsque le rappel EVT_WDF_DEVICE_D0_ENTRY du pilote de filtre WDF est appelé ultérieurement, le pilote de filtre émet une commande spécifique au fournisseur pour l’appareil qui le place en mode de mise à jour du microprogramme. L’appareil se déconnecte et se reconnecte, exposant l’interface de mise à jour du microprogramme.
Le système énumère l’interface de l’appareil de mise à jour du microprogramme. Un pilote WDF de mise à jour du microprogramme personnalisé fourni par le fournisseur, dans le package de mise à jour du microprogramme, sera chargé pour cette interface de mise à jour du microprogramme. Ce pilote met à jour le microprogramme.
Lorsque le rappel EVT_WDF_DEVICE_D0_ENTRY du pilote de mise à jour du microprogramme WDF est appelé ultérieurement, le pilote doit publier un élément de travail qui effectuerait la mise à jour du microprogramme.
Une fois le microprogramme flashé, l’appareil doit se déconnecter et se reconnecter au bus. L’appareil est réinscrit avec le nouveau microprogramme.
Cette méthode est recommandée pour les appareils qui ne peuvent pas contenir les images de microprogramme mises à jour et d’origine en raison d’une pénurie de mémoire sur l’appareil. La raison est qu’il y a eu des défaillances lors du téléchargement du microprogramme mis à jour, l’appareil peut abandonner la mise à jour et démarrer l’appareil dans son mode de mise à jour du microprogramme à nouveau et la mise à jour du microprogramme peut être retentée. Ainsi, pas de briquer l’appareil.
Récupération
Le processus de mise à jour du microprogramme peut échouer pour différentes raisons. Si cela se produit, lorsque l’appareil est à nouveau énuméré, le pilote de mise à jour du microprogramme peut essayer de mettre à jour le microprogramme à nouveau et peut échouer à nouveau et ce processus de mise à jour peut se retrouver dans une boucle. Le pilote de mise à jour du microprogramme doit placer une limite supérieure au nombre de nouvelles tentatives qu’il peut effectuer. Lorsque les nouvelles tentatives de mise à jour du microprogramme dépassent un seuil (par exemple, trois nouvelles tentatives), le pilote de filtre ne doit pas tenter de mettre à jour le microprogramme jusqu’à ce qu’une nouvelle version du pilote soit téléchargée à partir de WU. Le pilote de mise à jour du microprogramme peut utiliser le Registre pour conserver les états de nouvelle tentative.
À la fin de la mise à jour du microprogramme de l’appareil, nous vous recommandons de réinitialiser l’appareil lui-même et de réinscrire.
Les deux méthodes de mise à jour du microprogramme doivent être arrêtées avant d’effectuer la mise à jour du microprogramme. Cela garantit qu’il n’existe aucun handle ouvert sur l’appareil et évite toute exigence de redémarrage du système d’exploitation.
Exemple d’INF
;==============================================================================
; Microsoft Extension INF for USB Camera Firmware Update UMDF Filter Driver
; Copyright (C) Microsoft Corporation. All rights reserved.
;==============================================================================
[Version]
Signature="$WINDOWS NT$"
Class=Extension
ClassGUID={e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider=%CONTOSO%
ExtensionId={BC6EE554-271C-48C8-B713-8078833962BD} ; replace with your own GUID
CatalogFile.NT=SampleExtension.cat
DriverVer=08/28/2017,10.0.1700.000
PnpLockdown=1
[SourceDisksFiles]
ContosoFirmwareUpdateFilterDriver.dll=1
ContosoFirmware.bin=1
[SourceDisksNames]
1 = %MediaDescription%
[DestinationDirs]
UMDriverCopy=13
ContosoFirmwareCopy=13
DefaultDestDir = 13
[UMDriverCopy]
ContosoFirmwareUpdateFilterDriver.dll
[ContosoFirmwareCopy]
ContosoFirmware.bin
[Manufacturer]
%CONTOSO% = ContosoFirmwareUpdateFilterDriver,NTamd64.10.0...22000
[ContosoFirmwareUpdateFilterDriver.NTamd64.10.0...22000]
; replace with your camera device VID PID
%ContosoCamera.DeviceDesc% = ContosoFirmwareUpdateFilterDriver_Win11Install, USB\VID_1234&PID_1234&REV_1234
[ContosoFirmwareUpdateFilterDriver_Win11Install]
Include=wudfrd.inf
Needs=wudfrd.NT
CopyFiles=UMDriverCopy, ContosoFirmwareCopy
[ContosoFirmwareUpdateFilterDriver_Win11Install.HW]
Include=wudfrd.inf
Needs=wudfrd.NT.HW
[ContosoFirmwareUpdateFilterDriver.AddReg]
; Load the redirector as an lower filter on this specific device.
; 0x00010008 - FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND
HKR,,"LowerFilters",0x00010008,"WUDFRd"
[ContosoFirmwareUpdateFilterDriver_Win11Install.Services]
Include=wudfrd.inf
Needs=WUDFRD.NT.Services
[ContosoFirmwareUpdateFilterDriver_Win11Install.Wdf]
UmdfService=ContosoFirmwareUpdateFilterDriver, ContosoFirmwareUpdateFilterDriver.UmdfFilter
UmdfServiceOrder=ContosoFirmwareUpdateFilterDriver
[ContosoFirmwareUpdateFilterDriver.UmdfFilter]
UmdfLibraryVersion=2.0.0
ServiceBinary= "%13%\ContosoFirmwareUpdateFilterDriver.dll"
[Strings]
CONTOSO = "Contoso Inc."
ContosoCamera.DeviceDesc = "Contoso Camera Extension"
MediaDescription="Contoso Camera Firmware Update Filter Driver Installation Media"
WudfRdDisplayName = "WDF Reflector Driver"