バグ チェック 0x10D: WDF_VIOLATION

WDF_VIOLATION バグ チェックの値は 0x0000010D です。 これは、Windows がフレームワーク ベースのドライバーでエラーを検出したことをカーネル モード ドライバー フレームワーク (KMDF) が検出したことを示します。

重要

この記事は、プログラマー向けです。 コンピューターを使用中に、ブルー スクリーン エラーが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。

WDF_VIOLATION パラメーター

パラメーター 1 は、バグ チェックの特定のエラー コードを示します。 パラメーター 4 は予約済み

パラメーター 1 パラメーター 2 パラメーター 3 エラーの原因

0x1

WDF_POWER_ROUTINE_TIMED_OUT_DATA 構造体へのポインター

予約済み

電力操作中にフレームワーク ベースのドライバーがタイムアウトになりました。 これは通常、デバイス スタックが DO_POWER_PAGABLE ビットを設定しておらず、ページング デバイス スタックの電源がオフになった後に、ドライバーがページング可能な操作を試行したことを意味します。

0x2

予約済み

予約済み

現在保持されているロックを取得しようとしています。

0x3

WDFREQUEST ハンドル

両方のバッファーに残っている未処理の参照数

Windows Driver Framework 検証ツールで致命的なエラーが発生しました。 特に、I/O 要求は完了しましたが、入力バッファー、出力バッファー、またはその両方への未処理の参照があるため、フレームワーク要求オブジェクトを削除できません。

0x4

予約済み

呼び出し元のアドレス

NULL パラメーターは、NULL 以外の値が必要な機能に渡されました。

0x5

渡されたハンドル値

予約済み

正しくない型のフレームワーク オブジェクト ハンドルがフレームワーク オブジェクト メソッドに渡されました。

0x6

次の表を参照してください。

0x7

フレームワーク オブジェクトのハンドル

予約済み

ドライバーは、WdfObjectDelete を呼び出す代わりに WdfObjectDereference を呼び出してハンドルを削除することにより、フレームワーク オブジェクトを誤って削除しようとしました。

0x8

DMA トランザクション オブジェクトのハンドル

予約済み

DMA トランザクション オブジェクトが正しい状態でないときに、操作が発生しました。

0x9

現在未使用です。

0xA

WDF_QUEUE_FATAL_ERROR_DATA 構造体へのポインター

予約済み

現在キュー内にある要求の処理中に致命的なエラーが発生しました。

0xB

次の表を参照してください。

0xC

WDFDEVICE ハンドル

新しい PnP IRP へのポインター

ドライバーが別の状態変更 PnP IRP を処理している間に、新しい状態変更 PnP IRP が届きました。

0xD

WDFDEVICE ハンドル

電源 IRP へのポインター

デバイスの電源ポリシー所有者が、要求しなかった電源 IRP を受け取りました。 複数の電源ポリシー所有者が存在する可能性がありますが、許可されるのは 1 つだけです。 KMDF ドライバーは、WdfDeviceInitSetPowerPolicyOwnership を呼び出すことによって、電源ポリシーの所有権を変更できます。

0xE

イベント コールバック関数が呼び出された IRQL。

イベント コールバック関数が返された IRQL。

イベント コールバック関数は、呼び出された IRQL と同じ IRQL で返されませんでした。 コールバック関数は、IRQL を直接または間接的に変更しました (たとえば、スピンロックを取得し、IRQL を DISPATCH_LEVEL に発生させるが、スピンロックを解放しないなど)。

0xF

イベント コールバック関数のアドレス。

予約済み

イベント コールバック関数はクリティカル リージョンに入りましたが、返す前にクリティカル リージョンを離れませんでした。

パラメーター 1 は 0x6 と等しい

パラメーター 1 が 0x6 と等しい場合、WDF 要求の処理中に致命的なエラーが発生しました。 この場合、パラメーター 2 は、リスト WDF_REQUEST_FATAL_ERROR によって定義された致命的なエラーの種類をさらに指定します。

パラメーター 2 パラメーター 3 エラーの原因

0x1

IRP のアドレス

基になる IRP の書式設定に使用できる I/O スタックの場所は残っていません。

0x2

WDF 要求ハンドル値

IRP を含まないフレームワーク要求オブジェクトを書式設定しようとしました。

0x3

WDF 要求ハンドル値

ドライバーは、I/O ターゲットに既に送信されているフレームワーク要求を送信しようとしました。

0x4

IRP へのポインター、WDF 要求ハンドル値、IRP メジャー関数、および書き込もうとしたバイト数を含むWDR_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA 構造体へのポインター

ドライバーはフレームワーク要求を完了しましたが、IRP で指定されているよりも多くのバイトを出力バッファーに書き込みました。

パラメーター 1 が 0xB と等しい

パラメーター 1 が 0xB と等しい場合、ロックの取得または解放の試行は無効でした。 この場合、パラメーター 3 は、行われたエラーをさらに指定します。

パラメーター 2 パラメーター 3 エラーの原因

ハンドル値

0x0

WdfObjectAcquireLock または WdfObjectReleaseLock に渡されたハンドルは、同期ロックをサポートしないオブジェクトを示します。

WDF スピン ロック ハンドル

0x1

スピン ロックは、取得されなかったスレッドによって解放されています。

原因

原因の説明については、「パラメーター」セクションの各コードの説明を参照してください。

解決方法

!analyze デバッグ拡張コマンドは、バグ チェックに関する情報を表示し、エラーが発生しているコード モジュールなどの情報を収集する場合に役立ちます。

通常、WDF ダンプ ファイルは、このバグ チェックの原因となったドライバーに関する詳細情報を生成します。 このコマンドを使用して、ログ ファイルを確認します。

kd> !wdfkd.wdflogdump <WDF_Driver_Name>

パラメーター 1 が 0x2 と等しい場合は、呼び出し元のスタックを調べて、問題のロックを特定します。

パラメーター 1 が 0x3 と等しい場合、ドライバーのカーネル モード ドライバー フレームワークのエラー ログには、未処理の参照に関する詳細が含まれます。

パラメーター 1 が 0x4 と等しい場合、ln debugger コマンドを使用し、Parameter 3 の値を引数として、NULL 以外のパラメーターを必要とする関数を特定します。

パラメーター 1 が 0x7 と等しい場合、!wdfkd.wdfhandleParameter 2 拡張コマンドを使用して、ハンドルの種類を特定します。

パラメーター 1 が 0xA と等しい場合、WDF_QUEUE_FATAL_ERROR_DATA 構造体は、問題のある要求またはキュー ハンドルのいずれかを示します。 また、使用可能な場合、STATUS_SUCCESS ではなく NTSTATUS を示します。