ESRT 資料表定義

ESRT 資料表的指標會透過EFI_CONFIGURATION_TABLE中的對應 GUID 來識別。

#define EFI_SYSTEM_RESOURCE_TABLE_GUID   \
{ 0xb122a263, 0x3661, 0x4f68,  0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21, 0x80  }

下表描述 ESRT 資料表的格式,以及資料表中包含的韌體資源專案。

欄位 陣列值 位元組長度 位元組位移 描述
韌體資源計數 4 0 ESRT 中的韌體資源專案數目。 不得為零。
韌體資源上限 4 4 不需要重新配置資料表,即可加入的資源陣列專案數目上限。 必須大於或等於韌體資源計數。
韌體資源版本 8 8 韌體資源專案版本。 此值應設定為 1
韌體資源專案陣列 韌體資源專案 0
Firmware 類別 16 16 GUID,識別可透過更新封裝更新的韌體元件。 此 GUID 會在更新期間傳遞至 UEFI 更新密封式執行時間服務,做為更新頭的 CapsuleGuid 參數。
韌體類型 4 32 下列其中一個值,可識別韌體資源的類型:

0:未知

1:系統韌體

2:裝置韌體

3:UEFI 驅動程式
韌體版本 4 36 目前的韌體版本,其中較大的數位代表較新版本。 此值的格式未定義,但應該納入版本主要和次要數位。 建議的格式是主字,第二個字是次要版本號碼。
最低支援的韌體版本 4 40 為指定的系統/裝置復原韌體資源的最低韌體資源版本。 如果此韌體版本提供安全性相關修正,則最低相容版本應等於目前的韌體版本。
太空旗標 4 44 系統會 (OS 負責設定 UEFI 規格第 7.5.3 節所定義之 UEFI) 規格第 7.5.3 節所定義的旗標,以 UEFI 標頭的 Flags 欄位 (16 – 31 個旗標。
上次嘗試版本 4 48 嘗試更新的最後一個韌體版本。 這個值使用與韌體版本相同的格式。
上次嘗試狀態 4 52 下列其中一個值,描述上次韌體更新嘗試的狀態:

0:成功

1:失敗

2:資源不足

3:版本不正確

4:影像格式無效

5:驗證錯誤

6:電源事件 - AC 未連線

7:電源事件 - 電池不足
... 韌體資源專案 1

核心 UEFI 韌體應該配置並填入包含一個系統資源專案的 ESRT 組態表,以供本身 (系統韌體) 。 為了說明目的,本指南核心韌體也會建立一個額外的專案,代表使用韌體更新套件機制支援裝置韌體更新的裝置。

一律必須有一個專案描述系統韌體。 此專案是用來以系統韌體更新為目標。 如果實作以單一整合型作業的形式執行系統和裝置韌體更新,則必須使用系統韌體專案來鎖定更新。 在其他所有情況下,裝置韌體更新會以描述裝置韌體的 ESRT 專案為目標。

接著,第一個步驟是產生 GUID 來代表這兩個韌體資源,也就是 {SYSTEM_FIRMWARE} 和 {DEVICE_FIRMWARE}。 表 2 顯示資料表定義的範例。 此範例假設這兩個韌體版本目前都是第 1 版 (韌體版本 == 1) 。

欄位 陣列值 註解
韌體資源計數 2 此資料表包含兩個韌體資源專案。
韌體資源上限 2 此資料表配置包含足夠的空間來描述最多兩個資源。
韌體資源版本 1 此資料表使用的韌體資源專案格式版本為 1。
韌體資源專案陣列 韌體資源專案 0
Firmware 類別 (SYSTEM_FIRMWARE) 此 GUID 會識別透過 PnP 進行更新的系統韌體。
韌體類型 1 系統韌體類型為 1。
韌體版本 1 目前的系統韌體版本為 1。
最低支援的韌體版本 1 最低支援的韌體版本為 1,因此無法回復至版本 1 之前的韌體。
密封旗標 0 系統韌體不會定義任何私人密封更新旗標。
上次嘗試版本 1 嘗試更新的最後一個系統韌體版本是第 1 版。
上次嘗試狀態 0 上次系統韌體更新嘗試成功。
韌體資源專案 1
Firmware 類別 (DEVICE_FIRMWARE) 此 GUID 會識別透過 PnP 更新的裝置韌體。
韌體類型 2 裝置韌體類型為 2。
韌體版本 1 目前的裝置韌體版本為 1。
最低支援的韌體版本 1 最低支援的韌體版本為 1,因此韌體無法回復至版本 1 之前的版本。
密封旗標 0x8010 裝置韌體會定義 (0x8010) 的私人擷取更新旗標。
上次嘗試版本 1 嘗試更新的最後一個裝置韌體版本是第 1 版
上次嘗試狀態 0 上次裝置韌體更新嘗試成功。

本檔中的上述 ESRT 範例用於其他位置,以逐步解說韌體更新程式,並描述更新程式的 Windows 支援,以及支援的韌體實作。

隨插即用裝置

撰寫更新驅動程式套件

處理更新

來自 UEFI 環境的裝置 I/O

順暢的危機預防與復原

韌體更新狀態