デバイスの障害の報告

デバイスの障害を報告するには、次の 3 つの方法があります:

上記の各メソッドのいずれでも、フレームワークがデバイスを効果的に取り外します。 デバイスのドライバーがシステム上の他のデバイスをサポートしていない場合、I/O マネージャーはドライバーをアンロードします。

ドライバーのデバイス オブジェクトコールバック関数が、 NT_SUCCESS(status) がFALSEと等しい値を返す場合、フレームワークは 、バス ドライバーにデバイスの再列挙を要求してデバイスの再起動を試みるPnP マネージャーに通知します。 ドライバーがアンロードされた場合、再ロードされます。

ドライバーはWdfDeviceSetFailedを呼び出す場合、デバイスを再起動するかどうかを決定する入力引数を指定します。 引数の値はWdfDeviceFailedAttemptRestartWdfDeviceFailedNoRestartです。

UMDF 2.15 より前の UMDF ドライバーは、この値を WdfDeviceFailedNoRestartに設定する必要があります。 UMDF バージョン 2.15 以降では、UMDF ドライバーは、 WdfDeviceFailedAttemptRestartに設定されたFailedActionWdfDeviceSetFailedを呼び出すことによって、基になるバスドライバーにその再列挙を要求できます。 詳細については、WdfDeviceSetFailedをご参照ください。

これらの引数値の詳細については、WDF_DEVICE_FAILED_ACTIONをご参照ください。 ドライバーのデバイス オブジェクトコールバック関数がNT_SUCCESS(status) が FALSEと等しい値を返す前に、コールバック関数は WdfDeviceFailedNoRestart の入力引数で WdfDeviceSetFailedを呼び出すことによって再起動を防ぐことができます。 それ以外の場合、これらのコールバック関数は WdfDeviceSetFailedを呼び出す必要はありません。

短時間のうちにいくつかの連続した再起動試行が失敗した場合 (再起動されたドライバーが再びエラーを報告するため)、フレームワークはデバイスの再起動の試行を停止します。

バス ドライバーの EvtDeviceD0Entry 関数が、NT_SUCCESS(status) がFALSEと等しい値を返す場合、フレームワークは引き続きバス ドライバーの子デバイスに関連付けられたドライバーのEvtDeviceD0Entry 関数を呼び出す可能性があります。