Pilote de mise à jour du microprogramme de stockage (SFU)
La mise à jour du microprogramme pour les lecteurs de stockage NVMe s’appuie sur les fournisseurs de matériel pour créer des applications de mise à jour du microprogramme qui utilisent des IOCTL de mise à jour du microprogramme spécifiques introduites dans Windows 10. Ces applications sont généralement distribuées en dehors du pipeline de Windows Update (WU). Les utilisateurs finaux doivent déterminer quels disques de stockage se trouvent dans leur appareil, obtenir l’utilitaire du microprogramme de lecteur de stockage approprié à partir du site Web d’un fabricant, puis télécharger et installer manuellement les mises à jour.
En outre, les appareils exécutant Windows 10 en mode S se trouvent dans une configuration de sécurité renforcée qui permet uniquement aux utilisateurs d’exécuter des applications vérifiées par Microsoft. Par conséquent, les utilitaires du fournisseur peuvent ne pas mettre à jour le microprogramme de lecteur. Ce processus manuel entraîne une faible adoption des mises à jour du microprogramme, augmente les coûts de support et les problèmes de satisfaction des clients pour les fabricants de matériel.
Remarque
Windows 10 en mode S fonctionne exclusivement avec les applications du Microsoft Store dans Windows et les accessoires compatibles avec Windows 10 en mode S. Un commutateur unidirectionnel hors mode S est disponible. Apprenez-en plus sur windows.com/SmodeFAQ.
La mise à jour du microprogramme d’appareil via le service Windows Update (WU) à l’aide d’une solution basée sur un pilote est disponible pour les fournisseurs de matériel et les oblige à ajouter une logique de mise à jour du microprogramme et une charge utile à un pilote de fonction existant ou à fournir un pilote et un package de mise à jour du microprogramme distincts. Ce scénario entraîne des doublons entre les partenaires fournisseurs et augmente les coûts de maintenance globaux des lecteurs de stockage. Pour en savoir plus sur les pilotes universels, veuillez consulter la section Utilisation d’un fichier INF universel.
L’utilisation de Windows 10, version 2004 (build du système d’exploitation 19041.488 ou version ultérieure) permet de mettre à jour le microprogramme de lecteur NVMe via un pilote fourni par Microsoft et un package de mise à jour du microprogramme d’un fournisseur de matériel. Cette solution peut être distribuée via Windows Update aux lecteurs et appareils ciblés avec des ID matériels d’ordinateur (CHID).
Avertissement
La mise à jour du microprogramme est une opération de maintenance qui peut présenter des risques. Elle ne doit être distribuée qu’après avoir testé de manière approfondie la nouvelle image du microprogramme. Le nouveau microprogramme peut nuire à la fiabilité et à la stabilité d’un matériel non pris en charge, voire entraîner une perte de données.
Compatibilité des lecteurs
Pour mettre à jour le microprogramme de lecteur avec Windows 10, ces lecteurs doivent être pris en charge. Pour garantir un comportement normal des appareils, Windows 10 définit des spécifications facultatives pour les appareils NVMe à travers notre Kit d’évaluation de matériel en laboratoire (HLK). Ces spécifications décrivent les commandes qu’un lecteur de stockage NVMe doit prendre en charge pour envisager une mise à jour du microprogramme à l’aide de la nouvelle solution basée sur Windows Update.
Pour savoir si votre matériel prend en charge la mise à jour Windows du microprogramme des lecteurs, veuillez contacter votre fournisseur de solutions.
Spécifications de compatibilité des appareils Windows pour NVMe : Device.Storage.ControllerDrive.NVMe - sections 5.7 et 5.8
Device.Storage.ControllerDrive.NVMe.BasicFunction
L’appareil doit avoir au moins un emplacement du microprogramme pouvant être mis à jour.
5.7 Validation du microprogramme
L’activation d’une image du microprogramme doit être effectuée sans nécessiter de cycle d’alimentation de l’appareil.
Le processus d’activation doit être effectué via une réinitialisation initiée par l’hôte, comme décrit dans la section 8.1 de la version 1.2a de la spécification.
Windows utilise les actions de validation 001b ou 010b lors de l’émission d’une commande de validation du microprogramme.
Les valeurs d’achèvement attendues pour l’activation réussie sans cycle d’alimentation sont 00h (réussite générique), 10h ou 11h.
Si 0Bh est retourné comme état d’achèvement, Windows informe l’utilisateur qu’il doit effectuer un cycle d’alimentation de l’appareil. Cela est fortement déconseillé, car ça empêche la mise à jour du microprogramme au moment de l’exécution du système d’exploitation et provoque une interruption significative de la charge de travail.
5.8 Téléchargement de l’image du microprogramme
- L’appareil ne doit pas manquer d’E/S pendant la phase de téléchargement et doit continuer à servir des E/S.
Pour en savoir plus, veuillez consulter les spécifications de compatibilité des appareils Windows pour device.Storage.ControllerDrive.NVMe - sections 5.7 et 5.8, situées dans le document Components and Peripherals.pdf disponible dans le fichier de téléchargement WHCP_Documents_Windows 11, version 24H2.zip.
Identificateurs SCSI pour les lecteurs de disque de stockage NVMe
À partir de Windows 10, version 2004 (build du système d’exploitation 19041.488 ou version ultérieure), deux nouveaux identificateurs sont disponibles pour les lecteurs de disque de stockage NVMe via des pilotes prenant en charge la structure STOR_RICH_DEVICE_DESCRIPTION :
SCSI\t*v(8)p(40)
Où :
- t* est un code de type d’appareil de longueur variable.
- v(8) est un identificateur de fournisseur de 8 caractères.
- p(40) est un identificateur de produit de 40 caractères
SCSI\t*v(8)p(40)r(8)
Où :
- t* est un code de type d’appareil de longueur variable.
- v(8) est un identificateur de fournisseur de 8 caractères.
- p(40) est un identificateur de produit de 40 caractères
- r(8) est une valeur de niveau de révision de 8 caractères.
L’identificateur SCSI\t*v(8)p(40)r(80
fournit un nom complet de produit (aligné sur la spécification NVME 1.4) et permet la création d’un nœud de composant logiciel (SWC) pour les mises à jour du microprogramme pour les lecteurs NVME correspondant à ce nom (jusqu’à 40 caractères et révisions du microprogramme de 8 caractères).
Pour en savoir plus, veuillez consulter Identificateurs pour les appareils SCSI et STOR_RICH_DEVICE_DESCRIPTION
Détails de la solution de mise à jour du microprogramme de stockage (SFU)
Dans le diagramme suivant, Windows 10 fournit le pilote de fonction (stornvme.sys) et le pilote de mise à jour du microprogramme (storfwupdate.dll). Pour utiliser le pilote fourni par Microsoft pour mettre à jour le microprogramme de lecteur NVMe, deux soumissions de pilotes distinctes sont requises.
Package 1 : créer une identité pour la mise à jour du microprogramme de lecteur
Ce package contient généralement les éléments suivants :
INF d’extension pour créer un nœud de périphérique logiciel pour agir en tant que matériel ciblé indépendamment pour le package de mise à jour du microprogramme
Catalogue de pilotes
Envoyez votre package d’INF d’extension en tant que soumission de pilote distincte.
Toutefois, de nombreux types d’appareils n’autorisent pas un seul appareil physique à énumérer plusieurs nœuds d’appareil. Dans ce cas, utilisez un INF d’extension qui spécifie la directive AddComponent pour créer un nœud d’appareil ciblé par Windows Update et installer le pilote de mise à jour du microprogramme sur celui-ci. L’extrait d’un fichier INF ci-dessous montre comment créer le nœud d’appareil :
[Manufacturer]
%Contoso%=Standard,NTamd64
[Standard.NTamd64]
%DeviceName%=Device_Install, SCSI\DiskNVMe____StorageIHVabcd
[StorageIHVabcd.Components]
AddComponent= StorageIHVabcd_component,,StorageIHVabcd_ComponentInstall
[StorageIHVabcd_ComponentInstall]
ComponentIDs = StorageIHVabcd-firmware-update
Dans cet exemple d’INF, ComponentIDs = StorageIHVabcd-firmware-update
indique que l’appareil enfant aura un ID matériel de SWC\StorageIHVabcd-firmware-update. Une fois installé, cet INF crée la hiérarchie d’appareils ci-dessous :
Un exemple d’INF d’extension pour créer une identité pour les mises à jour du microprogramme de lecteur est fourni ci-dessous. Étant donné que le matériel SCSI\DiskNVMe____StorageIHVabcd peut ne pas être unique entre les fabricants de matériel, l’INF d’extension doit utiliser le ciblage CHID pour la distribution.
Package 2 : package de mise à jour du microprogramme de lecteur
Ce package contient généralement les éléments suivants :
INF de pilote universel du microprogramme de classe
Binaire de charge utile de mise à jour du microprogramme
Catalogue de pilotes
Envoyez votre package du microprogramme en tant que soumission de pilote distincte.
Le package INF de mise à jour du microprogramme de lecteur cible le nouveau nœud SWC\StorageIHVabcd-firmwareupdate et appelle le pilote de mise à jour du microprogramme de stockage Windows 10. Pour qu’un appareil de composant énuméré par logiciel fonctionne, son parent doit être démarré. Pour utiliser le lecteur StorFwUpdate, les développeurs doivent utiliser les directives INF Include/Needs de la section DDInstall pour chaque section [DDInstall.*]
possible aux sections [StorFwUpdate.*]
correspondantes, comme indiqué ici, que l’INF spécifie les directives pour cette section ou non :
[StorFwUpdateOem.NT]
Include = StorFwUpdate.inf
Needs = StorFwUpdate.NT
CopyFiles = StorFwUpdateOem.CopyFiles
[StorFwUpdateOem.NT.Wdf]
Include = StorFwUpdate.inf
Needs = StorFwUpdate.NT.Wdf
[StorFwUpdateOem.NT.Services]
Include = StorFwUpdate.inf
Needs = StorFwUpdate.NT.Services
Pour en savoir plus, veuillez consulter Utilisation d’un fichier INF de composant. Un exemple de fichier INF de mise à jour du microprogramme de lecteur NVMe est fourni ci-dessous. Étant donné que l’identité logicielle SWC\StorageIHVabcd-firmwareupdate peut ne pas être unique entre les fabricants de matériel, l’INF doit utiliser le ciblage CHID pour la distribution Windows Update.
Le composant StorFwUpdate n’effectue aucune validation (vérification de signature ou déchiffrement) de la charge utile binaire du microprogramme. Si ce niveau de fonctionnalité est requis, les partenaires fournisseurs de matériel peuvent écrire leur propre pilote de mise à jour du microprogramme de stockage.
Exemple de mise à jour du microprogramme de lecteur de stockage
Étant donné que les deux INF nécessitent des CHID pour la distribution Windows Update, les partenaires fournisseurs de matériel peuvent valider la solution localement via PNPUTIL.EXE, comme indiqué ci-dessous.
Spécifications
Windows 10, version 2004 (build du système d’exploitation 19041.488 ou version ultérieure).
Appareil avec lecteur de stockage NVMe à l’aide d’un pilote de boîte de réception stornvme.sys
Binaire du microprogramme de lecteur NVMe
Fichiers INF correctement créés
Afficher la version actuelle du microprogramme du lecteur NVMe
Pour afficher la version actuelle du microprogramme du lecteur NVMe :
Ouvrez une fenêtre PowerShell en tant qu’administrateur.
Tapez
Get-PhysicalDisk | Get-StorageFirmwareInformation
pour afficher la version actuelle du microprogramme du lecteur NVMe.
Notez les valeurs ActiveSlotNumber et FirmwareVersionInSlot actuelles.
Pour en savoir plus, veuillez consulter Get-StorageFirmwareInformation.
Installer l’INF d’extension pour créer une identité matérielle logicielle
Accédez au répertoire de votre système qui contient le fichier INF du package d’extension de pilote. Par exemple, saisissez
cd .\signed-DiskExtnPackage\
.Vérifiez que le fichier INF d’extension contient les informations des lecteurs que vous mettez à jour. Consultez le fichier INF d’extension de disque dans cet article pour obtenir un exemple d’INF d’extension.
Installez l’INF d’extension avec l’utilitaire Plug-and-Play Microsoft. Par exemple, dans une invite de commandes administrateur, tapez
pnputil /add-driver .\OEMDiskExtnPackage.inf /install
. À mesure que le nouveau nœud logiciel est créé en tant qu’enfant d’un périphérique critique au démarrage, un redémarrage est nécessaire pour prendre effet.
Afficher le nouveau nœud de composant logiciel (SWC)
Pour afficher le nouveau nœud SWC et l’ID matériel :
À partir du menu Démarrer Windows 10, ouvrez Panneau de configuration puis Gestionnaire de périphériques.
Dans Gestionnaire de périphériques, sélectionnez Lecteurs de disque, développez le nœud et sélectionnez le lecteur de disque que vous avez mis à jour.
Une fois que vous avez sélectionné le lecteur que vous avez mis à jour, dans le menu Affichage du Gestionnaire de périphériques, sélectionnez Périphériques par connexion.
Cliquez sur le nœud de lecteur sélectionné, puis cliquez pour développer. Vous allez voir un composant logiciel générique enfant sous le nœud de lecteur.
Cliquez avec le bouton droit sur le composant logiciel générique puis sélectionnez Propriétés.
Dans la boîte de dialogue Propriétés, sélectionnez l’onglet Détails puis sélectionnez ID matériel dans la liste déroulante Propriétés pour afficher l’ID matériel du composant logiciel générique sur le nœud de lecteur.
L’ID matériel de SWC\* doit correspondre à celui spécifié dans l’INF d’extension.
Afficher et installer la mise à jour du microprogramme de lecteur NVMe
Ouvrez une fenêtre PowerShell en tant qu’administrateur.
Accédez au répertoire de votre système qui contient le fichier INF de mise à jour du microprogramme de lecteur NVMe. Par exemple, saisissez
cd .\signed-ihv-firmware\
.Vérifiez que l’INF de mise à jour du microprogramme de disque contient les informations relatives aux lecteurs que vous mettez à jour. Consultez le fichier INF du microprogramme de disque dans cet article pour obtenir un exemple d’INF de mise à jour du microprogramme de disque.
Installez l’INF de mise à jour du microprogramme de disque avec l’utilitaire Plug-and-Play Microsoft. Par exemple, dans une invite de commandes administrateur, tapez
pnputil /add-driver .\StorFwUpdateIHV.inf /install
.Ouvrez une fenêtre PowerShell en tant qu’administrateur.
Tapez
Get-PhysicalDisk | Get-StorageFirmwareInformation
pour afficher les informations du microprogramme de lecteur NVMe mises à jour.
Affichez les informations du microprogramme de lecteur NVMe mises à jour dans les valeurs ActiveSlotNumber et FirmwareVersionInSlot.
Pour en savoir plus, veuillez consulter Get-StorageFirmwareInformation.
Déployer les packages d’INF d’extension et du microprogramme via Windows Update
Tout d’abord, validez le déploiement du package via Windows Update avec l’aide Publication pour la distribution de test.
Ensuite, déployez le package via Windows Update à l’aide des CHID appropriés.
Pour en savoir plus sur le déploiement, veuillez consulter le Workflow de publication du pilote Windows 10 (téléchargement DOCX).
Exemple INF d’extension de disque
Voici un exemple de fichier INF d’extension :
;/*++
;
; Copyright (c) Microsoft Corporation. All rights reserved.
;
; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
; PURPOSE.
;
; File:
;
; OEMDiskExtnPackage.inx
;
; Description:
;
; INF file for installing the OEMDiskExtnPackage. This will create a SWC\ DevNode
; which will service as the target HWID for the Disk storage firmware package.
;
;--*/
[Version]
Signature="$Windows NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = %ManufacturerName%
ExtensionId = {D91908BD-43FA-411B-92A1-C378AE5AF9FA}
CatalogFile = delta.cat
DriverVer = 08/26/2019,1.0.0.0
PnpLockdown = 1
[SourceDisksNames]
1 = %DiskName%
[Manufacturer]
%ManufacturerName%=Standard,NTamd64
[Standard.NTamd64]
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV1-87B, SCSI\DiskNVMe____StorageIHV1-87B
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV1-87A, SCSI\DiskNVMe____StorageIHV1-87A
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV2_KUS02020, SCSI\DiskNVMe____StorageIHV2_KUS02020
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV3_KBG40ZPZ512G, SCSI\DiskNVMe____KBG40ZPZ512G_IHV300Y9
%OEMDiskExtnPackage.DeviceDesc%=StorageIHV3_KBG40ZPZ512G, SCSI\DiskNVMe____KBG40ZPZ512G_IHV30015
[StorageIHV1-87B.NT]
[StorageIHV1-87B.NT.Components]
AddComponent = StorageIHV1-87B_component,,StorageIHV1-87B_ComponentInstall
[StorageIHV1-87B_ComponentInstall]
ComponentIds=StorageIHV1-87B
[StorageIHV1-87A.NT]
[StorageIHV1-87A.NT.Components]
AddComponent = StorageIHV1-87A_component,,StorageIHV1-87A_ComponentInstall
[StorageIHV1-87A_ComponentInstall]
ComponentIds=StorageIHV1-87A
[StorageIHV2_KUS02020.NT]
[StorageIHV2_KUS02020.NT.Components]
AddComponent = StorageIHV2_KUS02020_component,,StorageIHV2_KUS02020_ComponentInstall
[StorageIHV2_KUS02020_ComponentInstall]
ComponentIds=StorageIHV2_KUS02020
[StorageIHV3_KBG40ZPZ512G.NT]
[StorageIHV3_KBG40ZPZ512G.NT.Components]
AddComponent = StorageIHV3_KBG40ZPZ512G_component,,StorageIHV3_KBG40ZPZ512G_ComponentInstall
[StorageIHV3_KBG40ZPZ512G_ComponentInstall]
ComponentIds=StorageIHV3_KBG40ZPZ512G
;*****************************************
; Strings section
;*****************************************
[Strings]
ManufacturerName = "OEM"
DiskName = "OEM Disk Extn package Installation Disk"
OEMDiskExtnPackage.DeviceDesc = "Disk Extn Package"
OEMDiskExtnPackage.SVCDESC = "Disk Extn Package"
;Non-Localizable
REG_EXPAND_SZ = 0x00020000
REG_DWORD = 0x00010001
REG_MULTI_SZ = 0x00010000
REG_BINARY = 0x00000001
REG_SZ = 0x00000000
SERVICE_KERNEL_DRIVER = 0x1
SERVICE_ERROR_IGNORE = 0x0
SERVICE_ERROR_NORMAL = 0x1
SERVICE_ERROR_SEVERE = 0x2
SERVICE_ERROR_CRITICAL = 0x3
Exemple d’INF du microprogramme de disque
Voici un exemple de fichier INF du microprogramme de disque :
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Copyright (c) Microsoft Corporation. All rights reserved.
;
; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
; PURPOSE.
;
; File:
;
; StorageIHV3-Firmware-Update.inx
;
; Description:
;
; Driver installation file for firmware update.
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[Version]
Signature="$Windows NT$"
Class=Firmware
ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
Provider=%ManufacturerName%
CatalogFile=delta.cat
DriverVer=08/26/2019,11.37.9.948
PnPLockDown=1
[SourceDisksNames]
1= %DiskName%
[DestinationDirs]
StorFwUpdateOem.CopyFiles=13
[Manufacturer]
%ManufacturerName%=Standard,NTamd64
[Standard.NTamd64]
%StorFwUpdateOem.DeviceDesc%=StorFwUpdateOem, SWC\StorageIHV3_KBG40ZPZ512G
[StorFwUpdateOem.NT]
Include = StorFwUpdate.inf
Needs = StorFwUpdate.NT
CopyFiles = StorFwUpdateOem.CopyFiles
[StorFwUpdateOem.NT.Wdf]
Include = StorFwUpdate.inf
Needs = StorFwUpdate.NT.Wdf
[StorFwUpdateOem.NT.HW]
AddReg = StorFwUpdateOem_HWAddReg
[StorFwUpdateOem_HWAddReg]
HKR,,FriendlyName,,%FwUpdateFriendlyName%
; Specify the location of the firmware offer and payload file in the registry.
; The files are kept in driver store. When deployed, %13% would be expanded to the actual path
; in driver store.
;
HKR,0D9EB3D6-6F14-4E8A-811B-F3B19F7ED98A\0,FirmwareImageVersion, 0x00000000, "AEMS0102"
HKR,0D9EB3D6-6F14-4E8A-811B-F3B19F7ED98A\0,FirmwareFileName, 0x00000000, %13%\AEMS0102.sig
[SourceDisksFiles]
AEMS0102.sig=1
[StorFwUpdateOem.CopyFiles]
AEMS0102.sig
[StorFwUpdateOem.NT.Services]
Include = StorFwUpdate.inf
Needs = StorFwUpdate.NT.Services
; =================== Generic ==================================
[Strings]
ManufacturerName="{Your Manufacturer Name}"
StorFwUpdateOem.DeviceDesc = "Storage Firmware Update (StorageIHV3) 1"
DiskName = "Storage Firmware Update Installation Disk"
FwUpdateFriendlyName= "StorageIHV3 Firmware Update"