Windows 10 で WHEA を使用する

Windows 10 バージョン 2004 では、Windows ハードウェア エラー アーキテクチャ (WHEA) に新しいインターフェイス (v2) が含まれています。 このページでは、エラー ソースとして登録し、エラーを報告する方法について説明します。

エラー ソースの追加

WHEA v2 を使用してエラー ソースとして WHEA に登録するには、ドライバーで次の操作を行う必要があります。

  1. WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER 構造をインスタンス化し、WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER および WHEA_ERROR_SOURCE_UNINITIALIZE_DEVICE_DRIVER イベント コールバック関数へのポインターを提供することにより、デバイス ドライバーの構成を指定します。

  2. 構成構造を指定して WheaAddErrorSourceDeviceDriver を呼び出します。 通常、ドライバーは DriverEntry からこのルーチンを呼び出します。

    後でエラー ソースを削除するには、WheaRemoveErrorSourceDeviceDriver を呼び出します。

  3. WHEA は、エラー ソースがエラーを報告する準備ができたときに、ドライバーの WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER イベント コールバック関数を呼び出します。 ドライバーは、コールバックのパラメーターとして ErrorSourceId を受け取ります。

エラーの報告

エラーを報告するには、次の手順を順番に同時に実行します。

  1. WheaCreateHwErrorReportDeviceDriver を呼び出し、ErrorSourceId と、必要に応じてドライバーの DeviceObject を指定します。 このルーチンは、処理中のエラーにハンドルを返します。

  2. エラーにデータを追加するには、WheaAddHwErrorReportSectionDeviceDriver を呼び出し、エラー ハンドルを指定します。 この関数は、エラー レポートに 1 つのセクションを追加し、ドライバーが提供するデータ バッファーを構成します。 ドライバーは、WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER で指定されている MaxSectionsPerReport の時間まで、このルーチンを呼び出すことができます。

    必要に応じて、ドライバーは WheaHwErrorReportSetSeverityDeviceDriver を呼び出して、パケットとセクションのエラーの重大度を設定できます。 WHEA_ERROR_RECORD_SECTION_DESCRIPTOR 構造の FRUText フィールドを更新するためのヘルパー関数である WheaHwErrorReportSetSectionNameDeviceDriver もご覧ください。

  3. エラー データをバッファー セットにコピーします。

  4. WheaHwErrorReportSubmitDeviceDriver を呼び出し、エラー ハンドルをもう一度指定します。 この呼び出しの後、バッファー セット内のバッファーは使用することができなくなり、ハンドルは無効になります。

  5. エラーが発生した場合、またはエラーが無効になった場合、ドライバーは必要に応じて WheaHwErrorReportAbandonDeviceDriver を呼び出すことができます。 この場合、WHEA にレポートは送信されません。

ドライバーは、WheaCreateHwErrorReportDeviceDriver によって作成されたすべてのハンドルで WheaHwErrorReportSubmitDeviceDriver または WheaHwErrorReportAbandonDeviceDriver を呼び出す必要があります。 それ以外の場合、WheaRemoveErrorSourceDeviceDriver は STATUS_RESOURCE_IN_USE を返す可能性があります。