判斷 UMDF 裝置的狀態

本主題描述如何使用偵錯工具延伸模組搭配 User-Mode Driver Framework (UMDF) 第 1 版或 2 版驅動程式,以判斷 UMDF 裝置所在的狀態。

針對 UMDF 第 1 版,您將使用在 wudfext.dll 中實作的擴充功能命令。 從 UMDF 第 2 版開始,您將使用在 wdfkd.dll 中實作的擴充功能命令。

若要判斷裝置狀態,請使用下列步驟:

  1. 使用下列其中一種偵錯工具類型,中斷驅動程式主機進程:

    • 使用者模式偵錯工具:

      1. 找出裝置 (的適當驅動程式主機程式,也就是 WUDFHost.exe) 。 如果主機進程有多個實例,您可以使用作業系統提供的 Tasklist.exe 應用程式來判斷裝載驅動程式的程式。

        從提升許可權的命令提示字元使用此命令。

        tasklist -m <yourdriver.dll>

      2. 使用提高的許可權啟動偵錯工具,並附加至適當的進程。

      3. 使用 .reload 偵錯工具命令重載符號。

      4. 您可以使用 ~*k 偵錯工具命令來檢視所有線程。

    • 核心模式偵錯工具:

      1. 找出裝置 (的適當驅動程式主機程式,也就是 WUDFHost.exe) 。 使用 !process 核心模式偵錯工具延伸模組,如下列範例所示,取得所有 WUDFHost.exe 實例的清單:

        !process 0 0 WUDFHost.exe

        後續步驟會使用來自 !process 0 0 輸出的進程位址和進程環境區塊 (PEB) 位址。

      2. 以下列其中一種方式附加至主機進程:

        • 針對非入侵附加使用 .process 偵錯工具命令,如下列範例所示:

          .process /p /r < process-addr>

          當您無法繼續執行時,應該使用非入侵附加。 例如,當您在應用程式中收到中斷時,應該使用非入侵附加,而您想要查看驅動程式造成該中斷的情況,或當反映器準備終止主機進程時所執行的動作。

        • 在入侵附加中使用 .process 偵錯工具命令,如下列範例所示:

          .process /i < process-addr>

          偵錯工具會要求您使用 g 偵錯工具命令繼續執行;在您執行 g 偵錯工具命令之後,偵錯工具將會中斷至使用中的進程。 使用 .reload 偵錯工具命令重載使用者符號,如下列範例所示:

          .reload /user

      3. 如果主機進程有多個實例,您可以使用 !peb 一般偵錯工具延伸模組,如下列範例所示,以取得處理常式中載入的模組清單:

        !peb < PEB-Address>

        您必須附加至進程,此命令才能運作。 您可以依上一個步驟所示,以非入侵方式附加。

        找出載入驅動程式 DLL 的程式。

      4. 使用 !process 核心模式偵錯工具延伸模組,如下列範例所示,以取得進程的相關資訊。 此資訊包括進程中執行的執行緒,以及這些執行緒的位址:

        !process < process-addr>

      5. 使用 !thread 核心模式偵錯工具延伸模組,如下列範例所示,以取得每個執行緒的相關資訊:

        !thread thread-addr <>

  2. 在偵錯工具中,使用 .chain 命令來查看是否已載入 wudfext.dll (UMDF 1) 或 wdfkd.dll (UMDF 2) 偵錯工具擴充程式庫。

  3. 如果您不需要程式庫,請使用 .load 命令將延伸模組 DLL 載入偵錯工具。 然後輸入 .reload 以重載符號資訊。

  4. 使用 !wudfext.umdevstacks (UMDF 1) 或 !wdfkd.wdfumdevstacks (UMDF 2) ,以查看裝載進程中載入的所有裝置堆疊。

    然後使用 !wudfext.umdevstack (UMDF 1) 或 !wdfkd.wdfumdevstack (UMDF 2) 來取得裝置堆疊的詳細資訊。

  5. 使用!wudfext.wudfdevice (UMDF 1) 或!wdfkd.wdfdevice (UMDF 2) ,以取得裝置隨插即用 (PnP) 和電源管理狀態的相關資訊。

  6. 使用 !wudfext.wudfdriverinfo (UMDF 1) 或 !wdfkd.wdfdriverinfo (UMDF 2) 來顯示驅動程式的其他資訊,包括其裝置樹狀結構。