Поделиться через


Драйвер обновления встроенного ПО хранилища (SFU)

Обновление встроенного ПО для дисков хранилища NVMe зависит от поставщиков оборудования для создания приложений обновления встроенного ПО, использующих определенные ioCTLs обновления встроенного ПО, представленные в Windows 10. Обычно эти приложения распределяются за пределами конвейера Обновл. Windows (WU). Конечные пользователи должны определить, какие диски хранилища находятся на своем устройстве, получить правильную программу встроенного ПО диска хранилища на веб-сайте производителя и вручную скачать и установить обновления.

Кроме того, устройства под управлением Windows 10 в режиме S находятся в расширенной конфигурации безопасности, которая позволяет пользователям запускать проверенные корпорацией Майкрософт приложения, поэтому служебные программы поставщиков могут не обновлять встроенное ПО диска. Этот процесс вручную приводит к низкому внедрению обновлений встроенного ПО, увеличению затрат на поддержку и проблемам с удовлетворенностью клиентов для производителей оборудования.

Примечание.

Windows 10 в режиме S работает исключительно с приложениями из Microsoft Store в Windows и аксессуарами, совместимыми с Windows 10 в режиме S. Доступен односторонний выход из режима S. Дополнительные сведения см. в windows.com/SmodeFAQ.

Обновление встроенного ПО устройства с помощью службы Обновл. Windows (WU) с помощью решения на основе драйверов доступно поставщикам оборудования и требует либо добавить логику обновления встроенного ПО и полезные данные в существующий драйвер функций, либо предоставить отдельный драйвер обновления встроенного ПО и пакет. Этот сценарий приводит к дедупликации работы между партнерами оборудования и увеличивает общие затраты на обслуживание дисков хранилища. Дополнительные сведения о универсальных драйверах см. в разделе "Использование универсального INF-файла".

Использование Windows 10 версии 2004 (сборка ОС 19041.488 или более поздней версии) можно обновить встроенное ПО NVMe с помощью драйвера, предоставленного корпорацией Майкрософт, и поставщик оборудования предоставил пакет обновления встроенного ПО. Это решение можно распространять через Обновл. Windows на целевые диски и устройства с помощью идентификаторов оборудования компьютера (CHID).

Предупреждение

Обновления встроенного ПО являются потенциально рискованной операцией обслуживания и должны распространяться только после тщательного тестирования нового образа встроенного ПО. Возможно, что использование нового встроенного ПО на неподдерживаемом оборудовании может отрицательно повлиять на надежность и стабильность и даже привести к потере данных.

Совместимость дисков

Чтобы использовать Windows 10 для обновления встроенного ПО диска, необходимо иметь поддерживаемые диски. Чтобы обеспечить общее поведение устройства, Windows 10 указывает необязательные требования к комплекту аппаратных лабораторий (HLK) для устройств NVMe. Эти требования описывают, какие команды диска хранилища NVMe должны поддерживать обновление встроенного ПО с помощью нового решения на основе Обновл. Windows.

Обратитесь к поставщику решений, чтобы узнать, поддерживает ли ваше оборудование обновление встроенного ПО диска в Windows.

Требования к COMPAT устройства Windows для NVMe: Device.Storage.ControllerDrive.NVMe — разделы 5.7 и 5.8

Device.Storage.ControllerDrive.NVMe.BasicFunction

Устройство должно иметь по крайней мере один обновляемый слот встроенного ПО.

Фиксация встроенного ПО 5.7

  • Активация образа встроенного ПО должна выполняться без необходимости в цикле питания устройства.

  • Ожидается, что процесс активации будет достигнут с помощью сброса, инициированного узлом, как описано в разделе 8.1 спецификации версии 1.2a.

  • Windows будет использовать действия фиксации 001b или 010b при выполнении команды фиксации встроенного ПО.

  • Ожидаемые значения завершения для успешной активации без цикла питания : 00h (универсальный успех), 10h или 11h.

  • Если значение 0Bh возвращается в качестве состояния завершения, Windows сообщит пользователю о выполнении цикла питания устройства. Это очень не рекомендуется, так как он предотвращает обновление встроенного ПО во время выполнения ОС и приводит к значительному нарушению рабочей нагрузки.

Скачивание образа встроенного ПО 5.8

  • Устройство не должно завершаться ошибкой ввода-вывода на этапе скачивания и продолжать обслуживать ввод-вывод.

Дополнительные сведения см. в требованиях к COMPAT устройства Windows для Device.Storage.ControllerDrive.NVMe в разделах 5.7 и 5.8, расположенных в компонентах и Peripherals.pdf, доступных в файле скачивания WHCP_Documents_Windows 11 версии 24H2.zip .

Идентификаторы SCSI для дисков хранилища NVMe

Начиная с Windows 10 версии 2004 (сборка ОС 19041.488 или более поздней), для дисков хранилища NVMe доступны два новых идентификатора с помощью драйверов, поддерживающих структуру STOR_RICH_DEVICE_DESCRIPTION :

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

Где:

  • t* — это код типа устройства переменной длины.
  • v(8) — это 8-символьный идентификатор поставщика.
  • p(40) — это 40-символьный идентификатор продукта.

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

Где:

  • t* — это код типа устройства переменной длины.
  • v(8) — это 8-символьный идентификатор поставщика.
  • p(40) — это 40-символьный идентификатор продукта.
  • r(8) — это 8-символьное значение уровня редакции.

Идентификатор SCSI\t*v(8)p(40)r(80 предоставляет полное имя продукта (соответствует спецификации NVME 1.4) и позволяет создавать узел программного компонента (SWC) для обновлений встроенного ПО для дисков NVME, соответствующих этому имени (до 40 символов и 8 символов).

Дополнительные сведения см. в разделе "Идентификаторы для устройств SCSI" и STOR_RICH_DEVICE_DESCRIPTION

Сведения о решении обновления встроенного ПО хранилища (SFU)

На следующей схеме Windows 10 предоставляет драйвер функций (stornvme.sys) и драйвер обновления встроенного ПО (storfwupdate.dll). Чтобы использовать предоставленный корпорацией Майкрософт драйвер для обновления встроенного ПО диска NVMe, требуются два отдельных отправки драйверов.

Сведения об обновлении встроенного ПО хранилища.

Пакет 1. Создание удостоверения для обновления встроенного ПО диска

Как правило, этот пакет содержит следующие элементы:

  • Расширение INF для создания узла программного устройства для работы в качестве независимо целевого оборудования для пакета обновления встроенного ПО

  • Каталог драйверов

Отправьте пакет INF расширения в виде отдельной отправки драйвера.

Однако многие типы устройств не позволяют одному физическому устройству перечислять несколько узлов устройств. В этом случае используйте расширение INF, указывающее директиву AddComponent, чтобы создать узел устройства, предназначенный для Обновл. Windows, и установить на него драйвер обновления встроенного ПО. В следующем фрагменте из INF-файла показано, как создать узел устройства:

[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

В этом примере INF указывает, ComponentIDs = StorageIHVabcd-firmware-update что дочернее устройство будет иметь идентификатор оборудования SWC\StorageIHVabcd-firmware-update. При установке этот INF создает следующую иерархию устройств:

Иерархия устройств N F.

Ниже приведен пример расширения INF для создания нового удостоверения для обновлений встроенного ПО диска. Так как оборудование SCSI\DiskNVMe____StorageIHVabcd не может быть уникальным для производителей оборудования, расширение INF должно использовать chiD для распространения.

Пакет 2. Пакет обновления встроенного ПО диска

Как правило, этот пакет содержит следующее:

  • Универсальный драйвер INF класса встроенного ПО класса

  • Двоичный файл полезных данных обновления встроенного ПО

  • Каталог драйверов

Отправьте пакет встроенного ПО в виде отдельной отправки драйвера.

Пакет обновления встроенного ПО диска предназначен для нового узла SWC\StorageIHVabcd-firmwareupdate и вызывает драйвер обновления встроенного ПО хранилища Windows 10. Чтобы устройство компонента, перечисленное программным обеспечением, функционировалось, его родительский элемент должен быть запущен. Чтобы использовать диск StorFwUpdate, разработчики должны использовать директивы INCLUDE/Needs INF в разделе DDInstall для каждого из возможных [DDInstall.*] разделов [StorFwUpdate.*] , как показано здесь, независимо от того, указывает ли INF какие-либо директивы для этого раздела или нет:

[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

Дополнительные сведения см. в разделе "Использование INF-файла компонента". Ниже приведен пример обновления встроенного ПО диска NVMe INF-файла. Так как удостоверение программного обеспечения SWC\StorageIHVabcd-firmwareupdate не может быть уникальным для разных производителей оборудования, INF-файл должен использовать chiD для распространения Обновл. Windows.

Компонент StorFwUpdate не выполняет никакой проверки (проверки подписи или расшифровки) двоичной полезных данных встроенного ПО. Если этот уровень компонента необходим, партнеры оборудования могут написать собственный драйвер обновления встроенного ПО хранилища.

Пример обновления встроенного ПО диска хранилища

Так как для распространения Обновл. Windows для обоих INF требуются ЧИД, партнеры по оборудованию могут локально проверить решение с помощью PNPUTIL.EXE, как показано ниже.

Требования

  • Windows 10 версии 2004 (сборка ОС 19041.488 или более поздней версии)

  • Устройство с диском хранилища NVMe с помощью драйвера stornvme.sys папки "Входящие"

  • Двоичный файл встроенного ПО диска NVMe

  • Правильно созданные INF-файлы

Просмотр текущей версии встроенного ПО диска NVMe

Чтобы просмотреть текущую версию встроенного ПО диска NVMe, выполните следующие действия.

  1. Откройте окно PowerShell от имени администратора.

  2. Введите Get-PhysicalDisk | Get-StorageFirmwareInformation для просмотра текущей версии встроенного ПО диска NVMe.

    текущая версия встроенного ПО диска N V M e.

Обратите внимание на текущие значения ActiveSlotNumber и FirmwareVersionInSlot .

Дополнительные сведения см. в статье Get-StorageFirmwareInformation.

Установите расширение INF для создания нового удостоверения программного обеспечения

  1. Перейдите в каталог в системе, содержащий INF-файл пакета расширения драйвера. Например, введите cd .\signed-DiskExtnPackage\.

  2. Убедитесь, что INF-файл расширения содержит сведения о дисках, которые вы обновляете. См . INF-файл расширения диска в этой статье для примера расширения INF.

  3. Установите расширение INF с помощью служебной программы Microsoft PnP. Например, в командной строке администратора введите pnputil /add-driver .\OEMDiskExtnPackage.inf /install. Так как новый узел программного обеспечения создается как дочерний элемент загрузочного критического устройства, перезагрузка требуется для принятия в силу.

     p n p util command output.

Просмотр нового узла программного компонента (SWC)

Чтобы просмотреть новый узел SWC и идентификатор оборудования:

  1. В меню Windows 10 откройте панель управления, а затем откройте диспетчер устройств.

  2. В диспетчер устройств выберите диски, а затем разверните узел и выберите обновленный диск.

  3. После выбора диска, который вы обновили, в меню диспетчер устройств "Вид" выберите "Устройства" по подключению.

  4. Щелкните выбранный узел диска, а затем щелкните, чтобы развернуть. Под узлом диска появится дочерний компонент универсального программного обеспечения .

  5. Щелкните правой кнопкой мыши компонент универсального программного обеспечения и выберите "Свойства".

  6. В диалоговом окне "Свойства" перейдите на вкладку "Сведения", а затем выберите идентификаторы оборудования в раскрывающемся списке "Идентификатор оборудования" для универсального компонента программного обеспечения на узле диска.

  7. Идентификатор оборудования SWC\* должен совпадать с идентификатором оборудования, указанным в INF расширения.

Просмотр и установка обновления встроенного ПО диска NVMe

  1. Откройте окно PowerShell от имени администратора.

  2. Перейдите в каталог в системе, содержащий INF-файл обновления встроенного ПО диска NVMe. Например, введите cd .\signed-ihv-firmware\.

  3. Убедитесь, что обновление встроенного ПО диска содержит сведения о дисках, которые вы обновляете. См. INF-файл встроенного ПО диска в этой статье, чтобы ознакомиться с примером обновления встроенного ПО диска INF.

  4. Установите INF-файл обновления встроенного ПО диска с помощью служебной программы Microsoft PnP. Например, в командной строке администратора введите pnputil /add-driver .\StorFwUpdateIHV.inf /install.

  5. Откройте окно PowerShell от имени администратора.

  6. Введите Get-PhysicalDisk | Get-StorageFirmwareInformation для просмотра обновленных сведений о встроенном ПО диска NVMe.

    обновлено встроенное ПО диска N V M e.

Просмотрите обновленные сведения о встроенном ПО диска NVMe в значениях ActiveSlotNumber и FirmwareVersionInSlot .

Дополнительные сведения см. в статье Get-StorageFirmwareInformation.

Развертывание пакетов INF и встроенного ПО расширения с помощью Обновл. Windows

Сначала проверьте развертывание пакета с помощью Обновл. Windows с помощью руководства по публикации для тестирования распространения.

Затем разверните пакет с помощью Обновл. Windows с помощью соответствующих ЧИД.

Сведения о развертывании см. в разделе "Рабочий процесс публикации драйверов Windows 10" (скачивание DOCX).

Пример INF расширения диска

Ниже приведен пример 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

Пример INF-кода встроенного ПО диска

Ниже приведен пример 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:
;
;      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"

Дополнительные ресурсы

Идентификаторы для устройств SCSI

STOR_RICH_DEVICE_DESCRIPTION