处理更新

应用任何固件更新包并随后重新启动系统后,Windows OS 加载程序会将所有固件有效负载文件(在此示例中, firmware.bin)加载到物理内存中。 Windows OS 加载程序使用每个更新的相应 ESRT 条目中的信息创建胶囊标头,该条目描述了调用 UEFI UpdateCapsule 时要使用的 GUID 和标志。 在设置每个胶囊标头的标志字段时,Windows OS 加载程序始终设置 CAPSULE_FLAGS_PERSIST_ACROSS_RE标准版T 和 CAPSULE_FLAGS_INITIATE_RE标准版T。 如果在驱动程序包的 INF 中指定了胶囊标志,Windows OS 加载程序可能会为固件类型设置CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE DEVICE_FIRMWARE。 专有胶囊标志也可以在 INF 中指定,并在调用 UEFI UpdateCapsule 时额外包含何时指定

在 ESRT 表定义引用 ESRT 示例和创作更新驱动程序包中的固件资源更新驱动程序包 INF 示例时,Windows OS 加载程序创建的用于传入 UpdateCapsule 的胶囊标头如下所示。

字段 注释
CapsuleGuid {SYSTEM_FIRMWARE} 从相应的 ESRT 资源条目的 FirmwareClass。
HeaderSize ... 填充到页面对齐 firmware.bin 开始。
标记 0x50000 持久保存并启动、重置。
CapsuleImageSize ... 胶囊标头大小 + firmware.bin的大小

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

字段 注释
CapsuleGuid {DEVICE_FIRMWARE} 从相应的 ESRT 资源条目的 FirmwareClass。
HeaderSize ... 填充到页面对齐的 DEVICE。BIN 启动。
标记 0x50000 在相应的 ESRT 资源条目的 CapsuleFlags 中使用0x8010来持久保存并启动、重置和填充系统表。
CapsuleImageSize ... 胶囊标头大小 + DEVICE 的大小。站。

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

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

ESRT 表定义

即插即用设备

创作更新驱动程序包

来自 UEFI 环境的设备 I/O

无缝危机预防和恢复

固件更新状态