Driver SFU (Atualização de Firmware de Armazenamento)

A atualização do firmware para unidades de armazenamento NVMe contou com fornecedores de hardware para criar aplicativos de atualização de firmware que utilizam IOCTLs específicos de atualização de firmware introduzidos no Windows 10. Esses aplicativos normalmente são distribuídos fora do pipeline do WU (Windows Update). Os usuários finais precisam determinar quais discos de armazenamento estão em seu dispositivo, obter o utilitário de firmware de unidade de armazenamento correto do site do fabricante e baixar e instalar manualmente as atualizações.

Além disso, os dispositivos que executam o Windows 10 no modo S estão em uma configuração de segurança aprimorada que só permite que os usuários executem aplicativos verificados pela Microsoft, portanto, os utilitários de fornecedor podem não atualizar o firmware da unidade. Esse processo manual resulta na baixa adoção de atualizações de firmware, aumenta os custos de suporte e problemas de satisfação do cliente para os fabricantes de hardware.

O Windows 10 no modo S funciona exclusivamente com aplicativos da Microsoft Store no Windows e acessórios compatíveis com o Windows 10 no modo S. É possível sair do modo S de maneira unidirecional. Para obter mais informações, consulte windows.com/SmodeFAQ e Alternar para fora do modo S no Windows.

A atualização do firmware do dispositivo usando o serviço WU (Windows Update) usando uma solução baseada em driver está disponível para os fornecedores de hardware e exige que eles adicionem lógica de atualização de firmware e conteúdo a um driver de função existente ou forneçam um driver e pacote de atualização de firmware separados. Esse cenário resulta em trabalho duplicado entre parceiros de hardware e aumenta os custos gerais de manutenção das unidades de armazenamento. Para obter mais informações sobre drivers universais, consulte Como usar um arquivo INF universal.

Utilizando o Windows 10, versão 2004 (build do sistema operacional 19041.488 ou superior), é possível atualizar o firmware de unidade NVMe usando um driver fornecido pela Microsoft e um pacote de atualização de firmware fornecido pelo fornecedor de hardware. Essa solução pode ser distribuída por meio do Windows Update para unidades e dispositivos de destino usando IDs de Hardware do Computador (CHIDs).

Aviso

As atualizações de firmware são uma operação de manutenção potencialmente arriscada e só devem ser distribuídas após o teste completo da nova imagem de firmware. É possível que o novo firmware em hardware sem suporte possa afetar negativamente a confiabilidade e a estabilidade ou até mesmo causar perda de dados.

Compatibilidade de disco

Para usar o Windows 10 para atualizar o firmware da unidade, você deve ter unidades compatíveis. Para garantir o comportamento comum do dispositivo, o Windows 10 especifica requisitos opcionais do Hardware Lab Kit (HLK) para dispositivos NVMe. Esses requisitos descrevem quais comandos uma unidade de armazenamento NVMe deve dar suporte para ser firmware-updatable usando a nova solução baseada no Windows Update.

Entre em contato com o fornecedor da solução para obter informações sobre se o hardware dá suporte ao Windows atualizando o firmware da unidade.

Requisitos de COMPAT do dispositivo Windows para NVMe: Device.Storage.ControllerDrive.NVMe – seções 5.7 e 5.8

Device.Storage.ControllerDrive.NVMe.BasicFunction

O dispositivo deve ter pelo menos um slot de firmware atualizável.

Confirmação de firmware 5.7

  • A ativação de uma imagem de firmware deve ser feita sem a necessidade de um ciclo de energia do dispositivo.

  • Espera-se que o processo de ativação seja alcançado por meio de uma redefinição iniciada pelo host, conforme descrito na seção 8.1 da versão de especificação 1.2a.

  • O Windows utilizará ações de confirmação 001b ou 010b ao emitir um comando de confirmação de firmware.

  • Os valores de conclusão esperados para ativação bem-sucedida sem um ciclo de energia são 00h (êxito genérico), 10h ou 11h.

  • Se 0Bh for retornado como status de conclusão, o Windows informará o usuário para executar um ciclo de energia do dispositivo. Isso é altamente desencorajado, pois impede a atualização do firmware no runtime do sistema operacional e causa uma interrupção significativa da carga de trabalho.

5.8 Download de imagem do Firmware

  • O dispositivo não deve falhar na E/S durante a fase de download e deve continuar servindo E/S.

Para obter mais informações, consulte os requisitos de COMPAT para Device.Storage.ControllerDrive.NVMe no dispositivo Windows – seções 5.7 e 5.8, localizadas em Componentes e Peripherals.pdf disponíveis no arquivo de download WHCP_Documents_Windows 11, versão 24H2.zip.

Identificadores SCSI para unidades de disco de armazenamento NVMe

A partir do Windows 10, versão 2004 (build do sistema operacional 19041.488 ou superior), dois novos identificadores estão disponíveis para unidades de disco de armazenamento NVMe usando drivers que dão suporte à estrutura STOR_RICH_DEVICE_DESCRIPTION :

SCSI\t*v(8)p(40)

Em que:

  • t* é um código de tipo de dispositivo de comprimento variável.
  • v(8) é um identificador de fornecedor de 8 caracteres.
  • p(40) é um identificador de produto de 40 caracteres

SCSI\t*v(8)p(40)r(8)

Em que:

  • t* é um código de tipo de dispositivo de comprimento variável.
  • v(8) é um identificador de fornecedor de 8 caracteres.
  • p(40) é um identificador de produto de 40 caracteres
  • r(8) é um valor de nível de revisão de 8 caracteres.

O SCSI\t*v(8)p(40)r(80 identificador oferece um nome completo do produto (alinhado com a especificação NVME 1.4) e permite a criação de um nó de componente de software (SWC) para atualizações de firmware para unidades NVME que tenham esse nome (até 40 caracteres e 8 caracteres de revisão de firmware).

Para obter mais informações, consulte Identificadores para dispositivos SCSI e STOR_RICH_DEVICE_DESCRIPTION

Detalhes da solução SFU (Atualização do Firmware de Armazenamento)

No diagrama a seguir, o Windows 10 fornece o driver de função (stornvme.sys) e o driver de atualização de firmware (storfwupdate.dll). Para utilizar o driver fornecido pela Microsoft para atualizar o firmware de unidade NVMe, dois envios de driver separados são necessários.

detalhes da atualização do firmware de armazenamento.

Pacote 1 – Criar identidade para atualização de firmware de unidade

Normalmente, esse pacote contém os seguintes itens:

  • Extensão INF para criar nó de dispositivo virtual para atuar como hardware independente de destino para o pacote de atualização de firmware

  • Catálogo de controladores

Envie seu pacote INF de extensão como um envio de driver separado.

Muitos tipos de dispositivos, no entanto, não permitem que um único dispositivo físico liste mais de um nó de dispositivo. Nesse caso, use uma extensão INF que especifica a diretiva AddComponent para criar um nó de dispositivo destinado pelo Windows Update e instalar nele o driver de atualização de firmware. O trecho a seguir de um arquivo INF mostra como criar o nodo de 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

Neste exemplo INF, ComponentIDs = StorageIHVabcd-firmware-update indica que o dispositivo filho terá um identificador de hardware de SWC\StorageIHVabcd-firmware-update. Quando instalado, esse INF cria a seguinte hierarquia de dispositivos:

Hierarquia de dispositivos I N F.

Uma extensão de exemplo INF para criar uma nova identidade para atualizações de firmware da unidade é apresentada abaixo. Como o hardware SCSI\DiskNVMe____StorageIHVabcd pode não ser exclusivo em todos os fabricantes de hardware, o arquivo INF de extensão deve utilizar o direcionamento CHID para distribuição.

Pacote 2 – Pacote de atualização de firmware do disco rígido

Normalmente, esse pacote contém o seguinte:

  • INF de driver universal de firmware de classe

  • Binário de conteúdo de atualização de firmware

  • Catálogo de controladores

Envie seu pacote de firmware como uma submissão de driver separada.

O pacote de atualização de firmware da unidade INF tem como destino o novo nó SWC\StorageIHVabcd-firmwareupdate e invoca o driver de atualização de firmware de armazenamento do Windows 10. Para que um dispositivo componente enumerado por software funcione, seu componente pai deve ser iniciado. Para utilizar a unidade StorFwUpdate, os desenvolvedores devem utilizar os comandos INF Include/Needs na seção DDInstall para cada uma das seções possíveis [DDInstall.*] e suas seções correspondentes [StorFwUpdate.*], conforme mostrado aqui, independentemente de o INF especificar ou não algum comando para essa seção:

[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 obter mais informações, consulte Como usar um arquivo INF de componente. Um arquivo INF de atualização de firmware de unidade NVMe de exemplo é fornecido abaixo. Como a identidade de software SWC\StorageIHVabcd-firmwareupdate pode não ser exclusiva entre os fabricantes de hardware, o INF deve utilizar o direcionamento CHID para distribuição do Windows Update.

O componente StorFwUpdate não executa nenhuma validação (verificação de assinatura ou descriptografia) do conteúdo binário do firmware. Se esse nível de recurso for necessário, os parceiros de hardware poderão escrever seu próprio driver de atualização de firmware de armazenamento.

Exemplo de atualização de firmware da unidade de armazenamento

Como ambos os INFs exigem CHIDs para distribuição do Windows Update, os parceiros de hardware podem validar a solução localmente usando PNPUTIL.EXE , conforme mostrado abaixo.

Requisitos

  • Windows 10, versão 2004 (build do sistema operacional 19041.488 ou superior)

  • Dispositivo com unidade de armazenamento NVMe usando o driver stornvme.sys padrão

  • Binário de firmware de unidade NVMe

  • Arquivos INF criados corretamente

Exibir a versão atual do firmware de disco NVMe

Para exibir a versão atual do firmware de disco NVMe:

  1. Abra uma janela do PowerShell como administrador.

  2. Digite Get-PhysicalDisk | Get-StorageFirmwareInformation para exibir a versão atual do firmware de disco NVMe.

    versão atual do firmware de disco N V M e.

Observe os valores atuais de ActiveSlotNumber e FirmwareVersionInSlot .

Para obter mais informações, consulte Get-StorageFirmwareInformation.

Instalar a extensão INF para criar uma nova identidade de hardware de software

  1. Vá para o diretório em seu sistema que contém o arquivo INF do pacote de extensão de driver. Por exemplo, digite cd .\signed-DiskExtnPackage\.

  2. Verifique se o arquivo INF de extensão contém as informações das unidades que você está atualizando. Consulte o Arquivo INF de extensão de disco neste artigo para um exemplo de extensão INF.

  3. Instale a extensão INF com o utilitário Microsoft PnP. Por exemplo, em um prompt de comando do administrador, digite pnputil /add-driver .\OEMDiskExtnPackage.inf /install. Quando o novo nó de software é criado como um subdispositivo de um elemento crítico de inicialização, é necessária uma reinicialização para entrar em vigor.

     saída do comando p n p util.

Exibir o novo componente de software (SWC) nó

Para exibir o novo nó do SWC e o identificador de hardware:

  1. No menu Iniciar do Windows 10, abra o Painel de Controle e, em seguida, abra o Gerenciador de Dispositivos.

  2. No Gerenciador de Dispositivos, selecione unidades de disco, expanda o nó e selecione a unidade de disco que você atualizou.

  3. Depois de selecionar a unidade que você atualizou, no menu Exibição do Gerenciador de Dispositivos, selecione Dispositivos por conexão.

  4. Clique no nó de unidade selecionado e clique para expandir. Você verá um componente de software genérico filho no nó da unidade.

  5. Clique com o botão direito do mouse no componente de software genérico e selecione Propriedades.

  6. Na janela da caixa de diálogo Propriedades, selecione a guia Detalhes e, em seguida, escolha IDs de Hardware na lista suspensa de Propriedade para visualizar a ID de Hardware do componente de software genérico no nó da unidade.

  7. A ID de Hardware SWC\* deve corresponder àquela especificada no INF de Extensão.

Exibir e instalar a atualização de firmware de disco NVMe

  1. Abra uma janela do PowerShell como administrador.

  2. Mova para o diretório em seu sistema que contém o arquivo INF de atualização de firmware de disco NVMe. Por exemplo, digite cd .\signed-ihv-firmware\.

  3. Verifique se a atualização de firmware de disco INF contém as informações das unidades que você está atualizando. Consulte o arquivo INF do Disk Firmware neste artigo para obter um exemplo de atualização de firmware de disco INF.

  4. Instale o arquivo INF de atualização de firmware de disco usando a ferramenta Microsoft PnP. Por exemplo, em um prompt de comando do administrador, digite pnputil /add-driver .\StorFwUpdateIHV.inf /install.

  5. Abra uma janela do PowerShell como administrador.

  6. Digite Get-PhysicalDisk | Get-StorageFirmwareInformation para exibir as informações de firmware de disco NVMe atualizadas.

    atualizado firmware de disco N V M e.

Exiba as informações de firmware de disco NVMe atualizadas nos valores ActiveSlotNumber e FirmwareVersionInSlot .

Para obter mais informações, consulte Get-StorageFirmwareInformation.

Implantar a extensão inf e pacotes de firmware por meio do Windows Update

Primeiro, valide a implantação do pacote por meio do Windows Update usando as orientações de Publicação para Distribuição de Teste.

Em seguida, implante o pacote por meio do Windows Update usando CHIDs apropriados.

Para obter informações sobre a implantação, consulte o Fluxo de Trabalho de Publicação do Driver do Windows 10 (download do DOCX).

Exemplo de INF de extensão de disco

Veja a seguir um exemplo de arquivo INF de extensão:

;/*++
;
;  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

Exemplo de INF do firmware de disco

Veja a seguir um exemplo de arquivo INF do firmware de disco:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;  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 adicionais

Identificadores para dispositivos SCSI

STOR_RICH_DEVICE_DESCRIPTION