驅動程式驗證器:新功能
從 Windows 2000 開始,驅動程式驗證程式適用于所有版本的 Windows。 每個版本都會引進新功能,並檢查在 Windows 驅動程式中尋找 Bug。 本節摘要說明變更,並提供相關檔的連結。
- Windows 10中的驅動程式驗證器
- Windows 8.1中的驅動程式驗證器
- Windows 8中的驅動程式驗證器
- Windows 7 中的驅動程式驗證程式
- Windows Vista 中的驅動程式驗證器
- Windows XP 中的驅動程式驗證器
Windows 11 (中的驅動程式驗證程式已更新:2021 年 9 月 30日)
從Windows 11開始,許多旗標現在會使用與volatile 語法不同的命令語法來啟用,而不需要重新開機。 如需新語法的詳細資訊,請參閱 驅動程式驗證器命令語法 。
Windows 10 (中的驅動程式驗證程式已更新:2018 年 5 月 8日)
重要
如需在 Windows 10 1803 版或更新版本上啟用 WDF 驗證器的相關資訊,請參閱使用 KMDF 驗證器。
- 您仍然可以在驅動程式驗證器的
/standard
旗標中啟用 WDF 驗證。 如需詳細資訊 ,請參閱驅動程式驗證器命令語法 。 - 如果您使用語法
/flags 0x209BB
啟用 DV,此變更將不會影響您,因為 WDF 驗證將不再自動啟用。
從Windows 10開始,驅動程式驗證器包含下列技術的新驅動程式驗證規則:
Windows 8-1 (中的驅動程式驗證程式已更新:2013 年 6 月 17日)
從Windows 8.1開始,驅動程式驗證器引進了四個新選項來偵測錯誤。
NDIS/WIFI 驗證選項會套用一組 NDIS 和無線區域網路 規則,以檢查 NDIS 迷你埠驅動程式與作業系統核心之間的適當互動。
系統化的低資源模擬選項會在核心模式驅動程式中插入資源失敗。
核心同步處理延遲模糊選項會隨機化執行緒排程,以協助偵測驅動程式中的並行錯誤。
VM 交換器驗證選項會監視在Hyper-V 可延伸交換器內執行的可延伸交換器擴充功能) (篩選驅動程式。
新的偵錯工具延伸模組: !ruleinfo
更新Windows 8 (中的驅動程式驗證程式:2012 年 10 月 20日)
從Windows 8開始,驅動程式驗證器引進了五個新選項來偵測錯誤。
- Power Framework 延遲模糊選項會插入隨機執行延遲,以協助偵測使用電源管理架構的驅動程式中的並行錯誤, (PoFx) 。 執行延遲有上限。 不建議針對未直接使用電源管理架構的驅動程式使用此選項, (PoFx) 。
- DDI 合規性檢查選項會套用相同的設備磁碟機介面, (DDI) 使用規則,靜態驅動程式驗證程式會用來驗證驅動程式在函式所需的 IRQL 上呼叫函式。 DDI 合規性檢查會在標準驅動程式驗證器選項中執行。
- Invariant MDL Checking for Stack選項會監視驅動程式如何處理驅動程式堆疊上的不變異 MDL 緩衝區。
- [驅動程式的不變異 MDL 檢查] 選項會監視驅動程式如何處理每個驅動程式的不變異 MDL 緩衝區。
- 堆疊型失敗插入選項會在核心模式驅動程式中插入資源配置失敗。
當您使用 Visual Studio 2012 和適用于 Windows 8 的 WDK 建置、部署及測試驅動程式時,您也可以在部署驅動程式以進行測試時,將驅動程式驗證器設定為在測試電腦上執行。
Windows 7 中的驅動程式驗證程式 (已更新:2012 年 10 月 22 日)
針對 Windows 7,驅動程式驗證器已使用新的測試和功能來增強,可讓驅動程式驗證器公開更多一般驅動程式 Bug 類別。
- 來自核心驅動程式的使用者控制碼參考不正確
- I/O 驗證改善
- 特殊集區、集區追蹤和低資源模擬改善
- 同步處理機制的使用不正確
- 不正確的物件參考
- DPC 常式的集區配額費用
- 系統關機區塊或延遲
- 改善強制擱置 I/O 要求
在 Windows 7 中,驅動程式驗證程式會提供佇列微調鎖定的檢查,這些檢查類似于在舊版 Windows 中微調鎖定所提供的檢查。 這些檢查包括下列各項:
確認應該引發中斷要求層級的作業 (IRQL) 值,例如 KeAcquireInStackQueuedSpinLock,實際上不會降低 IRQL 值。
確認應該降低 IRQL 值的作業,例如 KeReleaseInStackQueuedSpinLock,實際上不會引發 IRQL 值。
如果已啟用 強制 IRQL 檢查 選項,則修剪系統進程的工作集,當 IRQL 引發為DISPATCH_LEVEL或更新版本時,嘗試在驅動程式在提升許可權的 IRQL 執行時公開可分頁記憶體的可能參考。
在啟用死結偵測選項時預測可能的死結。
嘗試在啟用死結偵測選項時,使用與微調鎖定相同的KSPIN_LOCK資料結構,以及作為堆疊佇列微調鎖定。
檢查是否有明顯不正確的指標值,例如用來作為微調鎖定位址的使用者模式虛擬位址。
記錄驅動程式驗證器 IRQL 記錄檔中的 IRQL 轉換。 當您使用 Windows 偵錯工具的 !verifier 8 擴充功能時,會出現這項資訊。 請參閱 !verifier。
其他偵錯資訊
在 Windows 7 中,驅動程式驗證程式提供下列有助於偵錯的其他資訊:
有一個記錄檔,其堆疊追蹤會依時間順序從已驗證的驅動程式呼叫 KeEnterCriticalRegion 和 KeLeaveCriticalRegion 。 記錄內容是使用 Windows 偵錯工具的 !verifier 0x200 偵錯工具擴充功能來顯示。 這項資訊對於瞭解執行緒意外在重要區域中執行或嘗試離開重要區域的案例很有用。
您可以使用!verifier 0x40偵錯工具擴充功能,從強制擱置 I/O 要求記錄檔顯示其他資訊。 在舊版 Windows 中,記錄只包含驅動程式驗證器強制擱置的每個 IRP 一個堆疊追蹤。 這是第一次針對強制擱置 IRP 呼叫 IoCompleteRequest 的時間堆疊追蹤。 Windows 7 針對每個強制擱置的 IRP,至少有兩個記錄專案,可能超過兩個專案:
- 驅動程式驗證程式挑選要強制擱置的 IRP 時堆疊追蹤。 驅動程式驗證器會在其中一個驗證的驅動程式呼叫 IoCallDriver時,選擇一些要強制擱置的 IRP。
- 每個 IoCompleteRequest 呼叫的堆疊追蹤,在完成到達已驗證的驅動程式之前,強制擱置的 IRP 呼叫。 同一個 IRP 可以有多個 IoCompleteRequest 呼叫存在,因為其中一個驅動程式可以暫時停止完成常式,然後藉由呼叫 IoCompleteRequest 來 繼續它。
IRQL 轉換記錄檔中有更多有效的堆疊追蹤。 此記錄檔是使用 !verifier 8來顯示。 在 Windows 7 之前的 Windows 版本中,驅動程式驗證程式可能嘗試在提升許可權的 IRQL 記錄其中一些堆疊追蹤,而且因為高 IRQL 值而無法擷取堆疊追蹤。 在 Windows 7 中,驅動程式驗證器會嘗試擷取這些堆疊追蹤:
- 例如,在引發 IRQL 之前,當驗證的驅動程式呼叫 KeAcquireSpinLock時。
- 在 IRQL 降低之後,當驗證的驅動程式呼叫 KeReleaseSpinLock時。
如此一來,驅動程式驗證器就可以擷取更多 IRQL 轉換堆疊追蹤。
!analyze 可以分級增強型 I/O 驗證程式所公開的問題, (屬於 Windows 7) I/O 驗證程式的一部分。 在舊版 Windows 中,增強型 I/O 驗證器錯誤報表是由驅動程式驗證器所偵測到的驅動程式瑕疵描述所組成,後面接著中斷偵錯工具。 在這類中斷之後執行 !analyze 不會產生許多中斷的有意義分級,因為 !analyze 無法使用偵錯工具中出現的錯誤描述文字中的資訊。 在 Windows 7 中,驅動程式驗證器會將這些驅動程式瑕疵的有意義資訊儲存在記憶體中。 !analyze 可以找到這項資訊,並針對許多中斷執行更有意義的自動分級。
Windows Vista 中的驅動程式驗證程式 (已 更新:2009 年 2 月 9 日)
針對 Windows Vista,驅動程式驗證器已使用新的測試和功能來增強。
- 啟用驅動程式驗證器和變更設定而不重新開機
- 增強的低資源模擬
- 強制擱置 I/O 要求
- 安全檢查
- 更完整的 I/O 驗證
- 增強 IRQL 檢查
- 其他檢查
- 鎖定的記憶體頁面追蹤
- 其他自動檢查
Windows XP (中的驅動程式驗證程式 已更新:2001 年 12 月 4 日)
驅動程式驗證器是監視 Windows 核心模式驅動程式和圖形驅動程式的工具。 Microsoft 強烈建議硬體製造商使用驅動程式驗證器測試其驅動程式,以確保驅動程式不會進行不合法的函式呼叫或造成系統損毀。 驅動程式驗證器已增強 Microsoft Windows XP 的新測試和功能。
提交至 WHQL 以進行測試的驅動程式必須通過驅動程式驗證器。 Windows XP 中的新驅動程式驗證器功能包括:
- 驅動程式驗證器管理員,這是適用于 verifier.exe 的全新圖形化使用者介面 (GUI)
- 監視堆疊切換的新自動檢查
- DMA 驗證的新驅動程式驗證器選項 (也稱為 HAL 驗證) 、死結偵測和 SCSI 驗證
- 結合「層級 1」和「層級 2」測試的 I/O 驗證變更,選擇性增強 I/O 驗證測試
- 新的偵錯工具延伸模組 !deadlock and !dma
- 新的錯誤檢查:0xE6 (DRIVER_VERIFIER_DMA_VIOLATION) 和0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION)
- 現有錯誤檢查碼的其他子碼0xC4和0xC9
驅動程式驗證器功能也包括:
新的驗證器命令列選項 verifier.exe 公用程式有新的參數 VolatileDriverList,可與 /adddriver 關鍵字搭配使用,以指定要新增至 volatile 設定的驅動程式清單。 VolatileDriverList 可以搭配 /removedriver 關鍵字使用,以指定要移除的驅動程式清單。
新增 !verifier 擴充功能 新的 !verifier 延伸模組會在監視低資源或 IRQL 引發和微調鎖定時顯示其他記錄資訊。 您也可以使用線上說明。
- 使用 0x4設定的旗標會導致顯示包含驅動程式驗證器在低資源模擬期間插入的錯誤記錄
- 使用 0x8設定的旗標會導致顯示包含所驗證驅動程式所進行的最新 IRQL 變更記錄
- 如果 Flag 完全等於0x4或0x8,Quantity 參數會指定要包含在顯示中的記錄或記錄專案數目
- ?參數會顯示簡短的解說文字
驅動程式驗證程式管理員的線上說明驅動程式驗證程式管理員線上說明可以透過下列其中一種方式顯示:
- 選取並按住 (或) 以滑鼠右鍵按一下 [驅動程式驗證器管理員] 視窗中的專案,然後從快顯視窗中選擇 [ 內容? ]。
- 選取問號 (?) 視窗右上角,然後在 [驅動程式驗證器管理員] 視窗中選取專案。