驅動程式驗證器
驅動程式驗證器會監視 Windows 核心模式驅動程式和圖形驅動程式,以偵測可能損毀系統的非法函式呼叫或動作。 驅動程式驗證器會讓 Windows 驅動程式進行各種壓力和測試,來找出不當行為。 您可以設定要執行的測試,這可讓您針對驅動程式進行繁重的壓力負載或更簡化的測試。 您也可以同時在多個驅動程式或一次在一個驅動程式上執行驅動程式驗證器。
警告
- 執行驅動程式驗證程式可能會導致計算機當機。
- 您應該只在您用於測試和偵錯的電腦上執行驅動程式驗證器。
- 您必須屬於電腦上的管理員群組,才能使用驅動程式驗證器。
我可以在哪裡下載驅動程序驗證器?
您不需要下載驅動程序驗證程式,因為它隨附於 %WinDir%\system32\ 中大部分版本的 Windows,Verifier.exe。 (驅動程式驗證器未隨附於 Windows 10 S,因此我們建議改為在 Windows 10 上測試驅動程式行為。驅動程式驗證器不會個別散發為下載套件。
如需適用於 Windows 10 和舊版 Windows 之驅動程式驗證器變更的相關信息,請參閱 驅動程式驗證器:新功能。
使用驅動程式驗證工具的時機
在整個驅動程式的開發與測試中執行驅動程式驗證器。 更具體來說,請使用驅動程序驗證器進行下列用途:
若要在開發週期早期找出問題,當問題更容易且成本較低時,就能更正。
針對測試失敗和計算機當機進行疑難解答和偵錯。
若要在部署驅動程式以使用 WDK、Visual Studio 和 Windows 硬體實驗室套件 (Windows HLK) 或 Windows 硬體認證套件 (適用於 Windows 8.1) 的測試時監視行為。 如需測試驅動程式的詳細資訊,請參閱 測試驅動程式。
重要
Windows 硬體相容性計劃需要 CodeQL,在我們的用戶端和伺服器作業系統上進行靜態工具標誌 (STL) 測試。 我們將繼續在舊版產品上維護 SDV 和 CA 的支援。 強烈建議合作夥伴檢閱靜態工具標誌測試的程式代碼QL需求。 如需使用 CodeQL 的詳細資訊,請參閱 CodeQL 和靜態工具標誌測試。
如何啟動驅動程式驗證器
您應該只在測試電腦或正在測試和偵錯的電腦上執行驅動程式驗證器。 若要從驅動程式驗證工具獲得最大好處,您應該使用核心調試程式並聯機到測試計算機。 如需偵錯工具的詳細資訊,請參閱 Windows 的偵錯工具(WinDbg、KD、CDB、NTSD)。
選取 [以系統管理員身分執行] 來啟動 [命令提示字元] 視窗,然後輸入驗證程式以開啟 [驅動程序驗證器管理員]。
選取 [建立標準設定 ] (預設工作),然後選取 [ 下一步]。
您也可以選擇 [ 建立自定義設定 ] 以從預先定義的設定中選取,或選取個別選項。 如需詳細資訊,請參閱 驅動程式驗證器選項和規則類別 和 選取驅動程式驗證器選項。
在 [ 選取要驗證的驅動程式] 下,選擇下表所述的其中一個選取配置。
選項 建議使用 自動選取未簽署的驅動程式 適用於在執行不需要已簽署驅動程式之 Windows 版本的電腦上進行測試。
自動選取針對舊版 Windows 建置的驅動程式 適用於測試驅動程式與較新版本 Windows 的相容性。
自動選取此電腦上安裝的所有驅動程式 根據系統上測試的驅動程式數目,提供最大涵蓋範圍。 此選項適用於驅動程式可以與其他裝置或系統上驅動程式互動的測試案例。
此選項也可以耗盡特殊集區和某些資源追蹤可用的資源。 測試所有驅動程式也會對系統效能造成負面影響。
從清單中選取驅動程式名稱 在大部分情況下,您會想要指定要測試的驅動程式。
選取裝置堆疊中的所有驅動程式可讓 增強的 I/O 驗證 選項追蹤物件並檢查合規性,因為堆疊中每個驅動程式之間都會傳遞 I/O 要求封包(IRP),如此可在偵測到錯誤時提供更高的詳細數據層級。
如果您要執行測量系統或驅動程式效能計量的測試案例,或您想要配置可用來偵測記憶體損毀或資源追蹤問題的最大資源數目(例如死結或 Mutex),請選取單一驅動程式。 特殊集區和 I/O 驗證選項一次在一個驅動程式上使用時會更有效率。
如果您選擇從清單中選取驅動程式名稱,請選取 [下一步],然後選取一或多個特定的驅動程式。
選取 [ 完成],然後重新啟動計算機。
注意
搭配 Windows 版本 20150 到 25126 使用驅動程式驗證器時,如果您已選取 ntoskrnl ,您可能會收到無效的狀態錯誤。
若要避免此問題,請取消選取 ntoskrnl ,或在組建 25126 之後升級至 Windows 版本。
在命令提示字元中執行驅動程序驗證程式
您也可以在命令提示字元視窗中執行驅動程式驗證器,而不啟動驅動程式驗證器管理員。 例如,若要在名為 myDriver.sys 的驅動程式上使用標準設定來執行 Driver Verifier,您可以使用下列命令:
verifier /standard /driver myDriver.sys
如需命令列選項的詳細資訊,請參閱 驅動程序驗證器命令語法。
如何控制驅動程式驗證器
您可以使用驅動程式驗證員管理員或命令行來控制驅動程式驗證器。 若要啟動驅動程式驗證器管理員,請參閱 本主題稍早的如何啟動驅動程序驗證器。
針對下列每個動作,您可以使用驅動程式驗證器管理員或輸入命令行。
停止或重設驅動程序驗證器
在 [驅動程序驗證器管理員] 中,選取 [ 刪除現有的設定],然後選取 [ 完成]。
或
在命令提示字元中,輸入下列命令:
verifier /reset
重新啟動電腦。
檢視驅動程式驗證器統計數據
在 [驅動程序驗證器管理員] 中,選取 [ 顯示目前已驗證驅動程序的相關信息],然後選取 [ 下一步]。 繼續選取 [下一步 ] 會顯示其他資訊。
或
在命令提示字元中,輸入下列命令:
verifier /query
若要檢視驅動程式驗證器設定
在 [驅動程序驗證器管理員] 中,選取 [ 顯示現有的設定],然後選取 [ 下一步]。
或
在命令提示字元中,輸入下列命令:
verifier /querysettings
如何偵錯驅動程序驗證器違規
若要從驅動程式驗證工具獲得最大好處,您應該使用核心調試程式,並將它聯機到測試計算機。 如需 Windows 偵錯工具的概觀,請參閱 Windows 的偵錯工具(WinDbg、KD、CDB、NTSD)。
如果 Driver Verifier 偵測到違規,就會產生錯誤檢查來停止電腦。 這是提供您進行問題偵錯的最可能資訊。 當您有核心調試程式連線到執行驅動程式驗證器的測試計算機,且驅動程式驗證器偵測到違規時,Windows 會中斷調試程式,並顯示錯誤的簡短描述。
驅動程式驗證程式偵測到的所有違規都會產生錯誤檢查。 這通常是錯誤檢查0xC4。 如需詳細資訊,請參閱偵錯錯誤檢查0xC4:DRIVER_VERIFIER_DETECTED_VIOLATION和錯誤檢查0xC4:DRIVER_VERIFIER_DETECTED_VIOLATION。
其他常見的錯誤檢查碼包括下列各項:
- 錯誤檢查0xC1:SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
- 錯誤檢查0xC6:DRIVER_CAUGHT_MODIFYING_FREED_POOL
- 錯誤檢查0xC9:DRIVER_VERIFIER_IOMANAGER_VIOLATION
- 錯誤檢查0xD6:DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION
- 錯誤檢查0xE6:DRIVER_VERIFIER_DMA_VIOLATION
如需詳細資訊,請參閱 在啟用驅動程式驗證程式時處理錯誤檢查。
當您啟動新的偵錯會話時,請使用調試程式擴充命令 !analyze。 在核心模式中 ,!analyze 命令會顯示最新錯誤檢查的相關信息。 若要顯示其他資訊,若要協助識別錯誤驅動程式,請在 kd> 提示字元中將 option -v 新增至 命令:
kd> !analyze -v
除了 !analyze 之外,您可以在 kd> 提示字元中輸入下列調試程式延伸模組,以檢視驅動程序驗證器特有的資訊:
!verifier 傾印擷取的驅動程序驗證器統計數據。 使用 !verifier -? 來顯示所有可用的選項。
kd> !verifier
!死結 會顯示與驅動程序驗證器死結偵測功能所追蹤之鎖定或對象相關的資訊。 使用 !deadlock -? 來顯示所有可用的選項。
kd> !deadlock
!iovirp [address] 會顯示與 I/O 驗證器所追蹤之 IRP 相關的資訊。 例如:
kd> !iovirp 947cef68
查閱違反的 DDI 合規性檢查 規則。 (RuleID 一律是錯誤檢查的第一個自變數。來自 DDI 合規性檢查的所有規則標識碼都以 nn 格式0x200。