如何啟用 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 進程的正確實例。

請遵循下列步驟:

  1. 在目的電腦上的登錄中,將 HostProcessDbgBreakOnStartHostProcessDbgBreakOnDriverLoad 設定為一些秒數並重新啟動。
  2. 在目的電腦上,以系統管理員身分開啟 WinDbg。
  3. 在 [ 檔案] 功能表上,選擇 [ 附加至進程]。 選取 [依可執行檔],然後找出WUDFHost.exe (可能沒有任何) 命名的所有進程。 如果有名為 WUDFHost.exe 的任何進程,請記下其進程識別碼以供日後參考。
  4. 在 裝置管理員中,啟用驅動程式。
  5. 重複步驟 2,並找出WUDFHost.exe的新實例。 如果您沒有看到新的 WUDFHost.exe 實例,請按一下 [ 取消],然後選擇 [ 附加至進程 ]。 當您找到WUDFHost.exe的新實例時,請加以選取,然後按一下 [ 確定]。

如果 裝置共用 正在使用中,而且您設定 HostProcessDbgBreakOnDriverLoad 登錄值,您可能會因為其他驅動程式載入而中斷偵錯工具。 您可以使用 UMDF 偵錯模式來關閉裝置共用。

若要使用偵錯模式,請使用 Visual Studio 中的 F5 選項,或在登錄中設定 DebugModeFlagsDebugModeBinaries 值。

如需 UMDF 登錄值的詳細資訊,請參閱針對 WDF 驅動程式進行偵錯的登錄值, (KMDF 和 UMDF)

使用 WinDbg 從主機電腦遠端偵錯, (核心模式偵錯)

從遠端主機建立核心模式偵錯會話,然後將目前的進程設定為裝載驅動程式的 Wudfhost 實例。 如果您是從遠端核心偵錯工具進行偵錯,您可以將 HostProcessDbgBreakOnDriverStartHostProcessDbgBreakOnDriverLoad 設定為0x80000000指定無逾時,但中斷至核心偵錯工具。

使用這些步驟:

  1. 停用共用。 開啟DebugModeFlags,並在DebugModeBinaries中列出您的驅動程式

  2. 如果您的驅動程式使用 UMDF 1.11 或更新版本, 則預設會啟用 HostFailKdDebugBreak 。 跳過此步驟。

    如果您的驅動程式使用 UMDF 1.9 或更早版本,請將 HostFailKdDebugBreak 設定為 1。

  3. 如果您要偵錯與逾時相關的問題,請關閉 HostProcessDbgBreakOnDriverStartHostProcessDbgBreakOnDriverLoad。 (當 HostProcessDbgBreakOnDriverStartHostProcessDbgBreakOnDriverLoad 非零時,架構會停用逾時,讓反映程式不會在使用者模式偵錯工具附加至主機進程時終止主機。) 如果您需要偵錯驅動程式初始化程式碼,而不是使用這兩個值,請在驅動程式載入之前,嘗試在 WinDbg 中發出下列命令: sxe ld:MyDriver.dll 模組載入 (中斷)

  4. 如果您進行任何登錄變更,請重新開機。

  5. 根據您上述所做的選擇,您的遠端核心偵錯工具應該會在目標上載入或卸載驅動程式時中斷。