套用任何韌體更新套件且系統後續重新啟動之後,Windows OS 載入器會將所有韌體承載檔案(在此範例 中,firmware.bin)載入物理記憶體中。 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 OS 載入器將建立以下膠囊標頭以傳入 UpdateCapsule。
| 領域 | 價值 | 評論 |
|---|---|---|
| CapsuleGuid | {系統韌體} | 從對應的 ESRT 資源項中的 FirmwareClass。 |
| 標題大小 | ... | 將 firmware.bin 填充至頁面對齊開始。 |
| 標誌 | 0x50000 | 持續存在,並執行初始化重設。 |
| 膠囊圖片大小 | ... | 膠囊標頭大小 + firmware.bin的大小。 |
請注意,在此範例中,只有ESRT資料表中定義的兩個裝置之一已安裝新的韌體資源更新驅動程式套件。 如果針對表 2 中的第二個裝置撰寫了韌體資源更新驅動程式套件,然後安裝在對應的韌體資源裝置上,則會建立第二個膠囊標頭,如下所示:
| 領域 | 價值 | 評論 |
|---|---|---|
| CapsuleGuid | {設備韌體} | 從對應的 ESRT 資源項目中的 FirmwareClass。 |
| 標題大小 | ... | 填補至頁面對齊的 DEVICE.BIN 開始。 |
| 標誌 | 0x50000 | 在對應的 ESRT 資源條目的 CapsuleFlags 中,持續存在並開始、重置及填入系統資料表,與 0x8010 進行 OR 運算。 |
| CapsuleImageSize | ... | 膠囊標頭大小 + DEVICE.BIN 的大小。 |
在 Windows OS 載入器載入所有擱置的韌體更新並建立必要的數據結構來描述它們之後,它會先呼叫 UpdateCapsule 運行時間服務,再呼叫 ExitBootServices。
當平臺韌體擁有包括儲存裝置在內的所有裝置的獨佔控制權時,即會在 ExitBootServices 之前呼叫 UpdateCapsule。 UpdateCapsule 的平臺韌體實作可以將韌體更新資料儲存至非易失性存儲,以準備更新或支持復原。