Compartir a través de


Controlador de actualización de firmware de almacenamiento (SFU)

La actualización del firmware de las unidades de almacenamiento NVMe ha dependido de los proveedores de hardware para crear aplicaciones de actualización de firmware que utilizan IOCTLs 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 están 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 costos de soporte técnico y problemas de satisfacción del cliente para los fabricantes de hardware.

Windows 10 en modo S funciona exclusivamente con aplicaciones de Microsoft Store dentro de Windows y accesorios compatibles con Windows 10 en modo S. Hay disponible un conmutador unidireccional fuera del modo S. Para obtener más información, consulte windows.com/SmodeFAQ y Conmutación fuera del modo S en Windows.

La actualización del firmware del dispositivo mediante el servicio Windows Update (WU) con 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 el payload a un controlador de función existente o proporcionen un controlador de actualización de firmware y un paquete de forma independiente. Este escenario da como resultado un trabajo duplicado entre asociados de hardware y aumenta los costos generales de mantenimiento de las unidades de almacenamiento. Para obtener más información sobre los controladores universales, vea Uso de un archivo INF universal.

Usar Windows 10, versión 2004 (compilación del sistema operativo 19041.488 o posterior) 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 de equipo (CHID).

Advertencia

Las actualizaciones de firmware son una operación de mantenimiento potencialmente arriesgada y solo deben distribuirse después de realizar pruebas exhaustivas de la nueva imagen de firmware. Es posible que el nuevo firmware en hardware no compatible pueda afectar negativamente a la confiabilidad y la estabilidad, o incluso provocar la pérdida de datos.

Compatibilidad de discos

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 sea actualizable de firmware mediante la nueva solución basada en Windows Update.

Póngase en contacto con el proveedor de la solución para obtener información sobre si el hardware admite la actualización de Windows del 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 actualizable.

5.7 Confirmación del firmware

  • La activación de una imagen de firmware debe realizarse sin necesidad de un ciclo de alimentación del dispositivo.

  • Se espera que el proceso de activación se logre a través de un restablecimiento iniciado por el host, como se describe en la sección 8.1 de la especificación 1.2a.

  • 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 exitosa sin un ciclo de energía son 00h (éxito genérico), 10h o 11h.

  • Si se devuelve 0Bh como estado de finalización, Windows informará al usuario de que realice un ciclo de alimentación del dispositivo. Esto es muy desaconsejado, 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.

Descarga de imágenes de firmware 5.8

  • El dispositivo no debe producir un error de E/S durante la fase de descarga y seguirá atendiendo la E/S.

Para obtener más información, consulte los requisitos de COMPAT del dispositivo Windows para Device.Storage.ControllerDrive.NVMe - secciones 5.7 y 5.8, que se encuentran en los Componentes y Peripherals.pdf disponibles 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 del sistema operativo 19041.488 o posterior), hay dos nuevos identificadores disponibles para las unidades de disco de almacenamiento NVMe mediante controladores que admiten la estructura de 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 SCSI\t*v(8)p(40)r(80 identificador 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 para dispositivos SCSI y STOR_RICH_DEVICE_DESCRIPTION

Detalles de la solución de actualización de 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.

detalles de actualización del firmware de almacenamiento.

Paquete 1: creación de una identidad para la actualización del firmware de la unidad

Normalmente, este paquete contiene los siguientes elementos:

  • Extensión INF 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 una presentación de controlador separada.

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 una extensión INF 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 código 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 INF, ComponentIDs = StorageIHVabcd-firmware-update indica que el dispositivo secundario tendrá un identificador de hardware SWC\StorageIHVabcd-firmware-update. Cuando se instala, este INF crea la siguiente jerarquía de dispositivos:

Jerarquía de dispositivos I N F.

A continuación se proporciona una extensión de ejemplo INF para crear una nueva identidad para las actualizaciones de firmware de unidad. Dado que el hardware SCSI\DiskNVMe____StorageIHVabcd puede no ser único en todos los fabricantes de hardware, la extensión INF debe usar el destino de CHID para la distribución.

Paquete 2: paquete de actualización del firmware para la unidad

Normalmente, este paquete contiene lo siguiente:

  • 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 una presentación de controlador independiente.

El paquete de actualización de firmware de 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 dispositivo padre. Para usar la unidad StorFwUpdate, los desarrolladores deben usar las directivas Include/Needs INF de la sección DDInstall para cada sección posible [DDInstall.*] a las secciones correspondientes [StorFwUpdate.*], 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 archivo INF de actualización de firmware de unidad NVMe de ejemplo. Dado que la identidad de software SWC\StorageIHVabcd-firmwareupdate puede no ser única en todos los fabricantes de hardware, el INF debe utilizar la focalización de CHID para la distribución a través 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 del sistema operativo 19041.488 o posterior)

  • Dispositivo con unidad de almacenamiento NVMe utilizando el controlador integrado stornvme.sys

  • Binario de firmware de 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:

  1. Abra una ventana de PowerShell como administrador.

  2. Escriba Get-PhysicalDisk | Get-StorageFirmwareInformation para ver la versión actual del firmware del disco NVMe.

    versión actual del firmware del disco N V M.

Anote los valores activeSlotNumber y FirmwareVersionInSlot actuales.

Para obtener más información, consulte Get-StorageFirmwareInformation.

Instalación de la extensión INF para crear una nueva identidad de hardware de software

  1. Vaya al directorio del sistema que contiene el archivo INF del paquete de extensión del controlador. Por ejemplo, escriba cd .\signed-DiskExtnPackage\.

  2. Compruebe que el archivo INF de extensión contiene la información de las unidades que está actualizando. Consulte el Archivo INF de extensión del disco en este artículo para ver un ejemplo de extensión INF.

  3. Instale la extensión INF con la utilidad Microsoft PnP. 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 un reinicio para surtir efecto.

     salida del comando p n p util.

Visualización del nuevo nodo de componente de software (SWC)

Para ver el nuevo nodo SWC y el identificador de hardware:

  1. En el menú Inicio de Windows 10, abra el Panel de control y, a continuación, abra administrador de dispositivos.

  2. En el Administrador de dispositivos, seleccione Unidades de disco, expanda el nodo y seleccione la unidad de disco que ha actualizado.

  3. Una vez que haya seleccionado la unidad que ha actualizado, en el menú Vistadel Administrador de dispositivos, seleccione Dispositivos por conexión.

  4. Haga clic en el nodo de unidad seleccionado y luego haga clic para expandir. Verá un componente de software genérico secundario en el nodo de unidad.

  5. Haga clic con el botón derecho en el componente de software genérico y seleccione Propiedades.

  6. 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 del componente de software genérico en el nodo de unidad.

  7. El id. de hardware SWC\* debe coincidir con el especificado en la extensión INF.

Visualización e instalación de la actualización del firmware del disco NVMe

  1. Abra una ventana de PowerShell como administrador.

  2. 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\.

  3. Compruebe que la actualización del firmware del disco INF contiene la información de las unidades que está actualizando. Consulte el archivo INF de firmware de disco en este artículo para ver un ejemplo de archivo INF para la actualización del firmware del disco.

  4. Instale la actualización del firmware del disco INF con la utilidad PnP de Microsoft. Por ejemplo, en un símbolo del sistema de administrador, escriba pnputil /add-driver .\StorFwUpdateIHV.inf /install.

  5. Abra una ventana de PowerShell como administrador.

  6. Escriba Get-PhysicalDisk | Get-StorageFirmwareInformation para ver la información actualizada del firmware del disco NVMe.

    se ha actualizado el firmware del disco N V M e.

Vea la información actualizada del firmware del disco NVMe en los valores ActiveSlotNumber y FirmwareVersionInSlot .

Para obtener más información, consulte Get-StorageFirmwareInformation.

Desplegar la extensión INF y los paquetes de 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 de 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, consulta Flujo de trabajo de publicación de controladores de Windows 10 (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 archivo 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"

Recursos adicionales

Identificadores para dispositivos SCSI

STOR_RICH_DEVICE_DESCRIPTION