Atualização de firmware de armazenamento (SFU)
A atualização do firmware para unidades de armazenamento NVMe depende de fornecedores de hardware para criar aplicativos de atualização de firmware que utilizam IOCTLs de atualização de firmware específicos introduzidos no Windows 10. Esses aplicativos normalmente são distribuídos fora do pipeline do Windows Update (WU). Os usuários finais precisam determinar quais discos de armazenamento estão em seu dispositivo, obter o utilitário de firmware da unidade de armazenamento correto no 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 permite apenas que os usuários executem aplicativos verificados pela Microsoft, portanto, os utilitários do fornecedor podem falhar ao atualizar o firmware da unidade. Esse processo manual resulta em baixa adoção de atualizações de firmware, aumenta os custos de suporte e os problemas de satisfação do cliente para os fabricantes de hardware.
Observação
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. Um interruptor unidirecional para o modo S está disponível. Saiba mais em windows.com/SmodeFAQ.
A atualização do firmware do dispositivo usando o serviço Windows Update (WU) usando uma solução baseada em driver está disponível para 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 mais informações sobre drivers universais, acesse Usando um arquivo INF universal.
Utilizando o Windows 10, versão 2004 (build do sistema operacional 19041.488 ou superior), é possível atualizar o firmware da 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 de computador (CHIDs).
Aviso
Atualizações de firmware são uma operação de manutenção potencialmente perigosa e deve se aplicada apenas após um teste completo da nova imagem do firmware. É possível que esse novo firmware em hardware sem suporte afete negativamente a estabilidade e a confiabilidade ou até mesmo cause perda de dados.
Compatibilidade de unidade
Para usar o Windows 10 para atualizar o firmware da unidade, você deverá ter unidades compatíveis. Para garantir o comportamento normal do dispositivo, Windows 10 especifica requisitos opcionais do HLK (Hardware Lab Kit) para dispositivos NVMe. Esses requisitos descrevem quais comandos uma unidade de armazenamento NVMe deve dar suporte para serem atualizáveis por firmware usando a nova solução baseada em Windows Update.
Para obter informações sobre se o hardware oferece suporte a atualização do firmware da unidade do Windows, entre em contato com o fornecedor da solução.
Requisitos de compatibilidade de dispositivos 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.
5.7 Confirmação de firmware
A ativação de uma imagem de firmware deve ser feita sem a necessidade de um ciclo de energia do dispositivo.
E esperado que o processo de ativação seja feita por meio de uma redefinição iniciada pelo host, conforme descrito na seção 8.1 da especificação versão 1.2a.
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 uma ativação bem-sucedida sem um ciclo de energia são 00h (sucesso 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 tempo de execução do sistema operacional e causa interrupções significativas na carga de trabalho.
5.8 Download da imagem do firmware
- O dispositivo não deve falhar na E/S durante a fase de download e deverá continuar fornecendo E/S.
Para obter mais informações, consulte os requisitos de compatibilidade de dispositivo Windows para Device.Storage.ControllerDrive.NVMe – seções 5.7 e 5.8, localizadas no arquivo de download Componentes e Peripherals.pdf disponíveis no arquivo de download do 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 do 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 do 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 fornece 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 correspondentes a esse nome (até 40 caracteres e revisão de firmware de 8 caracteres).
Para obter mais informações, consulte Identificadores para dispositivos SCSI e STOR_RICH_DEVICE_DESCRIPTION
Detalhes da solução de atualização de firmware de armazenamento (SFU)
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 da unidade NVMe, são necessários dois envios de driver separados.
Pacote 1 - Criar identidade para atualização de firmware do driver
Geralmente, esse pacote contém os seguintes itens:
Extensão de INF para criar um nó do dispositivo de software para atuar como o hardware direcionado independentemente para o pacote de atualização de firmware
Catálogo de drivers
Envie seu pacote de extensão de INF como um envio de driver separado.
Entretanto, muitos tipos de dispositivo não permitem que um único dispositivo físico enumere mais de um nó do dispositivo. Nesse caso, use uma extensão de INF que especifica a diretiva AddComponent para criar um nó de dispositivo direcionado por Windows Update e instalar o driver de atualização de firmware nele. O snippet a seguir de um arquivo INF mostra como criar o nó do 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 de INF, ComponentIDs = StorageIHVabcd-firmware-update
indica que o dispositivo filho terá uma ID de hardware de SWC\StorageIHVabcd-firmware-update. Quando instalado, esse INF cria a seguinte hierarquia de dispositivos:
Um exemplo de extensão de INF para criar uma nova identidade para atualizações de firmware da unidade é fornecido abaixo. Como o hardware SCSI\DiskNVMe____StorageIHVabcd pode não ser exclusivo entre os fabricantes de hardware, o INF de extensão deve utilizar o direcionamento CHID para distribuição.
Pacote 2 - Pacote de atualização de firmware do driver
Geralmente, esse pacote contém os itens a seguir:
Driver universal INF de firmware de classe
Binário de carga útil de atualização de firmware
Catálogo de drivers
Envie seu pacote de firmware como um envio de driver separado.
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 do firmware de armazenamento do Windows 10. Para que um dispositivo de componente enumerado por software funcione, seu ativo principal deve ser iniciado. Para usar a unidade StorFwUpdate, os desenvolvedores devem usar as diretivas INF Include/Needs na seção DDInstall para cada seção possível [DDInstall.*]
para as seções correspondentes [StorFwUpdate.*]
, conforme mostrado aqui, independentemente de o INF especificar diretivas para essa seção ou nã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 Uso de um componente INF universal. Um exemplo de arquivo INF de atualização de firmware da unidade NVMe é fornecido abaixo. Como a identidade de software SWC \StorageIHVabcd-firmwareupdate pode não ser exclusiva entre 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 19041.488 ou superior)
Dispositivo com unidade de armazenamento NVMe usando a caixa de entrada stornvme.sys driver
Binário de firmware da unidade NVMe
Arquivos INF criados corretamente
Veja a versão atual do firmware do disco NVMe
Para visualizar a versão atual do firmware do disco NVMe:
Abra uma janela do PowerShell como administrador.
Digite
Get-PhysicalDisk | Get-StorageFirmwareInformation
para visualizar a versão atual do firmware do disco NVMe.
Observe os valores atuais de ActiveSlotNumber e FirmwareVersionInSlot .
Para obter mais informações, consulte Get-StorageFirmwareInformation.
Instale a extensão de INF para criar uma nova identidade de hardware de software
Mova para o diretório no seu sistema que contenha o arquivo INF do pacote de extensão de driver. Por exemplo, digite
cd .\signed-DiskExtnPackage\
.Verifique se o arquivo INF de extensão contém as informações das unidades que você está atualizando. Consulte Arquivo INF de extensão de disco neste artigo para obter um exemplo de extensão INF.
Instale a extensão INF com o utilitário PnP da Microsoft. Por exemplo, em um prompt de comando do administrador, digite
pnputil /add-driver .\OEMDiskExtnPackage.inf /install
. Como o novo nó de software é criado como filho de um dispositivo crítico de inicialização, uma reinicialização é necessária para entrar em vigor.
Exibir o nó do novo componente de software (SWC)
Para visualizar o novo nó SWC e o ID de hardware:
No menu Iniciar do Windows 10, abra o Painel de Controle e, em seguida, abra o Gerenciador de Dispositivos.
No Gerenciador de Dispositivos, selecione Unidades de disco, expanda o nó e selecione a unidade de disco que você atualizou.
Depois de selecionar a unidade que você atualizou, no menu Gerenciador de dispositivos Exibir, selecione Dispositivos por conexão.
Clique no nó da unidade selecionada e, em seguida, clique para expandir. Você verá um Componente de software genérico filho no nó da unidade.
Clique com o botão direito do mouse no componente de software genérico e selecione Propriedades.
Na janela de diálogo Propriedades , selecione a guia Detalhes e, em seguida, selecione IDs de hardware na lista suspensa Propriedade para exibir a ID de hardware do componente de software genérico no nó da unidade.
A ID de hardware SWC\* deve corresponder à especificada no INF de extensão.
Visualizar e instalar a atualização do firmware do disco NVMe
Abra uma janela do PowerShell como administrador.
Mova para o diretório em seu sistema que contém o arquivo INF de atualização de firmware do disco NVMe. Por exemplo, digite
cd .\signed-ihv-firmware\
.Verifique se o INF de atualização de firmware de disco contém as informações das unidades que você está atualizando. Consulte o Arquivo INF de firmware de disco neste artigo para obter um exemplo de INF de atualização de firmware de disco.
Instale o INF de atualização de firmware de disco com o utilitário PnP da Microsoft. Por exemplo, em um prompt de comando do administrador, digite
pnputil /add-driver .\StorFwUpdateIHV.inf /install
.Abra uma janela do PowerShell como administrador.
Digite
Get-PhysicalDisk | Get-StorageFirmwareInformation
para exibir as informações atualizadas do firmware do disco NVMe.
Exiba as informações atualizadas de firmware do disco NVMe nos valores ActiveSlotNumber e FirmwareVersionInSlot .
Para obter mais informações, consulte Get-StorageFirmwareInformation.
Implantar os pacotes de extensão INF e firmware por meio do Windows Update
Primeiro, valide a implantação do pacote por meio do Windows Update usando as diretrizes 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 Fluxo de trabalho de publicação de driver do Windows 10 (download de DOCX).
Exemplo de INF de extensão de disco
A seguir é um exemplo de arquivo INF:
;/*++
;
; 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 de firmware de disco
Veja a seguir um exemplo de arquivo INF de 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"