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 | |||
ファームウェアのクラス | 16 | 16 | 更新カプセルを介して更新できるファームウェア コンポーネントを識別する GUID。 この GUID は、更新中に更新カプセル ヘッダーの CapsuleGuid パラメーターとして UEFI 更新カプセル ランタイム サービスに渡されます。 | |
ファームウェアの種類 | 4 | 32 | ファームウェア リソースの種類を識別する次のいずれかの値。 0: 不明 1: システムのファームウェア 2: デバイスのファームウェア 3: UEFI ドライバー |
|
Firmware Version | 4 | 36 | 現在のファームウェア バージョン。新しいリリースほど数字が大きくなります。 この値の形式は定義されていませんが、バージョンのメジャー番号やマイナー番号を組み込みます。 推奨としては、最初の単語がメジャー バージョン番号、2 番目の単語がマイナー バージョン番号の形式にします。 | |
サポートされている最小バージョンのファームウェア | 4 | 40 | 特定のシステム / デバイスに対してファームウェア リソースをロールバックできる最小のファームウェア リソースのバージョン。 このファームウェア バージョンでセキュリティ関連の修正プログラムを使用できる場合、互換性の低いバージョンは現在のファームウェア バージョンと同じです。 | |
カプセル フラグ | 4 | 44 | 更新カプセル ヘッダーのフラグ フィールドのビット 0 ~ 15 で UEFI 更新カプセル ランタイム サービスに渡されるフラグ (OS は、UEFI 仕様のセクション 7.5.3 で定義されているフラグのビット 16 ~ 31 を構成します)。 | |
前回の試行バージョン | 4 | 48 | 更新が試行された最新のファームウェア バージョン。 この値はファームウェア バージョンと同じ形式を使用します。 | |
最新の試行の状態 | 4 | 52 | 最新のファームウェア更新の試行の状態を示す次のいずれかの値。 0: 成功 1: 失敗 2: リソース不足 3: 正しくないバージョン 4: 無効なイメージ形式 5: 認証エラー 6: 電源イベント - AC が接続されていません 7: 電源イベント - バッテリー不足 |
|
... | ファームウェア リソース エントリ 1 |
コア UEFI ファームウェアは、それ自体に 1 つのシステム リソース エントリ (システム ファームウェア) を含む ESRT 構成テーブルを割り当てて設定します。 説明の目的で、このガイドのコア ファームウェアでは、ファームウェア更新パッケージ メカニズムを使用してデバイス ファームウェアの更新をサポートするデバイスを表す 1 つの追加エントリも作成します。
システム ファームウェアを記述するエントリは常に 1 つのみ必要です。 このエントリは、システム ファームウェアの更新を対象とするために使用します。 実装でシステムとデバイスのファームウェアの更新を単一のモノリシック操作として実行する場合は、システム ファームウェア エントリを使用して更新プログラムをターゲットにする必要があります。 それ以外の場合、デバイス ファームウェアの更新プログラムは、デバイス ファームウェアを記述する ESRT エントリの対象となります。
最初の手順では、これら 2 つのファームウェア リソース ({SYSTEM_FIRMWARE} と {DEVICE_FIRMWARE}) を表す GUID を生成します。 表 2 はテーブル定義の例を示しています。 この例では、両方のファームウェア バージョンが現在のバージョン 1 (ファームウェア バージョン == 1) であることを前提としています。
フィールド | 配列の値 | Value | コメント |
---|---|---|---|
ファームウェア リソースの数 | 2 | この表には、2 つのファームウェア リソース エントリが含まれています。 | |
ファームウェア リソースの最大値 | 2 | このテーブルの割り当てには、最大 2 つのリソースを記述するために十分な領域が含まれています。 | |
ファームウェア リソースのバージョン | 1 | この表で使用するファームウェア リソース エントリ形式のバージョンは 1 です。 | |
ファームウェア リソース エントリ配列 | ファームウェア リソース エントリ 0 | ||
ファームウェアのクラス | (SYSTEM_FIRMWARE) | この GUID は、PnP を介して更新するシステム ファームウェアを識別します。 | |
ファームウェアの種類 | 1 | システム ファームウェアの種類は 1 です。 | |
Firmware Version | 1 | 現在のファームウェア バージョンは 1 です。 | |
サポートされている最小バージョンのファームウェア | 1 | サポートされているファームウェアの最小バージョンは 1 であるため、ファームウェアをバージョン 1 より以前のバージョンにロールバックすることはできません。 | |
カプセル フラグ | 0 | システム ファームウェアは、プライベート カプセル更新フラグを定義しません。 | |
前回の試行バージョン | 1 | 更新が試行された最新のシステム ファームウェア バージョンはバージョン 1 です。 | |
最新の試行の状態 | 0 | 最新のシステム ファームウェアの更新が成功しました。 | |
ファームウェア リソース エントリ 1 | |||
ファームウェアのクラス | (DEVICE_FIRMWARE) | この GUID は、PnP を介して更新するデバイス ファームウェアを識別します。 | |
ファームウェアの種類 | 2 | デバイスのファームウェアの種類は 2 です。 | |
Firmware Version | 1 | 現在のデバイス ファームウェア バージョンは 1 です。 | |
サポートされている最小バージョンのファームウェア | 1 | サポートされているファームウェアの最小バージョンは 1 であるため、ファームウェアをバージョン 1 より以前のバージョンにロール バックすることはできません。 | |
カプセル フラグ | 0x8010 | デバイス ファームウェアは、プライベート カプセル更新フラグ (0x8010) を定義します。 | |
前回の試行バージョン | 1 | 更新が試行された最新のデバイス ファームウェア バージョンはバージョン 1 です | |
最新の試行の状態 | 0 | 最新のデバイス ファームウェアの更新に成功しました。 |
上記の ESRT の例は、このドキュメントの他の場所で、ファームウェアの更新プロセスについて説明し、更新プロセスに対する Windows のサポートおよびサポートするファームウェアの実装について説明するために使用します。