共用方式為


使用UMDF驗證器

架構提供內建的驗證功能,可讓您用來測試執行中的使用者模式驅動程序架構 (UMDF) 驅動程式。 這項功能有時稱為 UMDF 驗證器,會廣泛驗證驅動程式的狀態,以及驅動程式傳遞至架構物件方法的自變數。 您可以單獨或搭配一般用途 的應用程式驗證器(AppVerif.exe) 工具使用 UMDF 驗證器。

UMDF 驗證器會檢查鎖定擷取和階層、驗證正確的 I/O 取消和佇列使用方式,並確保驅動程式和架構遵循記載的合約。

UMDF 驗證程式會導致 UMDF 驅動程式程式代碼失敗,以 錯誤檢查 主機進程。 不過,UMDF 錯誤檢查不會讓藍色文字畫面出現,並顯示錯誤的相關信息。 相反地,UMDF 錯誤檢查:

  • 建立記憶體轉儲檔案,並將檔案儲存到計算機的記錄檔目錄(例如%windir%\System32\LogFiles\WUDF\Xxx.dmp)。

    注意 從 UMDF 2.15 開始,記錄目錄為 %ProgramData%\Microsoft\WDF。

  • 建立Microsoft的錯誤報告(選擇加入)。

  • 如果連結至計算機,則會中斷調試程式。

  • 終止主機進程並停用裝置。

從UMDF 2.0開始,UMDF驗證程式在某些情況下會發出斷點,並導致其他UMDF錯誤檢查。 此行為類似於 KMDF 驗證器的行為。

強烈建議在WUDFHost.exe上啟用 應用程式驗證器(AppVerif.exe) 之後,執行驅動程式的所有開發和測試。 使用下列命令,附加調試程式,然後重新啟動。

AppVerif -enable Heaps Exceptions Handles Locks Memory TLS Leak -for WudfHost.exe

從 UMDF 2.0 版開始,如果您在驅動程式主機進程 (Wudfhost) 上執行 應用程式驗證器 ,系統會自動為該主機中的所有 UMDF 2.0 驅動程式以及未來驅動程式主機進程中的所有 UMDF 2.0 驅動程式啟用 UMDF 驗證器。

在UMDF 1.11和更早版本中,架構的驗證器一律開啟,而且您無法將其關閉。

啟用和停用 UMDF 驗證程式

您可以將 VerifierOn 設定為 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<driver name> 登录機碼的驅動程式 Parameters\Wdf 子機碼中的非零值,以手動啟用 UMDF 驗證器。

注意驗證器On 值的存在,即使設定為零,也會使用Application Verifier覆寫連結。 因此,如果您不強制值,建議您刪除該值,而不是將它設定為零。

若要判斷是否啟用 UMDF 驗證程式,請在驅動程式呼叫 WdfDriverCreate 並使用 !wdfdriverinfo 調試程序擴充功能命令之後,於某個位置設定斷點:

!wdfkd.wdfdriverinfo <drivername> **** 0x1

如需調試程式擴充功能命令的詳細資訊,請參閱 以 Framework 為基礎的驅動程式的調試程式擴充功能。

控制驗證器的行為

您可以藉由修改登錄中的值來控制 UMDF 驗證程序的行為。 或者,您可以使用 WDF 驗證器控制程式應用程式 來設定這些值。

下列登錄值可以搭配UMDF 1使用。x 驅動程式,以及 UMDF 2.0 和更新版本的驅動程式。

VerifyDownLevelREG_DWORD
如果 VerifyDownLevel 設定為非零值,而且驅動程式是以比目前版本還舊的架構版本所建置,則架構的驗證器會包含建置驅動程式之後新增的測試。 如果這個值不存在或設定為零,架構的驗證器只會包含驅動程式建置時存在的測試。

例如,如果您的驅動程式是以架構 1.7 版所建置,而且如果計算機上已安裝 1.9 版架構,請將 VerifyDownLevel 設定為非零,則驗證程式會在驅動程式執行時包含新增至驗證器 1.9 版的測試。

此值位於 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\DriverName 登录機碼的參數\Wdf 子機碼中。

TrackObjectsREG_DWORD
如果 TrackObjects 設定為非零值,架構會在卸除驅動程式時輸入調試程式,如果有任何架構型物件外洩(尚未刪除)。

在一般測試期間,您應該啟用 TrackObjects ,而不是 TrackRefCounts。 如果驗證程式報告驅動程式正在外泄架構物件,請使用控件應用程式來啟用 TrackRefCounts 驗證程式選項。

此值位於 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services 登錄機碼的 DefaultHostProcessGuid 子機碼中,其中 DefaultHostProcessGuid 是您可以在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF 子機碼中找到的值。

TrackRefCountsREG_DWORD
如果 TrackRefCounts 設定為非零值,架構會維護每個架構對象參考數目的計數。 您可以使用 !wudfrefhist 調試程式延伸模組來檢視對象的參考計數變更。

將 TrackRefCounts 設定為非零值會降低驅動程式的效能,因此除非您正在偵錯對象刪除 Bug,否則您應該將值保留為零。

此值位於 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services 登錄機碼的 DefaultHostProcessGuid 子機碼中,其中 DefaultHostProcessGuid 是您可以在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF 子機碼中找到的值。

除了上述登錄值之外,UMDF 2.0 和更新版本的驅動程式也可以使用使用 KMDF 驗證器中列出的許多登錄值。