如何啟用 UMDF 驅動程式的偵錯
您可以使用下列設定,在開發期間偵錯 User-Mode Driver Framework (UMDF) 驅動程式。 所有設定都包含兩部電腦、一部主機和一個目標。
- 手動將驅動程式複製到目標。 對目標執行使用者模式偵錯。 在此案例中,您會手動附加至目標上執行的驅動程式主機進程實例。
- 手動將驅動程式複製到目標,然後從主機執行核心模式偵錯。
我們建議使用附加核心偵錯工具來執行所有 UMDF 驅動程式測試和開發。
最佳做法
我們建議使用附加核心偵錯工具來執行所有 UMDF 驅動程式測試。
以下是建議的設定。 您可以手動設定這些設定,或使用 WDK 中的 WDF 驗證器控制項應用程式 (WDFVerifier.exe) 工具來檢視或變更這些設定。
在WUDFHost.exe上啟用應用程式驗證器:
AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
如果發生例外狀況,應用程式驗證器會將診斷訊息傳送至偵錯工具並中斷。
如果您使用核心模式偵錯會話,請設定 HostFailKdDebugBreak ,讓反映程式在終止驅動程式主機進程之前中斷為核心模式偵錯工具。 預設會從 Windows 8 開始啟用此設定。
將 UmdfHostProcessSharing 設定為 ProcessSharingDisabled來停用共用。 如需詳細資訊,請參閱 在 INF 檔案中指定 WDF 指示詞。
根據預設,當 UMDF 裝置失敗時,架構會嘗試重新開機最多五次。 您可以將 DebugModeFlags 設定為 0x01,以關閉自動重新開機。 如需詳細資訊,請參閱 偵錯 WDF 驅動程式的登錄值。
重新啟動電腦。
若要偵錯 UMDF 驅動程式問題,請檢閱 判斷反映器為何終止主機進程 和 偵錯 UMDF 驅動程式當機
使用 WinDbg 手動附加 (使用者模式偵錯)
在目的電腦上,您可以手動將 WinDbg 附加至裝載驅動程式的 WUDFHost 實例。 當您附加時,您會中斷偵錯工具,並在驅動程式中設定中斷點。
由於驅動程式初始化會在 WUDFHost 載入之後不久發生,因此無法及時手動附加以偵錯初始化程式碼。 相反地,您可以設定登錄值,讓主機進程在主機初始化或驅動程式載入時間等候一些秒數。 此延遲可讓您時間將 WinDbg 附加至 WUDFHost 進程的正確實例。
請遵循下列步驟:
- 在目的電腦上的登錄中,將 HostProcessDbgBreakOnStart 或 HostProcessDbgBreakOnDriverLoad 設定為一些秒數並重新啟動。
- 在目的電腦上,以系統管理員身分開啟 WinDbg。
- 在 [ 檔案] 功能表上,選擇 [ 附加至進程]。 選取 [依可執行檔],然後找出WUDFHost.exe (可能沒有任何) 命名的所有進程。 如果有名為 WUDFHost.exe 的任何進程,請記下其進程識別碼以供日後參考。
- 在 裝置管理員中,啟用驅動程式。
- 重複步驟 2,並找出WUDFHost.exe的新實例。 如果您沒有看到新的 WUDFHost.exe 實例,請按一下 [ 取消],然後選擇 [ 附加至進程 ]。 當您找到WUDFHost.exe的新實例時,請加以選取,然後按一下 [ 確定]。
如果 裝置共用 正在使用中,而且您設定 HostProcessDbgBreakOnDriverLoad 登錄值,您可能會因為其他驅動程式載入而中斷偵錯工具。 您可以使用 UMDF 偵錯模式來關閉裝置共用。
若要使用偵錯模式,請使用 Visual Studio 中的 F5 選項,或在登錄中設定 DebugModeFlags 和 DebugModeBinaries 值。
如需 UMDF 登錄值的詳細資訊,請參閱針對 WDF 驅動程式進行偵錯的登錄值, (KMDF 和 UMDF) 。
使用 WinDbg 從主機電腦遠端偵錯, (核心模式偵錯)
從遠端主機建立核心模式偵錯會話,然後將目前的進程設定為裝載驅動程式的 Wudfhost 實例。 如果您是從遠端核心偵錯工具進行偵錯,您可以將 HostProcessDbgBreakOnDriverStart 或 HostProcessDbgBreakOnDriverLoad 設定為0x80000000指定無逾時,但中斷至核心偵錯工具。
使用這些步驟:
停用共用。 開啟DebugModeFlags,並在DebugModeBinaries中列出您的驅動程式
如果您的驅動程式使用 UMDF 1.11 或更新版本, 則預設會啟用 HostFailKdDebugBreak 。 跳過此步驟。
如果您的驅動程式使用 UMDF 1.9 或更早版本,請將 HostFailKdDebugBreak 設定為 1。
如果您要偵錯與逾時相關的問題,請關閉 HostProcessDbgBreakOnDriverStart 和 HostProcessDbgBreakOnDriverLoad。 (當 HostProcessDbgBreakOnDriverStart 或 HostProcessDbgBreakOnDriverLoad 非零時,架構會停用逾時,讓反映程式不會在使用者模式偵錯工具附加至主機進程時終止主機。) 如果您需要偵錯驅動程式初始化程式碼,而不是使用這兩個值,請在驅動程式載入之前,嘗試在 WinDbg 中發出下列命令: sxe ld:MyDriver.dll 模組載入 (中斷)
如果您進行任何登錄變更,請重新開機。
根據您上述所做的選擇,您的遠端核心偵錯工具應該會在目標上載入或卸載驅動程式時中斷。