次の方法で共有


Windows Hardware Error Architecture のコンポーネント

次の図は、Windows ハードウェア エラー アーキテクチャ (WHEA) の主要なコンポーネントを示しています。

diagram illustrating relationships between a changer driver, user-mode applications and services, mass storage and port drivers, and a changer device.

オペレーティング システムによって検出されたハードウェア エラー ソースごとに、対応する下位レベルのハードウェア エラー ハンドラー (LLHEH) があります。 LLHEH は、ハードウェア エラー条件に応じて実行される最初のオペレーティング システム コードです。 LLHEH には、割り込みハンドラー、例外ハンドラー、ポーリング ルーチン、またはシステム ファームウェアによって呼び出されるコールバック ルーチンを指定できます。 各 LLHEH は、最も適切なソフトウェア モジュールに実装されます。I/O バスの場合、それぞれのバス ドライバーに存在します。プラットフォーム トラップ ハンドラーの場合、オペレーティング システム カーネルまたはハードウェア抽象化レイヤー (HAL) に存在します。

各 LLHEH は、次のタスクを実行します。

  • ハードウェア エラーを確認します。

  • ハードウェア エラーに関連する使用可能なエラー情報をキャプチャします。

  • ハードウェア エラー条件をオペレーティング システムに報告します。

通常、LLHEH はハードウェアおよびファームウェアと直接やり取りし、ハードウェア エラー情報を取得します。 LLHEH は、ハードウェア エラーに関連するすべての情報をハードウェア エラー パケットにコンパイルします。 ファームウェアが最初にハードウェア エラーを処理する状況では、対応する LLHEH がファームウェアと対話してエラー パケットを取得します。 すべての LLHEH は、ハードウェア エラー パケット データを一般的なエラー報告機能に渡すことによって、Windows オペレーティング システム カーネルにハードウェア エラーを報告します。

LLHEH と Windows カーネルはどちらも、プラットフォーム固有のハードウェア エラー ドライバー (PSHED) のサービスに基づいてプラットフォーム固有のエラー情報を収集します。 PSHED は、プラットフォームのエラー処理メカニズムの詳細をオペレーティング システムから隠し、一貫性のあるインターフェイスを Windows オペレーティング システムに公開することにより、基になるプラットフォームのハードウェア エラー報告機能の抽象化を提供します。 リソースを処理するハードウェア エラーへのシステム ファームウェア インターフェイスを含むプラットフォームでは、PSHED はファームウェアとのやり取りを処理します。 これにより、コア Windows コンポーネントは、アーキテクチャと見なされるエラー ステータス レジスタにのみアクセスできる一方で、より豊富で詳細なプラットフォーム固有のハードウェア エラー情報を取得できるメカニズムも提供できます。

プロセッサ アーキテクチャ (x86、x64、Itanium) ごとに、マイクロソフトは、そのアーキテクチャに共通するコア エラー処理動作を実装する PSHED を提供しています。 プラットフォーム ベンダーは、プラットフォーム固有の機能を利用する PSHED プラグインを提供することにより、既定の PSHED 機能を補完できます。 PSHED プラグインは、PSHED によって呼び出されるコールバック インターフェイスを実装する特殊な目的の Windows デバイス ドライバーです。 PSHED プラグインの目的は、マイクロソフトが提供する PSHED の既定の動作を拡張またはオーバーライドすることです。

PSHED プラグインは、プラットフォーム ベンダーがハードウェア プラットフォームのハードウェア エラー報告および回復機能へのソフトウェア インターフェイスとして実装することを目的としています。 PSHED プラグインは、プラットフォーム ベンダーによって定義されているプライベート インターフェイスまたはメカニズムを使って、プラットフォーム ファームウェアとやり取りすることができます。 これにより、プラットフォーム ベンダーは、ハードウェア エラー処理に既存のファームウェアを引き続き使用することができます。 マイクロソフトでは、より多くのハードウェア エラー報告と回復機能がいずれ標準化されると期待しています。 そのため、一般的なエラー処理とレポートのための PSHED プラグインの必要性が低下するため、PSHED プラグインは、標準のハードウェア エラー処理機能を超える追加の価値を提供するベンダー固有の機能をサポートするためにのみ必要になります。

PSHED プラグインを実装する方法について詳しくは、「プラットフォーム固有のハードウェア エラー ドライバー プラグイン」をご覧ください。

ハードウェア エラー条件の LLHEH によって通知されると、Windows は、ハードウェア エラーの状態を記述する標準化された形式でエラー レコードを作成します。 その後、Windows は PSHED を呼び出すことにより、追加のハードウェア エラー情報をエラー レコードに追加して、ハードウェア エラー条件をより適切に説明できるようにします。 PSHED プラグインがインストールされ、エラー情報の取得に参加するよう登録されている場合、PSHED は、エラー レコードの情報をさらに拡張できるよう PSHED プラグインを呼び出します。 Windows は、すべてのハードウェア エラー情報をエラー レコードにコンパイルした後、システム イベント ログにエラー情報を記録し、Windows イベント トレーシング (ETW) イベントを発生させてユーザー モード アプリケーションに通知します。

特定のハードウェア エラー条件下では、オペレーティング システムは、エラーから回復するためにシステムを強制的に再起動します。 このような状況では、システムが再起動されるまで、Windows はエラー情報をシステム イベント ログに記録したり、ユーザー モード アプリケーションに通知したりしません。 したがって、オペレーティング システムは、システムを再起動する前に、エラー レコードを何らかの形式の不揮発性ストレージに保存する必要があります。 PSHED は、オペレーティング システムがエラー レコードを格納および取得して、システムの再起動中にエラー情報が保持されるようにするためのインターフェイスを提供します。 PSHED プラグインがインストールされ、エラー レコードの永続化に参加するよう登録されている場合、PSHED プラグインは、エラー レコードを格納および取得するためのプラットフォーム固有の実装を提供できます。 システムが再起動されると、オペレーティング システムは、保存されたエラー レコードを取得して、システム イベント ログに正しく記録し、ユーザー モード アプリケーションに通知できるようにします。

WHEA がハードウェア エラーを処理する方法について詳しくは、「エラー処理」をご覧ください。

Windows には、ハードウェア エラー管理 API も用意されているため、ユーザー モード エラー管理アプリケーションは、ハードウェア エラー ソース情報の設定と取得、特定のエラー ソースのエラー処理の構成、ハードウェア プラットフォームへのハードウェア エラーの挿入をテスト目的で行うことができます。

WHEA 管理アプリケーションを実装する方法について詳しくは、「WHEA 管理アプリケーション」をご覧ください。