Controlador Actualización de firmware de almacenamiento (SFU)
La actualización del firmware de las unidades de almacenamiento NVMe se ha basado en los proveedores de hardware para crear aplicaciones de actualización de firmware que usan las IOCTL de actualización de firmware específicas introducidas en Windows 10. Estas aplicaciones se distribuyen normalmente fuera de la canalización de Windows Update (WU). Los usuarios finales deben determinar qué discos de almacenamiento están en su dispositivo, obtener la utilidad de firmware de la unidad de almacenamiento correcta desde el sitio web de un fabricante y descargar e instalar manualmente las actualizaciones.
Además, los dispositivos que ejecutan Windows 10 en modo S tienen en una configuración de seguridad mejorada que solo permite a los usuarios ejecutar aplicaciones verificadas por Microsoft, por lo que es posible que las utilidades del proveedor no puedan actualizar el firmware de la unidad. Este proceso manual da como resultado una baja adopción de actualizaciones de firmware, aumenta los costes de soporte técnico y problemas de satisfacción del cliente para los fabricantes de hardware.
Nota:
Windows 10 en modo S funciona exclusivamente con aplicaciones de Microsoft Store dentro de Windows y accesorios que sean compatibles con Windows 10 en modo S. Hay disponible un conmutador unidireccional fuera del modo S. Obtenga más información en windows.com/SmodeFAQ.
La actualización del firmware del dispositivo mediante el servicio Windows Update (WU) mediante una solución basada en controladores está disponible para los proveedores de hardware y requiere que agreguen la lógica de actualización de firmware y carga a un controlador de función existente o proporcionen un paquete y un controlador de actualización de firmware independientes. Este escenario da como resultado un trabajo duplicado entre asociados de hardware y aumenta los costes generales de mantenimiento de las unidades de almacenamiento. Para obtener más información sobre los controladores universales, consulte Uso de un archivo INF universal.
Cuando se usa Windows 10, versión 2004 (compilación 19041.488 o posterior del sistema operativo) es posible actualizar el firmware de la unidad NVMe mediante un controlador proporcionado por Microsoft y un paquete de actualización de firmware proporcionado por el proveedor de hardware. Esta solución se puede distribuir a través de Windows Update a unidades y dispositivos de destino mediante identificadores de hardware del equipo (CHID).
Advertencia
Las actualizaciones de firmware son una operación de mantenimiento potencialmente peligrosa y solo se deben distribuir después de realizar pruebas minuciosas de la nueva imagen de firmware. Es posible que el nuevo firmware en hardware no compatible afecte negativamente a la estabilidad y la confiabilidad o que incluso provoque la pérdida de datos.
Compatibilidad con las unidades
Para usar Windows 10 para actualizar el firmware de la unidad, debe tener unidades compatibles. Para garantizar el comportamiento común del dispositivo, Windows 10 especifica los requisitos opcionales del Kit de laboratorio de hardware (HLK) para dispositivos NVMe. Estos requisitos describen qué comandos debe admitir una unidad de almacenamiento NVMe para que se pueda actualizar su firmware mediante la nueva solución basada en Windows Update.
Póngase en contacto con su proveedor de soluciones para obtener información sobre si el hardware admite que Windows actualice Windows el firmware de la unidad.
Requisitos de COMPAT de dispositivos Windows para NVMe: Device.Storage.ControllerDrive.NVMe: secciones 5.7 y 5.8
Device.Storage.ControllerDrive.NVMe.BasicFunction
El dispositivo debe tener al menos una ranura de firmware que se pueda actualizar.
5.7 Confirmación del firmware
La activación de una imagen de firmware debe realizarse sin necesidad de apagar y encender el dispositivo.
Se espera que el proceso de activación se logre mediante un reinicio iniciado por el host, como se describe en la sección 8.1 de la versión 1.2a de especificación.
Windows usará acciones de confirmación 001b o 010b al emitir un comando de confirmación de firmware.
Los valores de finalización esperados para la activación correcta sin apagar y encender son 00h (éxito genérico), 10h u 11h.
Si se devuelve 0Bh como estado de finalización, Windows informará al usuario de que realice un apagado y encendido del dispositivo. Esto se desaconseja encarecidamente, ya que impide la actualización del firmware en tiempo de ejecución del sistema operativo y provoca una interrupción significativa de la carga de trabajo.
5.8 Descarga de imágenes de firmware
- El dispositivo no debe fallar en la E/S durante la fase de descarga y debe continuar proporcionando servicios de E/S.
Para obtener más información, consulte los requisitos COMPAT del dispositivo Windows para Device.Storage.ControllerDrive.NVMe, secciones 5.7 y 5.8, ubicados en Componentes y periféricos.pdf disponible en el archivo de descarga WHCP_Documents_Windows 11, versión 24H2.zip.
Identificadores SCSI para unidades de disco de almacenamiento NVMe
A partir de Windows 10, versión 2004 (compilación 19041.488 o posterior del sistema operativo), hay dos nuevos identificadores disponibles para las unidades de disco de almacenamiento NVMe mediante controladores que admiten la estructura STOR_RICH_DEVICE_DESCRIPTION:
SCSI\t*v(8)p(40)
Donde:
- t* es un código de tipo de dispositivo de longitud variable.
- v(8) es un identificador de proveedor de 8 caracteres.
- p(40) es un identificador de producto de 40 caracteres
SCSI\t*v(8)p(40)r(8)
Donde:
- t* es un código de tipo de dispositivo de longitud variable.
- v(8) es un identificador de proveedor de 8 caracteres.
- p(40) es un identificador de producto de 40 caracteres
- r(8) es un valor de nivel de revisión de 8 caracteres.
El identificador SCSI\t*v(8)p(40)r(80
proporciona un nombre de producto completo (alineado con la especificación NVME 1.4) y permite la creación de un nodo de componente de software (SWC) para las actualizaciones de firmware de las unidades NVME que coinciden con este nombre (hasta 40 caracteres y 8 caracteres de revisión de firmware).
Para obtener más información, consulte Identificadores de dispositivos SCSI y STOR_RICH_DEVICE_DESCRIPTION.
Detalles de la solución Actualización del firmware de almacenamiento (SFU)
En el diagrama siguiente, Windows 10 proporciona tanto el controlador de funciones (stornvme.sys) como el controlador de actualización de firmware (storfwupdate.dll). Para usar el controlador proporcionado por Microsoft para actualizar el firmware de la unidad NVMe, se requieren dos envíos de controladores independientes.
Paquete 1: creación de una identidad para la actualización del firmware de la unidad
Normalmente, este paquete contiene los siguientes elementos:
INF de extensión para crear un nodo de dispositivo de software que actúe como hardware de destino independiente para el paquete de actualización de firmware
Catálogo de controladores
Envíe el paquete INF de extensión como un envío de controlador independiente.
Sin embargo, muchos tipos de dispositivos no permiten que un único dispositivo físico enumere más de un nodo de dispositivo. En este caso, use un INF de extensión que especifique la directiva AddComponent para crear un nodo de dispositivo destinado a Windows Update e instalar el controlador de actualización de firmware en él. El siguiente fragmento de un archivo INF muestra cómo crear el nodo del dispositivo:
[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
En este ejemplo de INF, ComponentIDs = StorageIHVabcd-firmware-update
indica que el dispositivo secundario tendrá un identificador de hardware de SWC\StorageIHVabcd-firmware-update. Cuando se instala, este INF crea la siguiente jerarquía de dispositivos:
Un INF de extensión de ejemplo para crear una nueva identidad para las actualizaciones de firmware de unidad. Dado que el hardware SCSI\DiskNVMe____StorageIHVabcd puede no ser único en los fabricantes de hardware, el INF de extensión debe usar el destino CHID para su distribución.
Paquete 2: paquete de actualización de firmware de la unidad
Normalmente, este paquete contiene los siguientes elementos:
INF del controlador universal de la clase firmware
Archivo binario de carga de actualización de firmware
Catálogo de controladores
Envíe el paquete de firmware como un envío de controlador independiente.
El paquete de actualización de firmware de la unidad INF tiene como destino el nuevo nodo SWC\StorageIHVabcd-firmwareupdate e invoca el controlador de actualización de firmware de almacenamiento de Windows 10. Para que un dispositivo de componente enumerado por software funcione, se debe iniciar su elemento primario. Para usar la unidad StorFwUpdate, los desarrolladores deben usar las directivas Include/Needs INF de la sección DDInstall para cada sección [DDInstall.*]
posible en las secciones [StorFwUpdate.*]
correspondientes, como se muestra aquí, independientemente de si el INF especifica o no directivas para esa sección:
[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
Para obtener más información, consulte Uso de un archivo INF de componentes. A continuación se proporciona un ejemplo de archivo INF de actualización de firmware de la unidad NVMe. Dado que la identidad de software SWC\StorageIHVabcd-firmwareupdate puede no ser única en los fabricantes de hardware, el INF de extensión debe usar el destino CHID para la distribución de Windows Update.
El componente StorFwUpdate no realiza ninguna validación (comprobación o descifrado de firmas) de la carga binaria de firmware. Si se requiere este nivel de característica, los asociados de hardware pueden escribir su propio controlador de actualización de firmware de almacenamiento.
Ejemplo de actualización de firmware de la unidad de almacenamiento
Dado que ambas INF requieren CHID para la distribución de Windows Update, los asociados de hardware pueden validar la solución localmente mediante PNPUTIL.EXE como se muestra a continuación.
Requisitos
Windows 10, versión 2004 (compilación 19041.488 o superior del sistema operativo)
Dispositivo con unidad de almacenamiento NVMe mediante el controlador de bandeja de entrada stornvme.sys
Binario de firmware de la unidad NVMe
Archivos INF creados correctamente
Visualización de la versión actual del firmware del disco NVMe
Para ver la versión actual del firmware del disco NVMe:
Abra una ventana de PowerShell como administrador.
Escriba
Get-PhysicalDisk | Get-StorageFirmwareInformation
para ver la versión actual del firmware del disco NVMe.
Anote los valores ActiveSlotNumber y FirmwareVersionInSlot actuales.
Para más información, consulte Get-StorageFirmwareInformation.
Instalación del INF de extensión para crear una nueva identidad de software y hardware
Vaya al directorio del sistema que contiene el archivo INF del paquete de extensión del controlador. Por ejemplo, escriba
cd .\signed-DiskExtnPackage\
.Compruebe que el archivo INF de extensión contiene la información para las unidades que se están actualizando. Consulte archivo INF de extensión de disco en este artículo para obtener un ejemplo del INF de extensión.
Instale el INF de extensión con la utilidad PnP de Microsoft. Por ejemplo, en un símbolo del sistema de administrador, escriba
pnputil /add-driver .\OEMDiskExtnPackage.inf /install
. A medida que el nuevo nodo de software se crea como elemento secundario de un dispositivo crítico para el arranque, se requiere el reinicio para que surta efecto.
Visualización del nuevo nodo de componente de software (SWC)
Para ver el nuevo nodo SWC y el identificador de hardware:
En el menú Inicio de Windows 10, abra Panel de control y, a continuación, abra Administrador de dispositivos.
En Administrador de dispositivos, seleccione Unidades de disco, expanda el nodo y seleccione la unidad de disco que ha actualizado.
Una vez que haya seleccionado la unidad que ha actualizado, en el menú Administrador de dispositivos Ver, seleccione Dispositivos por conexión.
Haga clic en el nodo de unidad seleccionado y, a continuación, haga clic para expandir. Verá un componente de software genérico secundario en el nodo de la unidad.
Haga clic con el botón derecho en el componente de software genérico y seleccione Propiedades.
En la ventana del cuadro de diálogo Propiedades, seleccione la pestaña Detalles y, a continuación, seleccione Identificadores de hardware en la lista desplegable Propiedad para ver el identificador de hardware para el componente de software genérico en el nodo de la unidad.
El SWC\* identificador de hardware debe coincidir con el especificado en el INF de extensión.
Visualización e instalación de la actualización del firmware del disco NVMe
Abra una ventana de PowerShell como administrador.
Vaya al directorio del sistema que contiene el archivo INF de actualización del firmware del disco NVMe. Por ejemplo, escriba
cd .\signed-ihv-firmware\
.Compruebe que el archivo INF de actualización del firmware contiene la información de las unidades que se están actualizando. Consulte el archivo INF de firmware de disco en este artículo para obtener un ejemplo de INF de actualización de firmware de disco.
Instale el INF de actualización del firmware del disco con la utilidad PnP de Microsoft. Por ejemplo, en un símbolo del sistema de administrador, escriba
pnputil /add-driver .\StorFwUpdateIHV.inf /install
.Abra una ventana de PowerShell como administrador.
Escriba
Get-PhysicalDisk | Get-StorageFirmwareInformation
para ver la información actualizada del firmware del disco NVMe.
Vea la información actualizada del firmware del disco NVMe en los valores ActiveSlotNumber y FirmwareVersionInSlot.
Para más información, consulte Get-StorageFirmwareInformation.
Implementación de los paquetes INF de extensión y firmware a través de Windows Update
En primer lugar, valide la implementación del paquete a través de Windows Update mediante la guía Publicación para la distribución de pruebas.
A continuación, implemente el paquete a través de Windows Update con los CHID adecuados.
Para obtener información sobre la implementación, consulte el archivo sobre el lujo de trabajo de publicación de controladores de Windows 10 Windows 10 Driver Publishing Workflow (descarga de DOCX).
Ejemplo INF de extensión de disco
A continuación se muestra un archivo INF de extensión de ejemplo:
;/*++
;
; 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
Ejemplo de INF de firmware de disco
A continuación se muestra un archivo INF de firmware de disco de ejemplo:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; 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"