SoCプラットフォーム上のWindowsエディションのUEFI要件

この記事では、デスクトップ エディション (Home、Pro、Enterprise、Education) および Windows 10 Mobile の Windows 10 に適用される UEFI 要件について説明します。 Windows 10 Mobile にのみ適用される追加の要件については Windows 10 Mobile の UEFI 要件 を参照してください。

要件の概要

次の表に、UEFI 仕様 (UEFI 2.3.1 仕様のセクション 2.6) で定義されている UEFI コンプライアンスの現在の要件をすべて示します。 この表では 明示的な Windows 要件 という用語は、Windows コンポーネントによって直接呼び出されるすべてのプロトコルまたはサービスを識別します。 これらのサービスのみが Windows によって明示的に使用されますが、他の一覧に示されているサービスとプロトコルは、コア ファームウェアの実装、EFI デバイス ドライバー、または開発および展開ツール チェーンによって暗黙的または明示的に必要になる場合があります。

Microsoft は、この一連の要件に関する実装者からのフィードバックとコメントを歓迎します。 OS またはファームウェアのいずれにも必要ないと判断された UEFI コンプライアンス要件については、このクラスのデバイスに対してこれらのコンプライアンス要件を緩和するために、UEFI.org を通じて作業を行う必要があります。

特定の要件の詳細については、表の後のセクションを参照してください。

要件 UEFI 仕様セクション メモ
EFI システムテーブル 4.3 明示的な Windows 要件
EFIブートサービス 6.0
イベント、タイマー、タスク サービス 6.1
メモリサービス 6.2 明示的な Windows 要件`
プロトコル ハンドラー サービス 6.3 明示的な Windows 要件
画像サービス 6.4 明示的な Windows 要件
その他のサービス 6.5 明示的な Windows 要件
EFI ランタイム サービス 7.0
時間サービス 7.3 明示的な Windows 要件
変数サービス 7.2 明示的な Windows 要件
その他のサービス 7.5 明示的な Windows 要件
必要なUEFIプロトコル
EFI 読み込みイメージ プロトコル 8.1
EFI 読み込まれたイメージ デバイス パス プロトコル 8.2
EFI デバイス パス プロトコル 9.2 明示的な Windows 要件
EFI デバイス パス ユーティリティ プロトコル 9.5
EFI 展開プロトコル 18.5
EBC インタープリター プロトコル 20.11
条件付きで必要な UEFI プロトコル
EFI 単純テキスト入力プロトコル 11.3 明示的な Windows 要件
EFI簡易テキスト入力EXプロトコル 11.2
EFI 単純なテキスト出力プロトコル 11.4
EFI グラフィックス出力プロトコル 11.9 明示的な Windows 要件
EFI EDID 検出プロトコル 11.9.1
EFI EDID アクティブ プロトコル 11.9.1
EFI ブロック IO プロトコル 12.8 明示的な Windows 要件
EFI ディスク IO プロトコル 12.7
EFI 単純なファイル システム プロトコル 12.4
EFI Unicode 照合順序プロトコル 12.10
EFI 単純なネットワーク プロトコル 21.1
EFI PXE 基本コード プロトコル 21.3
EFI ブート整合性サービス プロトコル 21.5
EFI シリアル IO プロトコル 11.8
UEFI Arm のバインド 2.3.5 明示的な Windows 要件
セキュリティ要件
セキュア ブート 27.0 明示的な Windows 要件
ブート マネージャーの要件 3.1, 3.3 明示的な Windows 要件

EFI システム テーブルの要件

EFI システム テーブルは、実装されているリビジョン レベルの標準定義に準拠している必要があります。 EFI システム テーブルが指す構成テーブルには、次の表で説明する 2 つの GUID とそれに関連するポインターが含まれている必要があります。

GUID 説明
EFI_ACPI_テーブル GUID この GUID は、プラットフォームの ACPI ルート システム記述ポインター (RSDP) を指す必要があります。
S MB (メガバイト)IOS_Table GUID この GUID は、S MB (メガバイト)IOS エントリ ポイント構造体を指す必要があります。

Windows には、2.4 以降のリビジョン レベルで S MB (メガバイト)IOS 仕様が必要です。 セクション 3.2、「必須の構造とデータ」、4「準拠ガイドライン」が必要です。 Windows S MB (メガバイト)IOS 互換性テストを利用できます。

EFI ブート サービスの要件

次の表に、Windows の EFI ブート サービスの要件を示します。

EFIブートサービス 要件
メモリサービス Windows では、すべてのメモリ サービスが必要です。
プロトコル ハンドラー サービス Windows には、次のプロトコル ハンドラー サービスが必要です。

OpenProtocol()
CloseProtocol()
LocateDevicePath()
LocateHandle()
画像サービス Windows には、次のイメージ サービスが必要です。

ExitBootServices()
その他のブート サービス Windows には、次のその他のブート サービスが必要です。

Stall()

注: Stall() の実装では、エラー修正または取り消しを確実に行うことができるよう、決定論的 (反復可能) エラーが必要です。

EFI ランタイム サービスの要件

次の表に、Windows の EFI ランタイム サービス要件を示します。

EFI ランタイム サービス 要件
時間サービス Windows には次のタイム サービスが必要です。

GetTime()
SetTime()

注: タイム・サービスは、プラットフォームの時刻ハードウェアにアクセスするために、ブート中 (ExitBootServices()の前) にのみ呼び出されます。
変数サービス システムのターゲット クラスで複数のブート デバイスとセキュリティ変数を管理するには、すべての UEFI 変数サービスが必要です。
その他のランタイム サービス Windows には、次のその他のランタイム サービスが必要です。

ResetSystem()

注: ResetSystem() の実装では、リセット オプションとシャットダウン オプションの両方をサポートする必要があります。

プロトコル要件

次の表では、起動時に特定の機能を実行するために Windows に必要な UEFI プロトコルについて説明します。

Protocol 要件
グラフィック出力プロトコル Windows にはグラフィックス出力プロトコル (GOP) が必要です。 特定のフレーム バッファーの要件は次のとおりです。

統合ディスプレイの場合、 HorizontalResolutionVerticalResoluton はパネルのネイティブ解像度である必要があります。

外部ディスプレイの場合、 HorizontalResolutionVerticalResoluton はディスプレイのネイティブ解像度である必要があります。または、これがサポートされていない場合は、ビデオ アダプターと接続されたディスプレイの両方でサポートされる最大値が必要です。

PixelsPerScanLineHorizontalResolution と 等しくなければなりません。

PixelFormatPixelBlueGreenRedReserved8BitPerColor でなければなりません。 物理フレーム バッファーが必要です。 PixelBltOnly はサポートされていません。

実行が UEFI ブート アプリケーションに渡される場合、ファームウェア ブート マネージャーとファームウェアは、フレーム バッファーを任意の目的で使用してはなりません。 ブート サービスが終了した後も、フレーム バッファーは引き続きスキャンアウトされる必要があります。
代替表示出力 UEFI ファームウェアは、ハードウェアでサポートされている任意のディスプレイ コネクタを使用した起動をサポートする必要があります。 内部パネルが接続され、表示されている場合は、内部パネルを使用する必要があります。 物理的に接続されたディスプレイを持つすべての出力は、ブート画面を表示する必要があります。 接続されたディスプレイの場合、UEFI ファームウェアは次の要件を満たす必要があります。

ネイティブ解像度を決定できる場合は、ディスプレイのネイティブ モードで出力を初期化します。

ネイティブ モードが不可能な場合は、最も高い互換性のあるモードに初期化する必要があります。

表示機能を決定できない場合、接続されたディスプレイは、できるだけ多くのモニター (通常は 60 Hz で 640 x 480 または 1024 x 768) と互換性があるモードで初期化する必要があります。
起動時の入力 EFI Simple Text Input Protocol は、キーボードが組み込まれているシステムやキーボードが接続されているシステムでブートの選択やその他のメニューを選択するために必要です。 キーボードレス システムの場合、ブート環境では次の 3 つのボタンが推奨されます。

[スタート] ボタン
[音量を上げる] ボタン
音量小ボタン

ボタンの押下は、EFI 単純テキスト入力プロトコルを介して、それぞれ次のキーボード キーにマッピングして報告する必要があります。

Windows キー
上矢印キー
下方向キー
ローカル・ストレージ・ブート Windows では、EFI システム パーティションと Windows OS パーティションを含むストレージ ソリューションのブロック I/O プロトコルとデバイス パス プロトコルのサポートが必要です。 摩耗平準化またはその他のフラッシュ管理を必要とするフラッシュ ストレージから起動する場合は、ファームウェア (UEFI アプリケーションではなく) に実装する必要があります。

セキュリティ要件

Windows には、セキュア ブート、メジャー ブート、暗号化、データ保護の領域にセキュリティ要件があります。 これらの要件については、次の表で詳しく説明します。 さらに、SoC ハードウェアが既存の標準 (TPM、RTC など) への準拠を妨げている領域では、追加の要件が開発されています。 これらは、表の最後で説明します。

領域 要件
全般
  • 要件 1: 必須。 プラットフォームは、このセクションで指定されているすべての要件に準拠している必要があります。

  • 要件 2: 必須。 プラットフォームは、互換性サポート モジュールがインストールまたはインストールできない UEFI クラス 3 である必要があります。 BIOS エミュレーションとレガシ PC/AT ブートを無効にする必要があります。

UEFI セキュア ブート
  • 要件 3: 必須。 UEFI v2.3.1 セクション 27 で定義されているセキュア ブートは、マシンを安全に事前プロビジョニングして起動するために必要な署名データベース (EFI_IMAGE_Standard Edition CURITY_DATABA Standard Edition) と共に出荷する必要があります。 署名データベースの初期コンテンツは、必要なサード パーティの UEFI ドライバー、回復ニーズ、およびマシンにインストールされている OS ブート ローダーに基づいて OEM によって決定されますが、Microsoft が提供するEFI_CERT_X509署名が含まれている必要があります。 追加の署名は提示されません。

  • 要件 4: 必須。 UEFI "禁止" 署名データベース (EFI_IMAGE_Standard Edition CURITY_DATABA Standard Edition 1) が存在する必要があります。

  • 要件 5: 必須。 Microsoft が提供する UEFI KEK は、UEFI KEK データベースに含まれる必要があります。 追加の KEK は存在しません。 Microsoft は KEK をEFI_CERT_X509署名の形式で提供します。

  • 要件 6: 必須。 PKpub キーが存在し、ファームウェア フラッシュに格納されます。 注意:PKpriv(PKpubの秘密鍵)は、PKpubで提供されるすべてのデバイスのセキュアブートポリシーを制御するため、その保護と使用は厳重に管理する必要があります。

  • 要件 7: 必須。 初期署名データベースはファームウェア フラッシュに格納され、OEM 署名付きファームウェア更新プログラムまたは UEFI 認証変数書き込みでのみ更新できます。

  • 要件 8: 必須。 署名検証に失敗したブート パス内のイメージは実行しないでください。また、エラーの理由をEFI_IMAGE_EXECUTION_TABLEに追加する必要があります。 さらに、このような状況で推奨されるアプローチは、UEFI ブート マネージャーが OEM 固有の戦略に従って回復を開始することです。

  • 要件 9: 必須。 署名の検証に失敗した UEFI イメージでは、物理的に存在するユーザーのオーバーライドを許可しないでください。

  • 要件 10: 省略可能。 OEM は、物理的に存在するユーザーが PKpriv にアクセスするか、ファームウェア セットアップを通じて物理的存在を使用してセキュア ブートをオフにする機能を実装する場合があります。 ファームウェアのセットアップへのアクセスは、プラットフォーム固有の手段 (管理者パスワード、スマート カード、静的構成など) によって保護される場合があります。

  • 要件 11: 要件 10 が実装されている場合は必須。 セキュア ブートがオフになっている場合、既存のすべての UEFI 変数にアクセスすることはできません。

  • 要件 12: 省略可能。 OEM は、物理的に存在するユーザーがファームウェアのセットアップで 2 つのセキュア ブート モード ("Custom" と "Standard" のどちらか) を選択する機能を実装できます。 カスタム モードを使用すると、次に示すように柔軟性が向上します。

  • 要件 13: 要件 12 が実装されている場合は必須。 所有者固有の PK を設定することで、カスタム モードで無効になったセキュア ブートを再度有効にすることができます。 管理は、UEFI 仕様 v2.3.1: Firmware/OS Key Exchange のセクション 27.5 で定義されているように進む必要があります。 カスタム モードでは、デバイス所有者は署名データベースで署名の選択を設定できます。

  • 要件 14: 要件 12 が実装されている場合は必須。 ファームウェアのセットアップは、セキュア ブートが有効になっているかどうか、および標準モードまたはカスタム モードで動作しているかどうかを示します。 ファームウェアのセットアップには、カスタムモードから標準モードに戻るオプションが用意されています。

  • 要件 15: 必須。 ファームウェア設定が工場出荷時の既定値にリセットされた場合は、すべてのカスタム セットの保護された変数が消去され、元の PKpub が、製造元によってプロビジョニングされた元の署名データベースと共に再確立されます。

  • 要件 16: 必須。 ドライバーの署名では、Authenticode オプション (WIN_CERT_TYPE_PKCS_SIGNED_DATA) を使用する必要があります。

  • 要件 17: 必須。 EFI_IMAGE_EXECUTION_INFO_TABLEのサポート (つまり、起動中に開始または起動されていないイメージに関する情報の作成と保存)。

  • 要件 18: 必須。 EFI_IMAGE_Standard Edition CURITY_DATABA Standard Edition (承認された署名データベースと禁止された署名データベースの両方) に対する GetVariable() のサポート。

  • 要件 19: 必須。 認証に Microsoft KEK を使用して、EFI_IMAGE_Standard Edition CURITY_DATABA Standard Edition (承認された署名データベースと禁止された署名データベースの両方) に対して SetVariable() をサポートします。

  • 要件 20: 必須。 EFI_HASH_Standard Edition RVICE_BINDING_PROTOCOL: サービスのサポート: CreateChild()、DestroyChild()。

  • 要件 21: 必須。 EFI_HASH_PROTOCOL. サービス サポート: Hash()。 SHA_1および SHA-256 ハッシュ アルゴリズムのサポート。 メッセージの 10 MB 以上の長い渡しをサポートする必要があります。

UEFI 測定ブート

次の要件は、TCG TPM 実装の必要性を意味するものではありません。ただし、影響を受ける領域に同等の機能が必要です。

プラットフォームのサポートは、セキュリティで保護された実行環境で実行され、暗号化アクセラレーション エンジンの上に重ねて分離ストレージを利用する TPM のファームウェア実装によって提供される場合があります。 Microsoft は、ベンダーが使用するために、このような TPM 実装用の参照ソフトウェアを提供できる場合があります。 これについては、今後の議論の対象となります。

  • 要件 22: 必須。 プラットフォームは UEFI 信頼できる実行環境 EFI プロトコルで指定された EFI プロトコルに準拠する必要があります。

  • 要件 23: 必須。 プラットフォームは、次の追加で TCG EFI プラットフォーム仕様に従う必要があります。

    • Tr Enterprise Edition EFI プロトコルで定義されたインターフェイスをサポートするプラットフォームでは、PKpub のダイジェストは、EV_EFI_VARIABLE_CONFIG イベントとして TPM PCR[03] に拡張されます。

    • 承認された署名データベースの内容のダイジェスト (UEFI 仕様 v2.3.1 のセクション 27.8 を参照) の一覧は、EV_EFI_VARIABLE_CONFIG イベントとして測定されたブートで拡張する必要があります。 拡張操作は TPM PCR[03] に対して行う必要があります。

    • UEFI クライアントは、EFI_IMAGE_Standard Edition CURITY_DATABA Standard Edition変数を使用して証明書の一覧を読み取って解析し、拡張値に対してダイジェストを検証できます。

    • TCG_PCR_EVENTダイジェスト値は SHA-1 ではなく SHA-256 にする必要があります。

  • 要件 24: 必須。 プラットフォームは TCG プラットフォーム リセット攻撃緩和仕様で定義されている MemoryOverwriteRequestControl を実装する必要があります。

暗号
  • 要件 25: 必須。 プラットフォームは、暗号化ハッシュ操作のオフロード用のEFI_HASH_PROTOCOL (UEFI v2.3.1 セクション 27.4) を提供する必要があります。 SHA-256 がサポートされている必要があります。

  • 要件 26: 必須。 プラットフォームは、OS 前のエントロピー読み取りのために Microsoft が定義した EFI_RNG_PROTOCOL をサポートする必要があります。

データ保護
  • 要件 27: 必須。 プラットフォームでは、次の UEFI 変数属性セットの任意の組み合わせで EFI 変数をサポートする必要があります。

    • EFI_VARIABLE_BOOTSERVICE_ACCESS

    • EFI_VARIABLE_NON_VOLATILE

    • EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS

その他のセキュリティ要件

Windows on SoC プラットフォームでは、次の追加要件が必要です。

  • Microsoft では、UEFI プラットフォームからエントロピを収集するためのプロトコルを定義しています。 UEFI の要件ではありませんが、このプロトコルは、Windows on SoC プラットフォームで必要です。 このプロトコルの詳細については UEFI エントロピー収集プロトコルを参照してください。

  • UEFI Signature Database 更新。 認証された変数を更新するための新しいメカニズムが、UEFI 2.3.1 のセクション 27 で採用されました。 このメカニズムは、Windows で必要です。

  • 信頼できる実行環境。 Microsoft は、トラステッド コンピューティング グループ (TCG) トラステッド プラットフォーム モジュール (TPM) のサブセットと同様の機能で、信頼された実行環境 (Tr Enterprise Edition) と対話するための EFI プロトコルを開発しました。 EFI プロトコルは、トラステッド コンピューティング グループによって、2006 年 6 月 9 日に、バージョン 1.2 リビジョン 1.00 である"TCG EFI プロトコル" を大きく活用します。

    詳細については UEFI 高信頼実行環境 EFI プロトコルを参照してください。

ファームウェア ブート マネージャーの要件

ファームウェア ブート マネージャーは、仕様のセクション 3.3 で定義されている既定のブート動作をサポートする必要があります。 さらに、マルチブートのサポートのためには、グローバルに定義された変数と、仕様のセクション 3.1 のブート マネージャーの要件が必要です。

UEFI Arm のバインド要件

UEFI Arm Binding には、UEFI 仕様に準拠するために必要な Arm プラットフォームに固有の要件が含まれています。 Windows では、ARMv7 に適用できる Arm バインド内のすべてを必要とします。 Windows では ARMv7 以前の機能はサポートされていないため、ARMv6k 以下に固有のバインディングの要件は省略可能です。

バインディングでは、MMU の構成方法や物理メモリのマッピング方法などを指定します。 また、バインディングでは、UEFI プロトコルとサービスに対する呼び出しを Arm ISA でのみ行う必要があることを指定します。つまり、Thumb2 または Thumb で実行されているソフトウェアは、UEFI 関数を呼び出す前に Arm モードに切り替える必要があります。

UEFI Arm マルチプロセッサの起動要件

Microsoft は、マルチプロセッサ UEFI プラットフォームで複数の Arm コアを開始するためのプロトコルを開発しました。 このプロトコルは 電源状態調整インターフェイス (PSCI)をサポートしていない Arm プラットフォーム上の Windows で必要です。 PSCI をサポートするプラットフォームでは、このプロトコルを使用しないでください。 ここのプロトコルの詳細については、ACPI コンポーネント アーキテクチャ (ACPICA) Web サイトのドキュメント UEFI Arm ベースのプラットフォームでのマルチプロセッサの起動 を参照してください。

プラットフォームのセットアップ要件

ファームウェアは、OS ローダーに渡す前に、システム ハードウェアを明確に定義された状態にする役割を担います。 次の表では、関連するプラットフォームのセットアップ要件を定義します。

要件 説明
ブート パス ファームウェアは、Windows が UEFI 経由でブート デバイスにアクセスしてカーネルを読み込める時点までプラットフォームを初期化する必要があります。 ブート デバイスから読み取る階層に関係するすべてのデバイスは、パフォーマンスと電源に関する考慮事項を考慮して、適切な速度でクロックを供給し、電源を供給する必要があります。 ベース プロセッサ コア自体も、適切な速度でクロックを供給し、バッテリを消耗することなくシステムをタイムリーに起動できるようにする必要があります。
コアシステムリソース ACPI テーブルを介して OS に公開されるコア システム リソースの電源をオンにし、クロックを設定する必要があります。 コア システム リソースには、OS で管理する必要がある割り込みコントローラー、タイマー、DMA コントローラーが含まれます。 さらに、OS 内の関連するデバイス ドライバーがマスクを解除し、デバイスで割り込みを再度有効にするまで、ExitBootServices() の呼び出しによって割り込みをマスクする必要があります。 ブート サービス中に割り込みが有効になっている場合は、ファームウェアによって割り込みが管理されていると見なされます。
デバッグ Windows では、USB 3 ホスト (XHCI) 、USB 2 ホスト (EHCI)1、I Enterprise Edition E 1394、シリアルおよび USB 関数インターフェイス (および PCI イーサネット アダプター) を介したデバッグがサポートされています。 これらの少なくとも 1 つは、OS ハンドオフの前にファームウェアで電源を供給、クロック、初期化する必要があります。 どちらのオプションを指定する場合でも、デバッグ用の公開ポートが必要です。また、コントローラーはメモリ マップされているか、専用の (共有されていない) 周辺機器バス経由で接続されている必要があります。
その他のプラットフォームのセットアップ要件 OS ローダーに制御を渡す前に、ピン多重化とパッドの構成をファームウェアで完了する必要があります。

インストール要件

Windows では、OS パーティションが GPT パーティション分割ストレージ ソリューション上に存在する必要があります。 MB (メガバイト)R パーティション分割ストレージは、データ ストレージとして使用できます。 UEFI 仕様で定義されているように、UEFI プラットフォームには専用のシステム パーティションが必要です。 Windows では、EFI システム パーティション (ESP) と呼ばれるこの専用システム パーティションが必要です。

ハードウェア・セキュリティ・テスト・インターフェース (HSTI) の要件

プラットフォームはハードウェア セキュリティ テスト インターフェイスを実装する必要があり ハードウェア セキュリティ テスト容易性仕様で指定されているドキュメントとツールを共有する必要があります。

SoC プラットフォーム上の Windows に対する最小限の UEFI 要件

Windows 10 Mobile に対する UEFI 要件

USB フラッシング サポートのための UEFI 要件