錯誤檢查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。
如需驅動程式驗證器的詳細資訊,請參閱 驅動程式驗證器。