共用方式為


錯誤檢查0xE6:DRIVER_VERIFIER_DMA_VIOLATION

DRIVER_VERIFIER_DMA_VIOLATION錯誤檢查的值為 0x000000E6。 這是所有驅動程式驗證器 DMA 驗證 違規的錯誤檢查碼。

重要

本文適用于程式設計人員。 如果您是在使用電腦時收到藍色螢幕錯誤碼的客戶,請參閱 針對藍色畫面錯誤進行疑難排解

注意

啟用驅動程式驗證程式時,可以觀察到 E6 主要錯誤檢查程式碼。 如果您在未啟用驅動程式驗證器的情況下遇到此程式碼,請參閱 DMA 驗證 頁面。

DRIVER_VERIFIER_DMA_VIOLATION參數

參數 1 是唯一感興趣的參數。 此參數會識別確切違規。 如果附加偵錯工具,偵錯工具會顯示資訊訊息。

參數 1 錯誤和偵錯工具訊息的原因

0x00 - 其他 DMA 錯誤。

此程式碼可以代表兩種錯誤,如參數 2 所示:

0x1 - 驅動程式嘗試排清對應暫存器檔案結尾的位元組太多。

參數 3 - MDL 中剩餘的位元組數目。

參數 4 - 要求排清的位元組數目。

0x2 - Windows 已用盡連續地圖暫存器。

參數 3 - 需要對應暫存器。

參數 4 - 連續對應暫存器的數目。

0x01

效能計數器已減少。 會顯示計數器的舊值和新值。

0x02

效能計數器的速度太快。 計數器值會顯示在偵錯工具中。

0x03

驅動程式釋放太多 DMA 通用緩衝區。 這通常表示它會釋放相同的緩衝區兩次。

參數 2 - 釋放的額外常見緩衝區數目。

0x04

驅動程式釋放太多 DMA 配接器通道。 這通常表示它會釋放相同的配接器通道兩次。

參數 2 - 釋出的額外配接器通道數目。

0x05

驅動程式釋放太多 DMA 地圖暫存器。 這通常表示釋放相同的地圖暫存器兩次。

參數 2 - 釋出的額外地圖暫存器數目。

0x06

驅動程式釋放太多 DMA 散佈/收集清單。 這通常表示釋放相同的散佈/收集清單兩次。

參數 2 - 配置的散佈收集清單。

參數 3 - 釋出散佈收集清單。

0x07

驅動程式嘗試釋放配接器,而不需要先釋放其所有通用緩衝區。

參數 2 - DMA 配接器的指標。

參數 3 - 未處理的常見緩衝區數目。

參數 4 - 對應內部驗證程式資料的指標。

0x08

驅動程式嘗試釋放配接器,而不先釋放所有配接器通道、一般緩衝區或散佈/收集清單。

參數 2 - DMA 配接器的指標。

參數 3 - 未處理的配接器通道數目。

參數 4 - 對應內部驗證程式資料的指標。

0x09

驅動程式嘗試釋放配接器,而不需要先釋放所有地圖暫存器。

參數 2 - DMA 配接器的指標。

參數 3 - 未處理的地圖暫存器數目。

參數 4 - 對應內部驗證程式資料的指標。

0x0A

驅動程式嘗試釋放配接器,而不需要先釋放其所有散佈/收集清單。

參數 2 - DMA 配接器的指標。

參數 3 - 未處理的散佈收集清單數目。

參數 4 - 對應內部驗證程式資料的指標。

0x0B

驅動程式同時配置太多介面卡通道, (每個配接器只允許一個介面卡通道。)

參數 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。

0x10

驅動程式嘗試釋放其對應暫存器,但有些仍已對應。

參數 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

驅動程式已將 null DMA_ADAPTER 值傳遞至 HAL 常式。

0x1B

驅動程式已將位址和 MDL 傳遞至 HAL 常式。 不過,此位址不在這個 MDL 的界限內。

參數 2 - 超出 MDL 界限的虛擬位址。

參數 3 - MDL。

0x1D

驅動程式嘗試對應已對應的位址範圍。

參數 2 - 對應開始的緩衝區。

參數 3 - 要對應結尾的緩衝區。

參數 4 - 緩衝區中已對應的系統位址。

0x1E

名為 HalGetAdapter 的驅動程式。 此函式已過時 -- 您必須改用 IoGetDmaAdapter

0x1F

不正確 DMA 緩衝區。 驅動程式參考了不正確系統位址 -- 可能是在第一個 MDL 之前或第一個 MDL 結尾之後,或是使用超過 MDL 緩衝區的傳輸長度,並跨越 MDL.Parameter 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

驅動程式嘗試對應零長度緩衝區以進行傳輸。

參數 2 - 對應內部驗證程式資料的指標。

0x22

系統 VA 中未對應的 DMA 緩衝區。

參數 2 - MDL

0x23

無法排清尚未完成或取消的通道。

參數 2 - 違規碼。

值:0x00:不合法的通道排清

參數 3 - 控制器識別碼。

參數 4 - 通道號碼。

0x24

要求長度的緩衝區不足。

參數 2 - 未計數的長度。

0x25

未知的裝置描述版本。

0x26

IOMMU 偵測到 DMA 違規。

參數 2 - 裝置錯誤裝置的裝置物件。

參數 3 - 錯誤資訊 (通常會錯誤實體位址) 。

參數 4 - 錯誤類型 (硬體特定) 。

原因

如需原因的描述,請參閱 Parameters 區段中每個程式碼的描述。

解決方案

只有在指示驅動程式驗證程式監視一或多個驅動程式時,才會進行這個錯誤檢查。 如果您不想使用驅動程式驗證器,您應該停用它。 您也可以考慮移除造成此問題的驅動程式。

如果您是驅動程式寫入器,請使用透過這個錯誤檢查取得的資訊來修正程式碼中的 Bug。

如需驅動程式驗證器的詳細資訊,請參閱 驅動程式驗證器