バグ チェック 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 を示します。