Partager via


Création d’un package de pilote de mise à jour

Il est nécessaire que la charge utile de mise à jour pour chaque ressource de microprogramme décrite dans l’ESRT soit groupée et distribuée dans son propre package de pilotes afin de lui permettre de maintenir son propre schéma de contrôle de version sans être lié à d’autres mises à jour des ressources de microprogramme qui peuvent ne pas être mises à jour à la même cadence.

L’exemple suivant fournit un exemple de définition de fichier INF de package de pilotes pour une mise à jour de ressource de microprogramme qui cible la ressource {SYSTEM_FIRMWARE} de l’exemple ESRT dans le tableau 2, en la mettant à jour de la version 1 vers la version 2. À des fins de référence, supposons que le GUID affecté à la ressource SYSTEM_FIRMWARE est 6bd4efb9-23cc-4b4a-ac37-016517413e9a.

[Version]
Signature   = "$WINDOWS NT$"
Provider    = %Provider%
Class       = Firmware
ClassGuid   = {f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
DriverVer   = 01/01/2012,2.0.0.0
CatalogFile = catalog.cat
PnpLockdown = 1

[Manufacturer]
%MfgName% = Firmware,NTarm64.10.0...17134
; Prior to Windows 10, version 1803, the above should instead be:
; %MfgName% = Firmware,NTarm64

[Firmware.NTarm64.10.0...17134]
; Prior to Windows 10, version 1803, the above should instead be:
; [Firmware.NTarm64]
%FirmwareDesc% = Firmware_Install,UEFI\RES_{6bd4efb9-23cc-4b4a-ac37-016517413e9a}

[Firmware_Install.NT]
CopyFiles = Firmware_CopyFiles

[Firmware_CopyFiles]
firmware.bin

[Firmware_Install.NT.Hw]
AddReg = Firmware_AddReg

[Firmware_AddReg]
HKR,,FirmwareId,,{6bd4efb9-23cc-4b4a-ac37-016517413e9a}
HKR,,FirmwareVersion,%REG_DWORD%,0x00000002
HKR,,FirmwareFilename,,%13%\firmware.bin
; Prior to Windows 10, version 1803, the above should instead be:
; HKR,,FirmwareFilename,,{6bd4efb9-23cc-4b4a-ac37-016517413e9a}\firmware.bin

[SourceDisksNames]
1 = %DiskName%

[SourceDisksFiles]
firmware.bin = 1

[DestinationDirs]
DefaultDestDir = 13
; Prior to Windows 10, version 1803, the above should be:
; DefaultDestDir = 10,Firmware\{6bd4efb9-23cc-4b4a-ac37-016517413e9a}

[Strings]
; localizable
Provider     = "Contoso Ltd."
MfgName      = "Fabrikam Inc."
FirmwareDesc = "Fabrikam System Firmware 2.0"
DiskName     = "Firmware Update"

; non-localizable
REG_DWORD     = 0x00010001

Modifiez les sections suivantes pour personnaliser votre configuration.

[Version]
DriverVer --> The date on which this driver package was authored and the driver version of this driver package. Driver version in this driver package must be greater than the current driver version
CatalogFile --> Name of the catalog file

firmware.bin --> Change all instances of firmware.bin with the name of the firmware image name

[Manufacturer]
%MfgName% = Firmware,NTarm64.10.0...17134
[Firmware.NTarm64.10.0...17134] --> Change the architecture.
For x86, it should be NTx86
For AMD64, it should be NTamd64

[Firmware.NTarm64.10.0...17134]
%FirmwareDesc% = Firmware_Install,UEFI\RES_{6bd4efb9-23cc-4b4a-ac37-016517413e9a} --> The GUID of the firmware resource

[Firmware_AddReg]
HKR,,FirmwareId,,{6bd4efb9-23cc-4b4a-ac37-016517413e9a} --> The GUID of the firmware resource
HKR,,FirmwareVersion,%REG_DWORD%,0x00000002 --> Version of the firmware for the update
HKR,,FirmwareFilename,,%13%\firmware.bin --> firmware.bin should be replaced with the firmware image name
; Prior to Windows 10, version 1803, the above should instead be:
HKR,,FirmwareFilename,,{6bd4efb9-23cc-4b4a-ac37-016517413e9a}\firmware.bin --> The subdirectory named after the GUID of the firmware resource and the firmware image name

[DestinationDirs]
DefaultDestDir = 13 --> The full destination path as a 'run from Driver Store' binary
; Prior to Windows 10, version 1803, the above should be:
; DefaultDestDir = 10,Firmware\{6bd4efb9-23cc-4b4a-ac37-016517413e9a} --> The full destination path for the firmware image file based under a subdirectory named after the GUID of the firmware resource within the %SystemRoot%\Firmware directory

[Strings]
; localizable
Modify any strings here [optional]

Le tableau suivant décrit les différentes sections et champs INF du package de pilotes en référence à l’exemple de définition de fichier INF du package de pilotes ci-dessus.

Section/Champ Valeur Commentaire
[Version] Définit les informations de contrôle de version du package de pilotes.
Fournisseur %Provider% = Contoso Inc.

(localisé dans la section [Chaînes] )
Identifie le fournisseur/fournisseur de l’ensemble du package de pilotes de mise à jour des ressources du microprogramme.
Class/ClassGuid Firmware/

{f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
Spécifie la date du package de pilotes. La date et la version doivent refléter la date et la version de la mise à jour réelle de la ressource de microprogramme aussi étroitement que possible afin de garantir que le système d’installation de périphérique PnP peut sélectionner avec précision le meilleur package de pilotes disponible sur le système.
CatalogFile catalog.cat Spécifie le fichier catalogue associé qui signe le fichier INF du package de pilotes et tous les fichiers binaires de mise à jour des ressources du microprogramme associés.
PnpLockdown 1 Active le mécanisme de verrouillage du fichier de pilote PnP afin de protéger les fichiers de pilotes installés contre les modifications externes par des applications non liées. Pour les mises à jour des ressources du microprogramme, ce paramètre doit toujours être activé pour garantir que les fichiers d’image de ressources du microprogramme ne peuvent pas être falsifiés en dehors du contrôle du système PnP
[Fabricant] Répertorie tous les fabricants/fournisseurs de pilotes distincts qui définissent les mises à jour des ressources du microprogramme. Chaque ligne de fabricant spécifie une section [<Modèles>] et identifie sa plateforme cible prise en charge.
%MfgName% Fabrikam Inc.

(localisé dans la section [Chaînes] )
Identifie le fabricant/fournisseur de la mise à jour des ressources du microprogramme. Il peut s’agir de la même chose que le champ Fournisseur.
Firmware

NTarm64.10.0... 17134
Identifie la section [<Modèles>] qui définit les périphériques de ressources de microprogramme pris en charge par ce package de pilotes, y compris leurs plateformes de pilotes cibles. Dans cet exemple, les pilotes sont uniquement ciblés pour la plateforme NT basée sur Arm64 pour Windows 10 builds 17134 et versions ultérieures et la section [<Modèles>] est [Firmware.NTarm64.10.0... 17134].
[Firmware.NTarm64.10.0... 17134] [<Modèles>] section pour la plateforme NT basée sur Arm64 pour Windows 10 builds 17134 et versions ultérieures qui répertorie tous les périphériques de ressources de microprogramme pour lesquels des mises à jour sont définies. Chaque ligne de modèle matériel spécifie une section [<DDInstall>] et sa correspondance d’ID matériel associée.
%FirmwareDesc% Fabrikam System Firmware 2.0

(localisé dans la section [Chaînes] )
Décrit la mise à jour des ressources du microprogramme. Il s’agit de la chaîne de description principale utilisée pour présenter l’appareil de ressource de microprogramme associé instance dans Gestionnaire de périphériques et d’autres interface utilisateur associées à l’appareil. Pour cette raison, la description peut inclure le fournisseur et la version du microprogramme.
Firmware_Install,

UEFI\RES_{RESOURCE_GUID}
Identifie la section [<DDInstall] contenant les étapes d’installation de la mise à jour des ressources du microprogramme qui cible l’appareil instance identifié par l’ID matériel UEFI\RES_{RESOURCE_GUID}. Où RESOURCE_GUID correspond au GUID de la ressource de microprogramme en cours de mise à jour.
[Firmware_Install.NT]

CopyFiles = Firmware_CopyFiles

[Firmware_CopyFiles]

...
Section [<DDInstall>] qui contient les étapes d’installation de la mise à jour des ressources du microprogramme. Pour les mises à jour des ressources du microprogramme, cela définit uniquement le fichier image de ressource de microprogramme à copier sur place pour une mise à jour des ressources du microprogramme. Dans cet exemple, la section [<DDInstall>] est [Firmware_Install.NT].
firmware.bin Spécifie le fichier image de mise à jour des ressources du microprogramme à copier. Pour plus d’informations sur l’emplacement de copie de ce fichier, consultez la section [DestinationDirs] ci-dessous.
[Firmware_Install.NT.Hw]

AddReg = Firmware_AddReg

[Firmware_AddReg]

...
[<DDInstall>. Section Hw] qui contient les étapes d’installation spécifiques au matériel pour la mise à jour des ressources du microprogramme. Pour les mises à jour des ressources du microprogramme, cela définit les informations de configuration de la mise à jour des ressources du microprogramme sous la forme de valeurs de Registre définies sous la clé matérielle de l’appareil cible instance.
FirmwareId {RESOURCE_GUID} GUID du microprogramme de la mise à jour des ressources du microprogramme. Notez qu’il s’agit du même GUID de ressource de microprogramme incorporé dans l’ID matériel UEFI\RES_{RESOURCE_GUID}, mais il doit être spécifié ici en tant que valeur autonome, car le système PnP traite tous les ID matériels comme des chaînes opaques strictement utilisées à des fins de correspondance de périphérique/pilote.
FirmwareVersion 0x00000002 Version du microprogramme de la mise à jour de la ressource du microprogramme, spécifiée sous la forme d’une valeur de REG_DWORD.
FirmwareFilename %13%\firmware.bin Sur Windows 10, version 1803 et ultérieure, il doit s’agir d’un fichier « exécuter à partir du magasin de pilotes » et fournir le chemin d’accès complet au fichier binaire, comme dans l’exemple. Pour avant Windows 10, version 1803, il doit s’agir du chemin d’accès relatif et du nom du microprogramme du nom de l’image Update Capsule de la mise à jour de la ressource de microprogramme sous le répertoire %SystemRoot%\Firmware, de sorte que {RESOURCE_GUID} représente un sous-répertoire utilisé pour organiser tous les fichiers image de microprogramme ciblés pour une ressource de microprogramme spécifique. Par exemple, {RESOURCE_GUID}\firmware.bin.
[SourceDisksNames] Répertorie tous les emplacements de disque source du package de pilotes distincts où sont contenus les fichiers de pilotes associés, tels que les fichiers image de ressources de mise à jour du microprogramme.
1 %DiskName% = Mise à jour du microprogramme

(localisé dans la section [Chaînes] )
Spécifie un ID de disque source de package de pilotes numéroté arbitrairement et son nom de description. Aucun sous-répertoire relatif de package de pilotes facultatif n’est spécifié, de sorte que tous les fichiers de pilote associés à cet ID de disque, comme le fichier image de mise à jour des ressources du microprogramme, sont censés se tenir directement à côté du fichier INF.
[SourceDisksFiles] Répertorie tous les fichiers de pilotes référencés par le package de pilotes et les lie à un ID de disque à partir de la section [SourceDisksNames].
firmware.bin 1 Établit le fichier image de mise à jour des ressources du microprogramme firmware.bin comme faisant partie du package de pilotes en le liant à l’ID de disque principal. Aucun sous-répertoire facultatif spécifique au fichier n’est spécifié, de sorte que ce fichier de pilote est censé vivre par rapport au sous-répertoire de son ID de disque, qui dans ce cas se trouve juste à côté du fichier INF.
[DestinationDirs] Répertorie les répertoires de destination cibles de tous les fichiers de pilotes référencés par le package de pilotes.
DefaultDestDir 13 Spécifie le répertoire de destination par défaut de tous les fichiers de pilotes copiés par ce package de pilotes. Sur Windows 10, version 1803 et ultérieure, il doit s’agir de DIRID 13 pour que les fichiers « s’exécutent à partir du magasin de pilotes ». Avant Windows 10 version 1803, cette valeur doit être 10,Firmware\{RESOURCE_GUID} pour spécifier que la destination de tous les fichiers se trouve sous %SystemRoot%\Firmware, où 10 (DIRID_WINDOWS) représente le répertoire %SystemRoot% de base et {RESOURCE_GUID} représente un sous-répertoire nommé d’après le GUID de la ressource du microprogramme.
[Chaînes] Définit des mappages clé/valeur pour tous les jetons de chaîne indirect (%token%) dans le fichier INF du package de pilotes. L’utilisation de jetons de chaîne permet de localiser facilement un fichier INF de package de pilotes en introduisant [Strings, spécifiques aux paramètres régionaux.<LanguageID>] sections. Il peut également être utile d’utiliser la substitution de jeton de chaîne pour définir des valeurs numériques constantes, telles que REG_DWORD.
Fournisseur « Contoso Ltd. » Exemple de mappage clé/valeur de jeton de chaîne.

Il est important d’utiliser un nom unique pour chaque version du fichier image de mise à jour de la ressource de microprogramme afin d’éviter toute collision potentielle avec d’autres fichiers image de microprogramme, à la fois les vôtres et ceux d’autres fournisseurs de microprogrammes. Par exemple, le nom suivant doit être attribué au fichier firmware.bin ci-dessus pour répondre aux contraintes de nom de fournisseur et de version : Fabrikam-System-Firmware-2.0.bin.

Afin de s’assurer que les variantes d’une image de mise à jour de ressource de microprogramme donnée, potentiellement utilisée à des fins de personnalisation OEM/IHV, ne se heurtent pas lorsqu’elles sont déployées dans la même image système Windows, il est recommandé que chaque image de mise à jour de ressource de microprogramme distincte soit un fichier « exécuter à partir du magasin de pilotes » (Windows 10, version 1803 et ultérieure) ou conservé sous un sous-répertoire dans le répertoire %SystemRoot%\Firmware. Ce sous-répertoire doit être nommé d’après le GUID de ressource de microprogramme cible. Par exemple, les chemins d’accès d’image de mise à jour des ressources de microprogramme suivants répondent aux contraintes de déploiement : %SystemRoot%\\Firmware\\{6bd4efb9-23cc-4b4a-ac37-016517413e9a}\\Fabrikam-System-Firmware-2.0.bin.

Tester la signature du package de pilotes de microprogramme

Une fois que le fichier INF du package de pilotes et le fichier binaire de charge utile du microprogramme sont prêts, l’intégralité du package de pilotes doit être signée pour produire un fichier catalogue. Il est essentiel que ce fichier catalogue garantisse la validité et l’authenticité du fichier INF et de la charge utile du microprogramme contenus dans le package de pilotes afin de permettre à Windows de lancer en toute sécurité une mise à jour des ressources de microprogramme.

Les étapes d’auto-signature du package de pilotes à des fins de test sont énumérées ci-dessous. Notez que ces étapes sont à des fins de test uniquement. En production, les packages de pilotes de mise à jour du microprogramme doivent être envoyés à l’Espace partenaires pour signature. Pour connaître les étapes de signature d’un package de pilote de microprogramme pour la production, consultez Certification et signature du package de mise à jour.

  1. Installez la dernière version du Kit de développement logiciel (SDK) Windows et du Kit de pilotes Windows. Cette opération installe les outils makecert, pvk2pfx inf2cat et signtool sous %systemdir%\Program Files (x86)\Windows Kits\<*version*>\bin\x86.

  2. Exécutez la commande suivante pour créer un certificat de test.

    makecert.exe -r -pe -a sha256 -eku 1.3.6.1.5.5.7.3.3 -n CN=Foo -sv fwu.pvk fwu.cer
    pvk2pfx.exe -pvk fwu.pvk -spc fwu.cer -pi <Password entered during makecert prompt> -spc fwu.cer -pfx fwu.pfx
    

    Pour plus d’informations, consultez MakeCert.

  3. Exécutez la commande suivante pour créer un fichier catalogue.

    Inf2Cat.exe /driver:"." /os:8_x64
    

    L’argument /driver pointe vers l’emplacement où se trouve l’INF. Modifiez la valeur de l’argument /os en fonction du système d’exploitation pour lequel le package de pilotes de microprogramme est destiné. Pour plus d’informations, consultez Inf2Cat.

    Pour plus d’informations sur les catalogues et pilotes de sécurité, consultez Fichiers de catalogue et signatures numériques et Création d’un fichier catalogue pour un package de pilotes PnP.

  4. Exécutez la commande suivante pour signer le fichier catalogue.

    signtool sign /fd sha256 /f fwu.pfx /p <Password entered during makecert prompt> delta.cat
    

    Pour plus d’informations, consultez SignTool.

  5. Installez le certificat de test sur le système de test :

    1. Double-cliquez sur le fichier fwu.cer et choisissez l’option Installer le certificat .

    2. Choisissez les options suivantes lors de l’installation du certificat :

      • Pour Emplacement du Magasin, choisissez Ordinateur local.

      • Pour Magasin de certificats, recherchez et sélectionnez Autorités de certification racines approuvées.

  6. Désactivez le démarrage sécurisé dans les options du microprogramme/BIOS.

  7. Activez la signature de test dans les options BCD afin que le chargeur du système d’exploitation puisse charger le fichier image du microprogramme (firmware.bin) pendant le démarrage, même si le catalogue n’est pas signé en production. Exécutez la commande suivante avec des privilèges d’administrateur :

    bcdedit /set testsigning on
    

Une fois le package de pilotes signé, il peut être installé à l’aide de l’un des mécanismes suivants :

  • Gestionnaire de périphériques. Pour les tests manuels, Gestionnaire de périphériques fournit une interface conviviale permettant de localiser un périphérique de ressource de microprogramme et de mettre à jour son pilote afin de lancer une mise à jour des ressources de microprogramme.

    1. Recherchez l’appareil de ressource de microprogramme souhaité sous la classe « Microprogramme » lors de l’affichage des appareils par type, ou sous l’appareil « Microsoft UEFI-Compliant System » lors de l’affichage des appareils par connexion.

    2. Cliquez avec le bouton droit sur le périphérique de ressource du microprogramme et sélectionnez « Mettre à jour le logiciel du pilote... » Option.

    3. Utilisez l’option « Parcourir mon ordinateur pour rechercher le logiciel pilote » pour localiser et installer un package de pilotes de mise à jour de ressources de microprogramme plus récent sur le périphérique de ressource du microprogramme. Cette opération permet de s’assurer que le package de pilote de mise à jour des ressources de microprogramme spécifié est en fait plus récent que tout package de pilotes de mise à jour de ressource de microprogramme existant qui se trouve peut-être déjà sur le périphérique de ressources du microprogramme avant de l’ajouter au magasin de pilotes Windows et de lancer une installation.

  • pnputil. Pour les tests automatisés, l’utilitaire de ligne de commande PnpUtil peut être utilisé à partir d’une invite de commandes avec élévation de privilèges administrateur pour importer un package de pilotes de mise à jour de ressources de microprogramme dans windows et lancer l’installation d’un périphérique sur tous les périphériques de ressources de microprogramme applicables qui utilisent actuellement une ancienne version de ressource de microprogramme, comme établi par le DriverVer de leur fichier INF du package de pilotes actuellement installé ou par l’absence d’un fichier INF de package de pilotes fourni par une tierce partie Complètement. Par exemple, utilisez la ligne de commande suivante pour ajouter et installer X :\firmware.inf :

    pnputil -i -a X:\firmware.inf
    

Si la mise à jour de la ressource de microprogramme a été correctement installée sur un périphérique de ressource de microprogramme et qu’elle fournit une mise à jour de ressource de microprogramme qui est une version supérieure à la version actuelle du microprogramme, l’appareil attend un redémarrage du système pour terminer l’opération de mise à jour. Un appareil dans cet état indique qu’il doit redémarrer le système en maintenant un problème d’appareil, ce qui empêche le démarrage et la restauration de l’appareil à un état stable jusqu’à ce que le redémarrage soit effectué.

Validation de la status de la mise à jour du microprogramme

Lorsqu’un package de pilotes de microprogramme est correctement installé, PnP demande un redémarrage du système pour appliquer les mises à jour. Après le redémarrage, la status de la mise à jour peut être validée. La status de la mise à jour est conservée sous la clé de Registre suivante : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FirmwareResources\{RESOURCE_GUID}.

RESOURCE_GUID est le GUID de la ressource (à partir d’ESRT) qui a été mise à jour.

La valeur de Registre « LastAttemptStatus » indique la status de la mise à jour du microprogramme, où la valeur 0 indique la réussite et toute valeur autre que zéro représente un échec. La valeur de cette clé de Registre est des codes NTSTATUS remplis par OS Loader en fonction de la valeur de LastAttemptStatus de l’ESRT. Le tableau suivant mappe le code LastAttemptStatus à son code NTSTATUS correspondant.

LastAttemptStatus Code NTSTATUS Code
Succès 0 STATUS_SUCCESS 0x00000000
Erreur : Échec 1 STATUS_UNSUCCESSFUL 0xC0000001
Erreur : Ressources insuffisantes 2 STATUS_INSUFFICIENT_RESOURCES 0xC000009A
Erreur : Version incorrecte 3 STATUS_REVISION_MISMATCH 0xC0000059
Erreur : Format d’image non valide 4 STATUS_INVALID_IMAGE_FORMAT 0xC000007B
Erreur : Erreur d’authentification 5 STATUS_ACCESS_DENIED 0xC0000022
Erreur : Power Event, CA non connecté 6 STATUS_POWER_STATE_INVALID 0xC00002D3
Erreur : Événement d’alimentation, batterie insuffisante 7 STATUS_INSUFFICIENT_POWER 0xC00002DE

La propriété ID de matériel du nœud de périphérique de ressource de microprogramme doit également refléter la modification de la version du microprogramme, où XXX est la nouvelle version du microprogramme.

  • UEFI\RES_{RESOURCE_GUID}&REV_XXX

Si la mise à jour du microprogramme a échoué, vous pouvez réessayer la mise à jour du microprogramme ayant échoué :

  • Dans Gestionnaire de périphériques, développez le nœud Microprogramme, cliquez avec le bouton droit sur le périphérique de ressource du microprogramme, puis cliquez sur Mettre à jour le logiciel pilote.

  • Cliquez sur Parcourir mon ordinateur pour rechercher le logiciel pilote, puis sur la page suivante, cliquez sur Me permettre de choisir dans une liste de pilotes de périphérique sur mon ordinateur.

  • Sélectionnez le pilote que vous avez installé précédemment, puis cliquez sur OK.

Après le redémarrage suivant, le chargeur du système d’exploitation appelle UpdateCapsule() avec la charge utile du package de pilotes de microprogramme.

Définition de table ESRT

Appareil plug-and-play

Traitement des mises à jour

E/S d’appareil à partir de l’environnement UEFI

Prévention et reprise des crises transparentes

État de la mise à jour du microprogramme