处理更新

在应用了任何固件更新包并且系统随后重新启动之后,Windows OS 加载程序会将此示例中 () 的所有固件负载文件加载到物理内存中。 Windows OS 加载器使用每个更新的相应 ESRT 项中的信息来创建胶囊标头,其中描述了在调用 UEFI UpdateCapsule 时要使用的 GUID 和标志。 在设置每个胶囊标头的 "标志" 字段时,Windows OS 加载程序始终设置 CAPSULE_FLAGS_PERSIST_ACROSS_RESET 和 CAPSULE_FLAGS_INITIATE_RESET。 如果在驱动程序包的 INF 中指定了胶囊标志,则 Windows 操作系统加载器还可以 DEVICE_FIRMWARE 为固件类型设置 CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE。 还可以在 INF 中指定专用胶囊标志,并在调用 UEFI UpdateCapsule 时将其添加到指定的

返回到ESRT 表定义中的 ESRT 示例和固件资源更新驱动程序包 INF 示例在创作更新驱动程序包中,操作系统加载器创建 Windows 的用于传递到 UpdateCapsule 的胶囊标头如下所示。

字段 注释
CapsuleGuid {SYSTEM_FIRMWARE} 从相应的 ESRT 资源项的 FirmwareClass。
HeaderSize ... 填充以页面对齐 固件 开头。
Flags 0x50000 持久保存并启动、重置。
CapsuleImageSize ... 胶囊标头大小 + 固件大小。

请注意,在此示例中,在 ESRT 表中定义的两个设备中仅有一个安装了新的固件资源更新驱动程序包。 如果为表2中的第二个设备编写固件资源更新驱动程序包,并将其安装在相应的固件资源设备上,则将创建另一个胶囊标头,如下所示:

字段 注释
CapsuleGuid {DEVICE_FIRMWARE} 从相应的 ESRT 资源项的 FirmwareClass。
HeaderSize ... 填充到页面对齐设备。箱开始。
Flags 0x50000 通过相应的 ESRT 资源条目的 CapsuleFlags,保存并启动、重置和填充系统表,或0x8010。
CapsuleImageSize ... 胶囊标头大小 + 设备的大小。装箱.

在 Windows OS 加载程序加载了所有挂起的固件更新并创建了所需的数据结构来描述它们后,它会在调用 ExitBootServices 之前调用 UpdateCapsule 运行时服务。

注意 当平台固件具有对包括存储设备在内的所有设备的独占控制权时,将在 ExitBootServices 之前调用 UpdateCapsule。 UpdateCapsule 的平台固件实现可以将固件更新负载保存到永久性存储中以暂存更新或支持恢复回滚。

ESRT 表定义

即插即用设备

创作更新驱动程序包

来自 UEFI 环境的设备 I/O

无缝危机预防和恢复

固件更新状态