Mettre à jour le microprogramme de l’appareil à l’aide de Windows Update
Cet article explique comment mettre à jour le microprogramme d’un appareil amovible ou in-châssis à l’aide du service Windows Update (WU). Pour plus d’informations sur la mise à jour du microprogramme système, consultez la plateforme de mise à jour du microprogramme UEFI Windows.
Pour ce faire, vous allez fournir un pilote de périphérique qui inclut la charge utile du microprogramme. Si vous fournissez un pilote de fonction pour votre appareil, vous pouvez ajouter la logique de mise à jour du microprogramme et la charge utile au pilote existant, ou vous pouvez fournir un package de pilotes de mise à jour de microprogramme distinct. Si votre appareil utilise un pilote fourni par Microsoft, vous devez fournir un package de pilotes de mise à jour de microprogramme distinct. Dans les deux cas, le package de pilotes de mise à jour du microprogramme doit être universel.
Pour plus d’informations sur les pilotes universels, consultez Utilisation d’un fichier INF universel. Le fichier binaire du pilote peut utiliser KMDF, UMDF 2 ou le modèle de pilote Windows.
Étant donné que WU ne peut pas exécuter de logiciel, le pilote de mise à jour du microprogramme doit remettre le microprogramme à Plug-and-Play (PnP) pour l’installation.
Actions du pilote de mise à jour du microprogramme
En règle générale, le pilote de mise à jour du microprogramme est un pilote de périphérique léger qui implémente les procédures suivantes :
Au démarrage de l’appareil ou dans la fonction de rappel EVT_WDF_DRIVER_DEVICE_ADD du pilote :
Identifiez l’appareil auquel il est attaché.
Déterminez si le pilote a une version du microprogramme plus récente que celle du microprogramme actuellement flashée sur le matériel de l’appareil.
Si une mise à jour du microprogramme est nécessaire, définissez un minuteur d’événements pour planifier la mise à jour.
Sinon, ne faites rien tant que le pilote n’est pas redémarcé.
Pendant le runtime du système :
Si une mise à jour est mise en file d’attente, attendez qu’un ensemble de conditions soit rempli.
Lorsque les conditions sont remplies, effectuez la mise à jour du microprogramme sur l’appareil.
Contenu du pilote de mise à jour du microprogramme
En règle générale, le package de pilotes de mise à jour du microprogramme contient les éléments suivants :
Catalogue de pilotes
Pilote de fonction (.sys ou .dll)
Binaire de charge utile de mise à jour du microprogramme
Envoyez votre package de mise à jour du microprogramme en tant que soumission de pilote distincte.
Ajouter une logique de mise à jour du microprogramme à un pilote fourni par le fournisseur
Le pilote de fonction existant peut implémenter le mécanisme de mise à jour du microprogramme, comme illustré dans le diagramme suivant :
Sinon, si vous souhaitez mettre à jour le pilote de fonction et le pilote de mise à jour du microprogramme séparément, créez un deuxième nœud de périphérique sur lequel vous allez installer le pilote de mise à jour du microprogramme. Le diagramme suivant montre comment un appareil peut avoir deux nœuds d’appareil distincts :
Dans ce cas, les nœuds de fonction et d’appareil du microprogramme doivent avoir différents ID matériels afin d’être ciblés indépendamment.
Il existe deux façons de créer un deuxième nœud d’appareil. Certains types d’appareils ont la possibilité d’exposer un deuxième nœud d’appareil sur un appareil physique, tel que USB. Vous pouvez utiliser cette fonctionnalité pour créer un nœud d’appareil pouvant être ciblé par WU et installer un pilote de mise à jour du microprogramme sur celui-ci. Toutefois, de nombreux types d’appareils n’autorisent pas un seul appareil physique à énumérer plusieurs nœuds d’appareil.
Dans ce cas, utilisez une extension INF qui spécifie la directive AddComponent pour créer un nœud d’appareil qui peut être ciblé par Windows Update et installer le pilote de mise à jour du microprogramme sur celui-ci. L’extrait de code suivant d’un fichier INF montre comment procéder :
[Manufacturer]
%Contoso%=Standard,NTamd64
[Standard.NTamd64]
%DeviceName%=Device_Install, PCI\DEVICE_ID
[Device_Install.Components]
AddComponent=ComponentName,,AddComponentSection
[AddComponentSection]
ComponentIDs = ComponentDeviceId
Dans l’exemple INF ci-dessus, ComponentIDs = ComponentDeviceId
indique que l’appareil enfant aura un ID matériel de SWC\ComponentDeviceId
. Une fois installé, cet INF crée la hiérarchie d’appareils suivante :
Pour les futures mises à jour du microprogramme, mettez à jour le fichier INF et binaire contenant la charge utile du microprogramme.
Ajouter une logique de mise à jour du microprogramme à un pilote fourni par Microsoft
Pour mettre à jour le microprogramme des appareils qui utilisent un pilote fourni par Microsoft, vous devez créer un deuxième nœud d’appareil, comme indiqué ci-dessus.
Bonnes pratiques
Dans le pilote de mise à jour du microprogramme INF, spécifiez DIRID 13 pour que PnP conserve les fichiers dans le package de pilotes dans DriverStore :
[Firmware_AddReg] ; Store location of firmware payload HKR,,FirmwareFilename,,"%13%\firmware_payload.bin"
PnP résout cet emplacement lorsqu’il installe l’appareil. Le pilote peut ensuite ouvrir cette clé de Registre pour déterminer l’emplacement de la charge utile.
Les pilotes de mise à jour du microprogramme doivent spécifier les entrées INF suivantes :
Class=Firmware ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
Pour localiser un autre nœud d’appareil, le pilote du microprogramme doit parcourir l’arborescence de l’appareil par rapport à elle-même, et non en énumérant tous les nœuds d’appareil pour une correspondance. Un utilisateur peut avoir branché plusieurs instances de l’appareil et le pilote du microprogramme doit uniquement mettre à jour l’appareil avec lequel il est associé. En règle générale, le nœud d’appareil à localiser est le parent ou le frère du nœud d’appareil sur lequel le pilote du microprogramme est installé. Par exemple, dans le diagramme ci-dessus avec deux nœuds d’appareil, le pilote de mise à jour du microprogramme peut rechercher un appareil frère pour rechercher le pilote de fonction. Dans le diagramme situé juste au-dessus, le pilote du microprogramme peut rechercher l’appareil parent pour trouver le périphérique principal avec lequel il doit communiquer.
Le pilote doit être robuste pour plusieurs instances de l’appareil sur le système, éventuellement avec plusieurs versions de microprogramme différentes. Par exemple, il peut y avoir une instance de l’appareil qui a été connecté et mis à jour plusieurs fois ; Un nouvel appareil peut ensuite être branché, qui est plusieurs versions du microprogramme anciennes. Cela signifie que l’état (par exemple, la version actuelle) doit être stocké sur l’appareil, et non dans un emplacement global.
S’il existe une méthode existante pour mettre à jour le microprogramme (EXE ou co-programme d’installation, par exemple), vous pouvez réutiliser en grande partie le code de mise à jour dans un pilote UMDF.