使用 ETW 事件對 USB 裝置問題進行偵錯

本主題提供使用 ETW 事件偵錯 USB 裝置問題的秘訣。

診斷裝置列舉失敗

您可以使用與 USB 中樞列舉工作相關聯的 ETW 事件,來判斷大部分裝置列舉失敗的根本原因。

在與 USB 中樞列舉工作相關聯的追蹤記錄檔中檢視事件

  1. 開啟 Netmon 並找出列舉事件,例如「埠的開始列舉」。 按兩下 [ 框架摘要 ] 窗格中的事件。

  2. 檢查事件的 [ 工作 ] 字段,確認此事件的工作是USB中樞列舉:

    1. 在 [ 框架詳細數據] 窗格中,展開 [ Net 事件]、[ 標頭]、[ 描述項],然後找出 [ 工作 ] 字段。
    2. 確認 [任務] 字段包含 [USB 中樞] 列舉值 2 () 。
  3. 篩選事件,只顯示具有工作值 2 的中樞驅動程式:

    1. 以滑鼠右鍵按兩下 [ 任務] 字段。

    2. 選取 [新增選取的值 ] 以顯示 篩選

    3. 以滑鼠右鍵按兩下 [ 框架摘要 ] 窗格中的事件,然後選取 [ 新增「通訊協定名稱」以顯示 篩選

    4. 在 [ 顯示篩選] 窗格中,將 “OR” 變更為 “AND”。 下列範例顯示產生的篩選:

      NetEvent.Header.Descriptor.Task == 0x2 AND ProtocolName == "USBHub_MicrosoftWindowsUSBUSBHUB"
      

      如需在 Netmon 中使用篩選的詳細資訊,請參閱 案例研究:使用 ETW 和 Netmon 針對未知的 USB 裝置進行疑難解答

診斷裝置啟動失敗

如果裝置無法在中樞驅動程式處理裝置的啟動 I/O 要求封包期間啟動, (IRP) ,您可以使用與 USB 裝置啟動工作相關聯的 ETW 事件來針對失敗進行疑難解答。 在 Netmon 中,找出裝置啟動事件,例如「USB 裝置啟動 IRP 分派」。 您可以篩選事件,只顯示來自中樞驅動程式的工作值為 21 (USB 裝置啟動) 。 如需建立這類篩選的詳細資訊,請參閱本主題中的。

分析裝置插入計時

您可以藉由查看列舉事件的時間戳,判斷在裝置插入期間在中樞驅動程式中花費的時間。

列舉計時

中樞驅動程式用來列舉裝置的裝置插入時間部分是下列兩個事件之間經過的時間:

  • 埠的開始列舉
  • 埠已完成的列舉

分析列舉工作

當 USB 中樞驅動程式列舉裝置時,它會以下列順序記錄下列事件:

  • 埠的開始列舉
  • 列舉Debounce已完成
  • 為列舉建立的 PDO
  • 第一個列舉埠重設完成
  • 列舉 - CreateDevice Complete
  • 第二個列舉埠重設完成
  • 列舉 - InitializeDevice Complete
  • 列舉 - SetupDevice Complete
  • 埠已完成的列舉

若要判斷每個列舉工作中樞驅動程式耗用的時間,請計算上述事件之間經過的時間。 IoInvalidateDeviceRelations 與 IRP_MN_QUERY_DEVICE_RELATIONS 之間的經過時間

若要判斷系統等候查詢裝置關聯 IRP 時所耗用的裝置插入時間部分,請測量下列兩個事件之間的經過時間:

  • 埠已完成的列舉
  • USB 中樞查詢裝置關聯 (BusRelations) IRP 分派

完成IRP_MN_QUERY_DEVICE_RELATIONS與IRP_MN_START_DEVICE之間的經過時間

若要判斷將新的實體裝置物件 (PDO) 回報給 隨插即用 管理員和收到開始 IRP 之間的裝置插入時間部分,請測量下列兩個事件之間的經過時間:

  • USB 中樞查詢裝置關聯 IRP 已完成
  • USB 裝置啟動 IRP 已分派

啟動 IRP 計時

若要判斷處理啟動 IRP 中樞驅動程式所花費的時間,請測量下列兩個事件之間的經過時間:

  • USB 裝置啟動 IRP 已分派
  • USB 裝置啟動 IRP 已完成

Software-Initiated 裝置繼續計時

裝置的函式驅動程式可以傳送 D0 裝置電源要求,以從暫停狀態繼續裝置。 若要判斷裝置從暫停繼續並準備好傳輸要求所需的時間量,請測量下列兩個事件之間的經過時間:

  • USB 裝置集 D0 裝置電源 IRP 分派
  • USB 裝置集 D0 裝置電源 IRP 已完成

Hardware-Initiated 裝置繼續計時

總線上的繼續訊號會導致裝置從暫停狀態繼續。 若要判斷裝置繼續進入已準備好傳輸要求的狀態所需的時間量,請測量下列兩個事件之間的經過時間:

  • 父中樞未暫停:
    • USB 裝置等候喚醒 IRP 已完成
    • USB 裝置集 D0 裝置電源 IRP 已完成
  • 父中樞已暫停:
    • 針對裝置與主控制器之間的任何中樞,從選擇性暫停開始 (這些事件的第一個)
    • USB 裝置集 D0 裝置電源 IRP 已完成

HUB RESUME FROM 選擇性暫停時間

您可以測量下列兩個事件之間的經過時間,判斷中樞從選擇性暫停繼續所需的時間量:

  • 從選擇性暫停開始繼續中樞
  • 中樞已完成的繼續

注意

中樞繼續計時取決於中樞下方所有裝置的繼續計時,以及可能位於正在繼續中樞上方的部分或所有中樞。