バグ チェック 0xE6: DRIVER_VERIFIER_DMA_VIOLATION
DRIVER_VERIFIER_DMA_VIOLATION バグ チェックには、値 0x000000E6 があります。 これは、すべてのドライバー検証ツールの DMA 検証違反のバグ チェック コードです。
重要
この記事は、プログラマー向けです。 コンピューターを使用中に、ブルー スクリーン エラーが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。
Note
E6 の主要バグ チェック コードは、ドライバー検証ツールが有効になっていない場合に確認できます。 ドライバー検証ツールを有効にせずにこのコードが発生した場合は、「DMA 検証」ページを参照してください。
DRIVER_VERIFIER_DMA_VIOLATION パラメーター
パラメーター 1 は、対象となる唯一のパラメーターです。 このパラメーターは、正確な違反を識別します。 デバッガーがアタッチされている場合、デバッガーに情報メッセージが表示されます。
パラメーター 1 | エラーとデバッガー メッセージの原因 |
---|---|
0x00 - その他の DMA エラー。 |
このコードは、パラメーター 2 で示される 2 種類のエラーを表すことができます。 0x1 - ドライバーがマップ レジスタ ファイルの末尾にフラッシュしようとしたバイト数が多すぎます。 パラメーター 3 - MDL に残ったバイト数。 パラメーター 4 - フラッシュ対象として要求された残りバイト数。 0x2 - 連続するマップ レジスタが Windows になくなりました。 パラメーター 3 - マップ レジスタが必要です。 パラメーター 4 - 連続するマップ レジスタの数。 |
0x01 |
パフォーマンス カウンターが減少しました。 カウンターの古い値と新しい値が表示されます。 |
0x02 |
パフォーマンス カウンターが速すぎます。 カウンター値がデバッガーに表示されます。 |
0x03 |
ドライバーが解放した DMA 共通バッファーが多すぎます。 通常、これは同じバッファーを 2 回解放したという意味です。 パラメーター 2 - 解放された追加の共通バッファーの数。 |
0x04 |
ドライバーが解放した DMA アダプター チャネルが多すぎます。 通常、これは同じアダプター チャネルを 2 回解放したという意味です。 パラメーター 2 - 解放された追加アダプター チャネルの数。 |
0x05 |
ドライバーが解放した DMA マップ レジスタが多すぎます。 通常、これは同じマップ レジスタを 2 回解放したことを意味します。 パラメーター 2 - 解放された追加のマップ レジスタの数。 |
0x06 |
ドライバーが解放した DMA 散布図/収集リストが多すぎます。 通常、これは同じ散布図/収集リストを 2 回解放したことを意味します。 パラメーター 2 - 割り当てられた散布図収集リスト。 パラメーター 3 - 解放された散布図収集リスト。 |
0x07 |
ドライバーは、共通バッファーをすべて解放する前にアダプターを解放しようとしました。 パラメーター 2 - DMA アダプターへのポインター。 パラメーター 3 - 未処理の共通バッファーの数。 パラメーター 4 - 対応する内部検証ツール データへのポインター。 |
0x08 |
ドライバーは、アダプター チャネル、共通バッファー、または散布図/収集リストをすべて解放する前にアダプターを解放しようとしました。
パラメーター 2 - DMA アダプターへのポインター。 パラメーター 3 - 未処理のアダプター チャネルの数。 パラメーター 4 - 対応する内部検証ツール データへのポインター。 |
0x09 |
ドライバーは、マップ レジスタをすべて解放する前にアダプターを解放しようとしました。 パラメーター 2 - DMA アダプターへのポインター。 パラメーター 3 - 未処理のマップ レジスタの数。 パラメーター 4 - 対応する内部検証ツール データへのポインター。 |
0x0A |
ドライバーは、すべての散布図/収集リストをすべて解放する前にアダプターを解放しようとしました。 パラメーター 2 - DMA アダプターへのポインター。 パラメーター 3 - 未処理の散布図収集リストの数。 パラメーター 4 - 対応する内部検証ツール データへのポインター。 |
0x0B |
ドライバーが同時に割り当てたアダプター チャネルが多すぎます (許可されるアダプター チャネルはアダプターごとに 1 つのみです)。 パラメーター 2 - 未処理のアダプター チャネル。 |
0x0C |
ドライバーが同時に割り当てようとしたマップ レジスタが多すぎます。 パラメーター 2 - 必要なマップ レジスタ。 パラメーター 3 - マップ レジスタの最大数。 |
0x0D |
ドライバーがアダプター バッファーをフラッシュしませんでした。 パラメーター 2 - マップされたバイト数。 パラメーター 3 - 一度にマップできる最大バイト数。 |
0x0E |
ドライバーは、バッファーをロックせずに DMA 転送を試みました。 問題のバッファーはページ メモリにありました。 パラメーター 2 - DMA バッファー MDL のアドレス。 |
0x0F |
ドライバーまたはハードウェアが、割り当てられた DMA バッファーの外側に書き込みました。 パラメーター 2 は違反コードです。 0x01: DMA バッファーの前のタグが変更されました。予期されるタグは DmaVrfy0 です。 パラメーター 3 - バッファーの長さ。 パラメーター 4 - バッファーの開始。 0x02: DMA バッファーの後のタグが変更されました。 予期されるタグは DmaVrfy0 です。パラメーター 3 - バッファーの長さ。 パラメーター 4 - バッファーの開始。 0x03: 無料のマップ レジスタが上書きされました。パラメーター 3 - 破損アドレス。 期待される塗りつぶしパターンは 0x0F です。 0x04: バッファーの前のパディングが誤って変更されました。パラメーター 3 - バッファーの開始。 期待されるパディングは 0x0F です。 パラメーター 4 - 破損アドレス。 0x05: バッファーの後のパディングが誤って変更されました。パラメーター 3 - バッファーの開始。 パラメーター 4 - 破損アドレス。 期待されるパディング パターンは 0x0F です。 |
0煮10 |
マップされているマップ レジスタがまだあるときに、ドライバーがマップ レジスタを解放しようとしました。 パラメーター 2 - まだマップされているレジスタの数。 |
0x11 |
ドライバーにあるアダプターの未処理の参照数が多すぎます。 パラメーター 2 - 参照カウント。 パラメーター 3 - DMA アダプターへのポインター。 パラメーター 4 - 対応する内部検証ツール データへのポインター。 |
0x13 |
ドライバーが、不適切な IRQL で DMA ルーチンを呼び出しました。 パラメーター 2 は違反コードです。 0x01: 現在の IRQL が期待と異なります。パラメーター 3 - 期待される IRQL。 パラメーター 4 - 現在の IRQL。 0x02: 現在の IRQL は期待より高くなっています。パラメーター 3 - 期待される最大 IRQL。 パラメーター 4 - 現在の IRQL。 |
0x14 |
ドライバーが、不適切な IRQL で DMA ルーチンを呼び出しました。 |
0x15 |
ドライバーが割り当てようとしたマップ レジスタが多すぎます。 パラメーター 2 - 割り当てられたマップ レジスタ。 パラメーター 3 - マップ レジスタの最大数。 |
0x16 |
ドライバーが、マップされていないバッファーをフラッシュしようとしました。 パラメーター 2 - マップ レジスタのシステム仮想空間内のアドレス。 パラメーター 3 - 対応する内部検証ツール データへのポインター。 |
0x18 |
ドライバーが、既に解放されて存在しなくなったアダプターを使用して DMA 操作を試みました。 パラメーター 2 - DMA アダプターへのポインター。 パラメーター 3 - 対応する内部検証ツール データへのポインター。 |
0x19 |
ドライバーが、HAL ルーチンに null DMA_ADAPTER 値を渡しました。 |
0x1B |
ドライバーが、HAL ルーチンにアドレスと MDL を渡しました。 ただし、このアドレスはこの MDL の境界内にありません。 パラメーター 2 - MDL 境界外の仮想アドレス。 パラメーター 3 - MDL。 |
0x1D |
ドライバーが、既にマップされているアドレス範囲をマップしようとしました。 パラメーター 2 - マップを開始するバッファー。 パラメーター 3 - マップを終了するバッファー。 パラメーター 4 - 既にマップされているバッファー内のシステム アドレス。 |
0x1E |
HalGetAdapter というドライバー。 この関数は廃止されました。代わりに IoGetDmaAdapter を使用する必要があります。 |
0x1F |
DMA バッファーが無効です。 ドライバーが、最初の MDL の前または最初の MDL の終了後に、あるいは MDL バッファーより長く、MDL 内のページ境界を越える転送長を使用することにより、無効なシステム アドレスを参照しました。パラメーター 2 は違反コードです。 0x01: 仮想バッファー アドレスは、最初の MDL の前にあります。 パラメーター 3 - DMA バッファーの開始の仮想アドレス。 パラメーター 4 - DMA バッファーを記述する最初の MDL へのポインター。 0x02: 仮想アドレスは最初の MDL の後にあります。 パラメーター 3 - DMA バッファーの開始の仮想アドレス。 パラメーター 4 - DMA バッファーを記述する最初の MDL へのポインター。 0x03: 余分な転送長がページ境界を越えています。 パラメーター 3 - DMA バッファーを記述する MDL へのポインター。 パラメーター 4 - DMA 転送の長さ。 0x04: DMA バッファーの仮想アドレスがキャッシュにアラインされていません。 パラメーター 3 - DMA バッファーの開始の仮想アドレス。 パラメーター 4 - DMA バッファーを記述する MDL へのポインター。 0x05: DMA バッファーの長さがキャッシュにアラインされていません。 パラメーター 3 - DMA バッファーの長さ。 パラメーター 4 - DMA バッファーを記述する MDL へのポインター。 |
0x20 |
ドライバーが、マップされていないマップ レジスタをフラッシュしようとしました。 パラメーター 2 - マップ レジスタ ベース。 パラメーター 3 - DMA バッファーの開始の VA。 パラメーター 4 - DMA バッファーの記述に使用される MDL へのポインター。 |
0x21 |
ドライバーが、転送のために長さ 0 のバッファーをマップしようとしました。 パラメーター 2 - 対応する内部検証ツール データへのポインター。 |
0x22 |
DMA バッファーがシステム VA にマップされていません。 パラメーター 2 - MDL |
0x23 |
完了またはキャンセルされていないチャネルはフラッシュできません。 パラメーター 2 - 違反コード。 値: 0x00: 無効なチャネル フラッシュ パラメーター 3 - コントローラー ID。 パラメーター 4 - チャネル番号。 |
0x24 |
要求された長さのバッファーが不足しています。 パラメーター 2 - 未カウントの長さ。 |
0x25 |
デバイス説明のバージョンが不明です。 |
0x26 |
IOMMU により DMA 違反が検出されました。 パラメーター 2 - 障害が発生しているデバイスのデバイス オブジェクト。 パラメーター 3 - エラー情報 (通常は物理アドレスの障害)。 パラメーター 4 - 障害の種類 (ハードウェア固有)。 |
原因
原因については、「パラメーター」セクションの各コードの説明を参照してください。
解決方法
このバグ チェックは、ドライバー検証ツールが 1 つ以上のドライバーを監視するように指示されている場合にのみ発生します。 ドライバー検証ツールを使用しない場合は、非アクティブ化してください。 この問題の原因となったドライバーを削除することも検討できます。
ドライバーの作者である場合、このバグ チェックで取得した情報を使用して、コード内のバグを修正してください。
ドライバー検証ツールの詳細については、「ドライバー検証ツール」を参照してください。