處理更新
套用任何韌體更新套件之後,Windows OS 載入器會在此範例中將所有韌體承載檔案載入 (, firmware.bin) 載入到實體記憶體中。 Windows OS 載入器會使用每個更新對應 ESRT 專案的資訊來建立一個太空標頭,其描述呼叫 UEFI UpdateCapsule 時要使用的 GUID 和旗標。 在設定每個CAPSULE_FLAGS_PERSIST_ACROSS_RESET標頭的旗標欄位中,Windows OS 載入器一律會設定CAPSULE_FLAGS_PERSIST_ACROSS_RESET和CAPSULE_FLAGS_INITIATE_RESET。 如果驅動程式套件的 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 開始。 |
Flags | 0x50000 | 跨保存並起始重設。 |
CapsuleImageSize | ... | 容器標頭大小 + firmware.bin的大小。 |
請注意,在此範例中,只有 ESRT 資料表中定義的兩個裝置之一已安裝新的韌體資源更新驅動程式套件。 如果針對表 2 中第二個裝置撰寫韌體資源更新驅動程式套件,然後在對應的韌體資源裝置上安裝,則會建立第二個封裝標頭,如下所示:
欄位 | 值 | 註解 |
---|---|---|
CapsuleGuid | {DEVICE_FIRMWARE} | 從對應的 ESRT 資源專案 FirmwareClass。 |
HeaderSize | ... | 填補到頁面對齊的 DEVICE。BIN 啟動。 |
Flags | 0x50000 | 跨保存,並起始、重設及填入系統資料表,ORD 會從相對應的 ESRT 資源專案之的 CapsuleFlags 中填入0x8010。 |
CapsuleImageSize | ... | 封裝標頭大小 + 裝置大小。站。 |
在 Windows OS 載入器載入所有擱置的韌體更新並建立描述它們的必要資料結構之後,它會在呼叫 ExitBootServices 之前呼叫 UpdateCapsule 執行時間服務。
當平臺韌體具有包含儲存裝置在內的所有裝置的獨佔控制權時,會在 ExitBootServices 之前呼叫 UpdateCapsule。 UpdateCapsule 的平臺韌體實作可以將韌體更新承載儲存至持續性儲存體,以暫存更新或支援復原復原。