Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Es necesario que la carga de actualización de cada recurso de firmware descrito en ESRT se incluya y distribuya en su propio paquete de controladores para permitir que mantenga su propio esquema de control de versiones sin estar vinculado a otras actualizaciones de recursos de firmware que pueden no actualizarse a la misma cadencia.
En el ejemplo siguiente se proporciona una definición de archivo INF del paquete de controladores de ejemplo para una actualización de recursos de firmware destinada al recurso {SYSTEM_FIRMWARE} del ejemplo de ESRT de la tabla 2, actualizándolo de la versión 1 a la versión 2. Para fines de referencia, supongamos que el GUID asignado para el recurso SYSTEM_FIRMWARE es 6bd4efb9-23cc-4b4a-ac37-016517413e9a.
[Version]
Signature = "$WINDOWS NT$"
Provider = %Provider%
Class = Firmware
ClassGuid = {f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
DriverVer = 01/01/2012,2.0.0.0
CatalogFile = catalog.cat
PnpLockdown = 1
[Manufacturer]
%MfgName% = Firmware,NTarm64.10.0...17134
; Prior to Windows 10, version 1803, the above should instead be:
; %MfgName% = Firmware,NTarm64
[Firmware.NTarm64.10.0...17134]
; Prior to Windows 10, version 1803, the above should instead be:
; [Firmware.NTarm64]
%FirmwareDesc% = Firmware_Install,UEFI\RES_{6bd4efb9-23cc-4b4a-ac37-016517413e9a}
[Firmware_Install.NT]
CopyFiles = Firmware_CopyFiles
[Firmware_CopyFiles]
firmware.bin
[Firmware_Install.NT.Hw]
AddReg = Firmware_AddReg
[Firmware_AddReg]
HKR,,FirmwareId,,{6bd4efb9-23cc-4b4a-ac37-016517413e9a}
HKR,,FirmwareVersion,%REG_DWORD%,0x00000002
HKR,,FirmwareFilename,,%13%\firmware.bin
; Prior to Windows 10, version 1803, the above should instead be:
; HKR,,FirmwareFilename,,{6bd4efb9-23cc-4b4a-ac37-016517413e9a}\firmware.bin
[SourceDisksNames]
1 = %DiskName%
[SourceDisksFiles]
firmware.bin = 1
[DestinationDirs]
DefaultDestDir = 13
; Prior to Windows 10, version 1803, the above should be:
; DefaultDestDir = 10,Firmware\{6bd4efb9-23cc-4b4a-ac37-016517413e9a}
[Strings]
; localizable
Provider = "Contoso Ltd."
MfgName = "Fabrikam Inc."
FirmwareDesc = "Fabrikam System Firmware 2.0"
DiskName = "Firmware Update"
; non-localizable
REG_DWORD = 0x00010001
Cambie las secciones siguientes para personalizar la configuración.
[Version]
DriverVer --> The date on which this driver package was authored and the driver version of this driver package. Driver version in this driver package must be greater than the current driver version
CatalogFile --> Name of the catalog file
firmware.bin --> Change all instances of firmware.bin with the name of the firmware image name
[Manufacturer]
%MfgName% = Firmware,NTarm64.10.0...17134
[Firmware.NTarm64.10.0...17134] --> Change the architecture.
For x86, it should be NTx86
For AMD64, it should be NTamd64
[Firmware.NTarm64.10.0...17134]
%FirmwareDesc% = Firmware_Install,UEFI\RES_{6bd4efb9-23cc-4b4a-ac37-016517413e9a} --> The GUID of the firmware resource
[Firmware_AddReg]
HKR,,FirmwareId,,{6bd4efb9-23cc-4b4a-ac37-016517413e9a} --> The GUID of the firmware resource
HKR,,FirmwareVersion,%REG_DWORD%,0x00000002 --> Version of the firmware for the update
HKR,,FirmwareFilename,,%13%\firmware.bin --> firmware.bin should be replaced with the firmware image name
; Prior to Windows 10, version 1803, the above should instead be:
HKR,,FirmwareFilename,,{6bd4efb9-23cc-4b4a-ac37-016517413e9a}\firmware.bin --> The subdirectory named after the GUID of the firmware resource and the firmware image name
[DestinationDirs]
DefaultDestDir = 13 --> The full destination path as a 'run from Driver Store' binary
; Prior to Windows 10, version 1803, the above should be:
; DefaultDestDir = 10,Firmware\{6bd4efb9-23cc-4b4a-ac37-016517413e9a} --> The full destination path for the firmware image file based under a subdirectory named after the GUID of the firmware resource within the %SystemRoot%\Firmware directory
[Strings]
; localizable
Modify any strings here [optional]
En la tabla siguiente se describen las distintas secciones y campos INF del paquete de controladores en referencia a la definición anterior del archivo INF del paquete de controladores de ejemplo.
| Sección o campo | Importancia | Comentario |
|---|---|---|
| [Versión] | Define la información de control de versiones del paquete de controladores. | |
| Provider | %Provider% = Contoso Inc. (localizado en la sección [Strings]) |
Identifica el proveedor o vendedor de todo el paquete de actualización de controladores de recursos de firmware. |
| Class/ClassGuid | Firmware/ {f2e7dd72-6468-4e36-b6f1-6488f42c1b52} |
Especifica la fecha del paquete de controladores. La fecha y la versión deben reflejar la fecha y la versión de la actualización real del recurso de firmware lo más cerca posible para asegurarse de que el sistema de instalación del dispositivo PnP pueda seleccionar con precisión el mejor paquete de controladores disponible en el sistema. |
| CatalogFile | catalog.cat | Especifica el archivo de catálogo asociado que firma el archivo INF del paquete de controladores y todos los archivos binarios de actualización de recursos de firmware asociados. |
| PnpLockdown | 1 | Habilita el mecanismo de bloqueo de archivos del controlador PnP para proteger los archivos de controladores instalados de la modificación externa de aplicaciones no relacionadas. En el caso de las actualizaciones de recursos de firmware, esta configuración siempre debe estar habilitada para asegurarse de que los archivos de imagen de recursos de firmware no se pueden alterar fuera del control del sistema PnP. |
| [Fabricante] | Enumera todos los fabricantes o proveedores de controladores distintos que definen las actualizaciones de recursos de firmware. Cada línea de fabricante especifica una sección [<Models>] e identifica su plataforma de destino admitida. | |
| %MfgName% | Fabrikam Inc. (localizado en la sección [Cadenas] ) |
Identifica el fabricante o proveedor de la actualización de recursos de firmware. Esto puede ser el mismo que el campo Proveedor. |
| Firmware, NTarm64.10.0... 17134 |
Identifica la sección [<Modelos>] que define los dispositivos de recursos de firmware admitidos por este paquete de controladores, incluidas sus plataformas de controladores de destino. En este ejemplo, los controladores solo están destinados a la plataforma NT basada en Arm64 para windows 10 compilaciones 17134 y posteriores y la sección [<Models>] es [Firmware.NTarm64.10.0... 17134]. | |
| [Firmware.NTarm64.10.0... 17134] | La sección [<Models>] para la plataforma NT basada en Arm64 para versiones de Windows 10 a partir de la 17134 lista todos los dispositivos de recursos de firmware para los cuales se definen actualizaciones. Cada línea de modelo de hardware especifica una sección [<DDInstall>] y su coincidencia de ID de hardware asociado. | |
| %FirmwareDesc% | Fabrikam System Firmware 2.0 (localizado en la sección [Strings]) |
Describe la actualización del recurso de firmware. Esta es la cadena de descripción principal que se usa para presentar la instancia del dispositivo de recursos de firmware asociado en el Administrador de dispositivos y en otra interfaz de usuario relacionada con el dispositivo. Por este motivo, la descripción puede incluir el proveedor de firmware y la versión. |
| Instalación del Firmware UEFI\RES_{RESOURCE_GUID} |
Identifica la sección [<DDInstall] que contiene los pasos de instalación de la actualización de recursos de firmware que tiene como destino la instancia de dispositivo identificada por el identificador de hardware UEFI\RES_{RESOURCE_GUID}. Donde RESOURCE_GUID es el GUID del recurso de firmware que se está actualizando. | |
|
[Firmware_Install.NT] CopyFiles = Firmware_CopyFiles [Firmware_CopyFiles] ... |
[<DDInstall>] sección que contiene los pasos de instalación de la actualización de recursos de firmware. En el caso de las actualizaciones de recursos de firmware, esto solo define el archivo de imagen de recurso de firmware que se va a copiar en su lugar para una actualización de recursos de firmware. En este ejemplo, la sección [<DDInstall>] es [Firmware_Install.NT]. | |
| firmware.bin | Especifica el archivo de imagen de actualización de recursos de firmware que se va a copiar. Consulte la sección [DestinationDirs] siguiente para obtener más información sobre dónde se copia este archivo. | |
|
[Firmware_Install.NT.Hw] AddReg = Firmware_AddReg [Firmware_AddReg] ... |
[<DDInstall>.Hw] sección que contiene los pasos de instalación específicos del hardware para la actualización del recurso de firmware. Para las actualizaciones de recursos de firmware, esta definición abarca la información de configuración de la actualización de recursos de firmware mediante valores del Registro que se establecen bajo la clave de hardware correspondiente a la instancia del dispositivo objetivo. | |
| FirmwareId | {RESOURCE_GUID} | GUID del firmware de la actualización del recurso de firmware. Tenga en cuenta que este es el mismo GUID de recurso de firmware que está incrustado en el identificador de hardware UEFI\RES_{RESOURCE_GUID}, pero debe especificarse aquí como un valor independiente, ya que el sistema PnP trata todos los identificadores de hardware como cadenas opacas que se usan estrictamente con fines de coincidencia de dispositivos o controladores. |
| Versión de firmware | 0x00000002 | La versión de firmware de la actualización del recurso de firmware, especificada como un valor de REG_DWORD. |
| FirmwareFilename | %13%\firmware.bin | En Windows 10, versión 1803 y posteriores, debe ser un archivo "ejecutar desde el Almacén de controladores" y proporcionar la ruta de acceso completa al archivo binario, como en el ejemplo. Antes de Windows 10, versión 1803, debe ser la ruta de acceso relativa y el nombre de archivo de la imagen de actualización del recurso de firmware Update Capsule dentro del directorio %SystemRoot%\Firmware, de manera que {RESOURCE_GUID} representa un subdirectorio utilizado para organizar todos los archivos de imagen de firmware orientados a un recurso de firmware específico. Por ejemplo, {RESOURCE_GUID}\firmware.bin. |
| [SourceDisksNames] | Enumera todas las ubicaciones de disco de origen del paquete de controladores distintas en las que se encuentran los archivos de controlador asociados, como los archivos de imagen de recursos de actualización de firmware. | |
| 1 | %DiskName% = Actualización de firmware (localizado en la sección [Strings]) |
Especifica un identificador de disco de origen del paquete de controladores numerado arbitrariamente y su nombre de descripción. No se especifica ningún subdirectorio relativo del paquete de controladores opcional, por lo que se espera que los archivos de controlador asociados a este identificador de disco, como el archivo de imagen de actualización de recursos de firmware, se encuentren directamente junto al archivo INF. |
| [SourceDisksFiles] | Enumera todos los archivos de controlador a los que hace referencia el paquete de controladores y los vincula a un identificador de disco de la sección [SourceDisksNames]. | |
| firmware.bin | 1 | Establece el firmware.bin archivo de imagen de actualización de recursos de firmware como parte del paquete de controladores mediante la vinculación con el identificador de disco principal. No se especifica ningún subdirectorio opcional específico del archivo, por lo que se espera que este archivo de controlador esté activo con respecto al subdirectorio del identificador de disco, que en este caso está justo al lado del archivo INF. |
| [DestinationDirs] | Enumera los directorios de destino de todos los archivos de controlador a los que hace referencia el paquete de controladores. | |
| DefaultDestDir | 13 | Especifica el directorio de destino predeterminado de todos los archivos de controlador copiados por este paquete de controladores. En Windows 10, versión 1803 y posteriores, debe ser DIRID 13 para que los archivos se ejecuten desde el Almacén de controladores. Antes de Windows 10, versión 1803, debe ser 10,Firmware\{RESOURCE_GUID} para especificar que el destino de todos los archivos está en %SystemRoot%\Firmware, donde 10 (DIRID_WINDOWS) representa el directorio %SystemRoot% base y {RESOURCE_GUID} representa un subdirectorio denominado después del GUID del recurso de firmware. |
| [Cadenas] | Define asignaciones de clave-valor para todos los tokens de cadena indirectos (%token%) en el archivo INF del paquete de controladores. El uso de tokens de cadena permite localizar fácilmente un archivo INF del paquete de controladores introduciendo secciones específicas de la configuración regional [Strings.<LanguageID>]. También puede ser útil usar la sustitución de tokens de cadena para definir valores numéricos constantes, como REG_DWORD. | |
| Provider | "Contoso Ltd." | Ejemplo de una asignación clave/valor de un token de cadena. |
Es importante usar un nombre único para cada versión de archivo de imagen de actualización de recursos de firmware para evitar posibles colisiones con otros archivos de imagen de firmware, tanto suyos como los de otros proveedores de firmware. Por ejemplo, firmware.bin de los anteriores deben asignarse el siguiente nombre para satisfacer las restricciones de nombre del proveedor y versión: Fabrikam-System-Firmware-2.0.bin.
Para asegurarse de que las variantes de una imagen de actualización de recursos de firmware determinada, que se pueden usar con fines de personalización oem/IHV, no entren en conflicto cuando se implementan en la misma imagen del sistema de Windows, se recomienda que cada imagen de actualización de recursos de firmware distinta sea un archivo "ejecutar desde el Almacén de controladores" (Windows 10, versión 1803 y posteriores) o que se mantenga bajo un subdirectorio dentro del directorio %SystemRoot%\Firmware. Este subdirectorio debe tener el nombre del GUID del recurso de firmware de destino. Por ejemplo, las siguientes rutas de actualización de firmware satisfacen las restricciones de implementación: %SystemRoot%\\Firmware\\{6bd4efb9-23cc-4b4a-ac37-016517413e9a}\\Fabrikam-System-Firmware-2.0.bin.
Prueba de la firma del paquete de controladores de firmware
Una vez que el archivo INF del paquete de controladores y el archivo binario de carga de firmware estén listos, todo el paquete de controladores debe estar firmado para generar un archivo de catálogo. Es crucial que este archivo de catálogo garantice la validez y autenticidad del archivo INF y del binario de la carga de firmware contenidos en el paquete de controladores para que Windows pueda iniciar de manera segura una actualización de recursos de firmware.
A continuación se enumeran los pasos para firmar el paquete de controladores automáticamente con fines de prueba. Tenga en cuenta que estos pasos son solo con fines de prueba. En producción, los paquetes de drivers para la actualización de firmware deben enviarse al Centro de Partners para su firma. Para conocer los pasos para firmar un paquete de controladores de firmware para producción, consulte Certificación y firma del paquete de actualización.
Instale la versión más reciente de Windows SDK y Windows Driver Kit (WDK).
- Windows SDK instala herramientas como
makecert,pvk2pfxysigntool. - El Kit de controladores de Windows (WDK) instala herramientas específicas del controlador, como
Inf2Cat.
Normalmente, puedes encontrar estas herramientas en el directorio de instalación de Windows Kits, por ejemplo:
%WindowsSdkDir%\bin\<version>\x86(ox64)Nota:
La carpeta exacta de la versión del SDK y el conjunto de herramientas disponibles dependen de los componentes instalados de Windows SDK/WDK.
- Windows SDK instala herramientas como
Ejecute el siguiente comando para crear un certificado de prueba.
makecert.exe -r -pe -a sha256 -eku 1.3.6.1.5.5.7.3.3 -n CN=Foo -sv fwu.pvk fwu.cer pvk2pfx.exe -pvk fwu.pvk -spc fwu.cer -pi <Password entered during makecert prompt> -spc fwu.cer -pfx fwu.pfxPara obtener más información, consulte MakeCert.
Ejecute el comando siguiente para crear un archivo de catálogo.
Inf2Cat.exe /driver:"." /os:8_x64El argumento /driver apunta a la ubicación donde se encuentra el INF. Cambie el valor del argumento /os en función del sistema operativo para el que está destinado el paquete de controladores de firmware. Para obtener más información, vea Inf2Cat.
Para obtener más información sobre los catálogos de seguridad y los controladores, vea Archivos de catálogo y firmas digitales y Creación de un archivo de catálogo para un paquete de controladores PnP.
Ejecute el siguiente comando para firmar el archivo de catálogo.
signtool sign /fd sha256 /f fwu.pfx /p <Password entered during makecert prompt> delta.catPara obtener más información, vea SignTool.
Instale el certificado de prueba en el sistema de prueba:
Haga doble clic en el archivo fwu.cer y elija la opción Instalar certificado .
Elija las siguientes opciones durante la instalación del certificado:
En Ubicación de la tienda, elija Equipo local.
En Almacén de certificados, busque y seleccione Entidades de certificación raíz de confianza.
Deshabilite el arranque seguro en las opciones de firmware/BIOS.
Habilite el inicio de sesión de prueba en las opciones de BCD para que el cargador del sistema operativo pueda cargar el archivo de imagen de firmware (firmware.bin) durante el arranque incluso si el catálogo no está firmado por producción. Ejecute el comando siguiente con privilegios de administrador:
bcdedit /set testsigning on
Una vez firmado el paquete de controladores, se puede instalar mediante uno de los siguientes mecanismos:
Administrador de dispositivos. Para las pruebas manuales, Device Manager proporciona una interfaz fácil de localizar un dispositivo de recursos de firmware y actualizar su controlador para iniciar una actualización de recursos de firmware.
Busque el dispositivo de recursos de firmware deseado en la clase "Firmware" mientras ve los dispositivos por tipo o en el dispositivo "Microsoft UEFI-Compliant System" mientras ve los dispositivos por conexión.
Haga clic con el botón derecho en el dispositivo de recursos de firmware y seleccione la opción "Actualizar software del controlador..." opción.
Use la opción "Examinar mi equipo para el software del controlador" para buscar e instalar un paquete de controladores de actualización de recursos de firmware más reciente en el dispositivo de recursos de firmware. Esta operación garantizará que el paquete de controladores de actualización de recursos de firmware especificado sea más reciente que cualquier paquete de controladores de actualización de recursos de firmware existente que ya esté en el dispositivo de recursos de firmware antes de agregarlo a la Tienda de controladores de Windows e iniciar una instalación.
pnputil. Para las pruebas automatizadas, la utilidad de línea de comandos PnpUtil se puede usar desde un símbolo del sistema elevado a administrador para importar un paquete de controladores de actualización de recursos de firmware en el Almacén de controladores de Windows e iniciar una instalación de dispositivo en todos los dispositivos de recursos de firmware aplicables que actualmente usan una versión anterior del recurso de firmware, tal como lo establece DriverVer en su archivo INF del paquete de controladores instalado actualmente o la falta absoluta de un archivo INF en el paquete de controladores proporcionado por terceros. Por ejemplo, use la siguiente línea de comandos para agregar e instalar X:\firmware.inf:
pnputil -i -a X:\firmware.inf
Si la actualización del recurso de firmware se instaló correctamente en un dispositivo de recursos de firmware y proporciona una actualización de recursos de firmware que es una versión superior a la versión de firmware actual, el dispositivo esperará un reinicio del sistema para completar la operación de actualización. Un dispositivo en este estado indicará su necesidad de reiniciar el sistema manteniendo un problema de dispositivo, lo que impide que el dispositivo se inicie y restaure a un estado estable hasta que se realice el reinicio.
Validación del estado de la actualización de firmware
Cuando se instala correctamente un paquete de controladores de firmware, PnP solicitará un reinicio del sistema para aplicar las actualizaciones. Después del reinicio, se puede validar el estado de la actualización. El estado de la actualización se mantiene en la siguiente clave del Registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FirmwareResources\{RESOURCE_GUID}.
RESOURCE_GUID es el GUID del recurso (de ESRT) que se actualizó.
El valor del Registro "LastAttemptStatus" indica el estado de la actualización de firmware, donde un valor de 0 indica que se ha realizado correctamente y cualquier valor distinto de cero representa un error. El valor de esta clave de registro del sistema son códigos NTSTATUS proporcionados por el Cargador del SO según el valor de LastAttemptStatus desde el ESRT. En la tabla siguiente se asigna el código LastAttemptStatus a su código NTSTATUS correspondiente.
| EstadoÚltimoIntento | Código | NTSTATUS | Código |
|---|---|---|---|
| Success | 0 | STATUS_SUCCESS | 0x00000000 |
| Error: No exitoso | 1 | STATUS_UNSUCCESSFUL | 0xC0000001 |
| Error: Recursos insuficientes | 2 | ESTADO_RECURSOS_INSUFICIENTES | 0xC000009A |
| Error: Versión incorrecta | 3 | ERROR_DE_REVISION_INCORRECTA | 0xC0000059 |
| Error: Formato de imagen no válido | 4 | ESTADO_FORMATO_DE_IMAGEN_INVÁLIDO | 0xC000007B |
| Error: Error de autenticación | 5 | STATUS_ACCESS_DENIED | 0xC0000022 |
| Error: Evento de corriente eléctrica, corriente alterna no conectada | 6 | ESTADO_INVÁLIDO_DE_ENERGÍA | 0xC00002D3 |
| Error: Evento de energía, batería insuficiente | 7 | STATUS_INSUFFICIENT_POWER | 0xC00002DE |
La propiedad Id. de hardware del nodo del dispositivo de recurso de firmware también debe reflejar el cambio en la versión de firmware, donde XXX es la nueva versión de firmware.
- UEFI\RES_{RESOURCE_GUID}&REV_XXX
Si se produjo un error en la actualización del firmware, puede volver a intentar la actualización fallida del firmware.
En el Administrador de dispositivos, expanda el nodo Firmware, haga clic con el botón derecho en el dispositivo de recursos de firmware y haga clic en Actualizar software de controlador.
Haga clic en Examinar mi equipo para el software del controlador y, en la página siguiente, haga clic en Permitirme elegir de una lista de controladores de dispositivos en mi equipo.
Seleccione el mismo controlador que instaló anteriormente y haga clic en Aceptar.
Después del siguiente reinicio, el cargador del sistema operativo llamará a UpdateCapsule() con la carga del paquete de controladores de firmware.
Temas relacionados
Dispositivo de conexión y uso inmediato (plug and play)
Procesamiento de actualizaciones
E/S del dispositivo desde el entorno UEFI