判斷 UMDF 裝置的狀態
本主題描述如何使用偵錯工具延伸模組搭配 User-Mode Driver Framework (UMDF) 第 1 版或 2 版驅動程式,以判斷 UMDF 裝置所在的狀態。
針對 UMDF 第 1 版,您將使用在 wudfext.dll 中實作的擴充功能命令。 從 UMDF 第 2 版開始,您將使用在 wdfkd.dll 中實作的擴充功能命令。
若要判斷裝置狀態,請使用下列步驟:
使用下列其中一種偵錯工具類型,中斷驅動程式主機進程:
使用者模式偵錯工具:
找出裝置 (的適當驅動程式主機程式,也就是 WUDFHost.exe) 。 如果主機進程有多個實例,您可以使用作業系統提供的 Tasklist.exe 應用程式來判斷裝載驅動程式的程式。
從提升許可權的命令提示字元使用此命令。
tasklist -m <yourdriver.dll>
使用提高的許可權啟動偵錯工具,並附加至適當的進程。
使用 .reload 偵錯工具命令重載符號。
您可以使用 ~*k 偵錯工具命令來檢視所有線程。
核心模式偵錯工具:
找出裝置 (的適當驅動程式主機程式,也就是 WUDFHost.exe) 。 使用 !process 核心模式偵錯工具延伸模組,如下列範例所示,取得所有 WUDFHost.exe 實例的清單:
!process 0 0 WUDFHost.exe
後續步驟會使用來自 !process 0 0 輸出的進程位址和進程環境區塊 (PEB) 位址。
以下列其中一種方式附加至主機進程:
針對非入侵附加使用 .process 偵錯工具命令,如下列範例所示:
.process /p /r < process-addr>
當您無法繼續執行時,應該使用非入侵附加。 例如,當您在應用程式中收到中斷時,應該使用非入侵附加,而您想要查看驅動程式造成該中斷的情況,或當反映器準備終止主機進程時所執行的動作。
在入侵附加中使用 .process 偵錯工具命令,如下列範例所示:
.process /i < process-addr>
偵錯工具會要求您使用 g 偵錯工具命令繼續執行;在您執行 g 偵錯工具命令之後,偵錯工具將會中斷至使用中的進程。 使用 .reload 偵錯工具命令重載使用者符號,如下列範例所示:
.reload /user
如果主機進程有多個實例,您可以使用 !peb 一般偵錯工具延伸模組,如下列範例所示,以取得處理常式中載入的模組清單:
!peb < PEB-Address>
您必須附加至進程,此命令才能運作。 您可以依上一個步驟所示,以非入侵方式附加。
找出載入驅動程式 DLL 的程式。
使用 !process 核心模式偵錯工具延伸模組,如下列範例所示,以取得進程的相關資訊。 此資訊包括進程中執行的執行緒,以及這些執行緒的位址:
!process < process-addr>
使用 !thread 核心模式偵錯工具延伸模組,如下列範例所示,以取得每個執行緒的相關資訊:
!thread thread-addr <>
在偵錯工具中,使用 .chain 命令來查看是否已載入 wudfext.dll (UMDF 1) 或 wdfkd.dll (UMDF 2) 偵錯工具擴充程式庫。
如果您不需要程式庫,請使用 .load 命令將延伸模組 DLL 載入偵錯工具。 然後輸入 .reload 以重載符號資訊。
使用 !wudfext.umdevstacks (UMDF 1) 或 !wdfkd.wdfumdevstacks (UMDF 2) ,以查看裝載進程中載入的所有裝置堆疊。
然後使用 !wudfext.umdevstack (UMDF 1) 或 !wdfkd.wdfumdevstack (UMDF 2) 來取得裝置堆疊的詳細資訊。
使用!wudfext.wudfdevice (UMDF 1) 或!wdfkd.wdfdevice (UMDF 2) ,以取得裝置隨插即用 (PnP) 和電源管理狀態的相關資訊。
使用 !wudfext.wudfdriverinfo (UMDF 1) 或 !wdfkd.wdfdriverinfo (UMDF 2) 來顯示驅動程式的其他資訊,包括其裝置樹狀結構。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應