共用方式為


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

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

鑑別裝置列舉失敗

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

要查看與 USB 集線器列舉任務相關的追蹤記錄中的事件

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

  2. 藉由檢查事件的「任務」欄位,確認該事件的任務是否為 USB 集線器枚舉。

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

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

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

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

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

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

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

診斷裝置啟動失敗

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

設備插入時序分析

您可以藉由檢視列舉事件的時間戳,確定在裝置插入時中樞驅動程式所花費的時間。

列舉計時

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

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

剖析與列舉任務

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

  • 啟動埠運算
  • 列舉消抖已完成
  • 為列舉目的而建立的 PDO
  • 第一個列舉埠重設完成
  • 列舉 - CreateDevice Complete
  • 第二個列舉埠重設完成
  • 列舉:InitializeDevice Complete
  • 列舉 - SetupDevice 完成
  • 端口列舉已完成

若要判斷中樞驅動程式針對每個列舉工作所耗用的時間,請計算上述事件之間經過的時間。 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 已完成

從選擇性暫停時間恢復集線器

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

  • 從選擇性暫停中重新啟動集線器
  • 樞紐報告已完成

備註

中樞的恢復計時取決於其下方所有裝置的恢復計時,並且可能還取決於某些或所有位於該中樞上方的其他中樞的恢復計時。