バグ チェック 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 つ以上のドライバーを監視するように指示されている場合にのみ発生します。 ドライバー検証ツールを使用しない場合は、非アクティブ化してください。 この問題の原因となったドライバーを削除することも検討できます。

ドライバーの作者である場合、このバグ チェックで取得した情報を使用して、コード内のバグを修正してください。

ドライバー検証ツールの詳細については、「ドライバー検証ツール」を参照してください。