Windows 用 USB イベント トレーシングの概要

このトピックでは、ユニバーサルシリアルバス (USB) のトレース機能とログ機能について、クライアントドライバー開発者向けの情報を提供します。 この情報は、USB デバイスの開発とデバッグを行うユーザーの利点を得るために提供されています。 ここでは、ツールをインストールする方法、トレースファイルを作成する方法、およびイベントを USB トレースファイルで分析する方法について説明します。 このトピックでは、usb のトレース機能とログ機能を正常に使用するために必要な USB エコシステムとハードウェアについて、包括的に理解していることを前提としています。

イベントトレースを解釈するには、 windows の Windows USB ホスト側ドライバー公式の usb 仕様、および usb デバイスクラスの仕様も理解している必要があります。

Windows イベントトレーシングについて

Windows イベントトレーシング (ETW) は、オペレーティングシステムによって提供される汎用的な高速トレース機能です。 また、カーネルに実装されているバッファリングとログメカニズムを使用して、ユーザーモードアプリケーションとカーネルモードデバイスドライバーの両方によって発生するイベントのトレースメカニズムを提供します。 また、ETW は、ログを動的に有効または無効にする機能を提供します。これにより、再起動やアプリケーションの再起動を必要とせずに、運用環境での詳細なトレースを簡単に実行できます。 ログ記録メカニズムでは、非同期ライタースレッドによってディスクに書き込まれたプロセッサごとのバッファーを使用します。 このバッファリングにより、大規模なサーバーアプリケーションは、最小限の処理でイベントを書き込むことができます。

ETW は Windows 2000 で導入されました。 そのため、さまざまなコアオペレーティングシステムおよびサーバーコンポーネントが、アクティビティをインストルメント化するために ETW を採用しています。 ETW は、Windows プラットフォームの主要なインストルメンテーションテクノロジの1つになりました。 多くのサードパーティアプリケーションでは、インストルメンテーションに ETW を使用しており、Windows が提供するイベントを利用しています。 また、ETW は Windows プリプロセッサ (WPP) ソフトウェアトレーステクノロジに抽象化されています。これは、開発時にデバッグするための printf形式のメッセージをトレースするための使いやすいマクロのセットを提供します。

ETW は、Windows Vista および Windows 7 で大幅にアップグレードされました。 最も重要な新機能の1つは、統合されたイベントプロバイダーモデルと Api です。 つまり、新しい統合 Api は、ログトレースとイベントビューアーへの書き込みを、イベントプロバイダーに対して一貫した使いやすいメカニズムに結合します。 同時に、開発者とエンドユーザーのエクスペリエンスを向上させるために、ETW にいくつかの新機能が追加されています。

ETW と WPP の詳細については、「イベントトレーシングと Windows イベントトレーシング (etw)」を参照してください。

ETW ログの USB サポート

USB は、増え続けるさまざまな周辺機器を Pc に接続するための最も一般的な手段の1つです。 Usb ホスト Pc と USB 周辺機器には、非常に大規模にインストールされたベースがあります。また、システムベンダー、デバイスベンダー、エンドユーザーは、USB デバイスがシステムおよびデバイスのレベルで機能していることを期待していることを前提としています。

インストールされている大規模な USB デバイスの増加により、Windows USB ソフトウェアスタック、USB ホストコントローラー、および USB デバイス間の互換性の問題が明らかになります。 これらの互換性の問題により、デバイスの操作エラー、システムのハング、システムのクラッシュなどの問題が発生します。

システム、デバイス、またはシステムクラッシュダンプに直接アクセスせずに、USB デバイスの問題を調査してデバッグすることは困難または不可能です。 ハードウェアおよびクラッシュダンプにフルアクセスする場合でも、関連情報の抽出は、ごく重要な USB ドライバー開発者だけが知っている時間のかかる手法でした。 ハードウェアまたはソフトウェアアナライザーを使用して USB の問題をデバッグすることはできますが、非常にコストが高く、ごく一部の専門家だけが使用できます。

Windows 7 での USB ETW のサポート

Windows 7 では、ETW は、usb ドライバースタックが、USB 関連の問題の調査、診断、およびデバッグを支援するために利用できるイベントログメカニズムを備えています。 USB ドライバースタックの ETW イベントのログは、制限なしで USB ドライバースタックの既存のアドホックログ記録メカニズムによって提供される、ほとんどまたはすべてのデバッグ機能をサポートしています。 これにより、USB 関連の問題のデバッグが容易になり、長期的にはより堅牢な USB ドライバースタックが提供されます。

Windows 7 の USB ホストコントローラードライバーおよび USB ハブドライバーに ETW ログ記録を追加しました。 USB ホストコントローラーのドライバーレイヤーには、ホストコントローラーポートドライバー (usbport.sys) とミニポートドライバー (usbehci.sys、usbohci.sys、および usbuhci.sys) が含まれています。 USB ハブドライバーレイヤーは、USB ハブドライバー (usbhub.sys) で構成されています。 USB ドライバーの ETW イベントプロバイダーは、Windows 7 のすべてのエディションおよび Sku に含まれています。

  • USB ハブのイベント

    Usb イベント収集が有効になっている間、usb ハブイベントプロバイダーは、USB ハブの追加と削除、すべてのハブのデバイス概要イベント、およびポートの状態の変更を報告します。 これらのイベントを使用して、ほとんどのデバイス列挙エラーの根本原因を特定できます。

  • USB ポートイベント

    USB イベント収集が有効になっている間、USB ポートイベントプロバイダーは、クライアントドライバーから i/o を報告し、デバイスエンドポイントを開いて閉じると、ミニポートの開始や停止などのミニポートの状態遷移を報告します。 ログに記録される i/o には、物理 USB ポートの状態に対する要求が含まれます。 物理 USB ポートの状態遷移は、コア USB ドライバースタックのアクティビティの主要なイニシエーターの1つです。

Windows 8 での USB ETW のサポート

Windows 8 には、usb 3.0 デバイスをサポートする USB ドライバースタックが用意されています。 Microsoft 提供の USB 3.0 ドライバースタックは、Usbxhci.sys、Ucx01000.sys、Usbhub3.sys の3つのドライバーで構成されています。 3つのすべてのドライバーが連携して、ほとんどの USB 3.0 ホストコントローラーのネイティブサポートを Windows に追加します。 新しいドライバースタックは、SuperSpeed、高速、高速、および低速度のデバイスをサポートしています。 USB 2.0 ドライバースタックは、Windows 8 でサポートされています。 USB 3.0 ドライバースタックでは、イベントトレースによって、ホストコントローラーとそれに接続されているすべてのデバイスの詳細なアクティビティが表示されます。

  • USB Hub3 イベント

    Usb イベント収集が有効になっている間、usb Hub3 イベントプロバイダーは、usb ハブの追加と削除、すべてのハブのデバイス概要イベント、ポートの状態の変更、および USB デバイスとハブの電源状態を報告します。 ポートの状態の変更は、物理 USB ポートでの状態遷移であり、コア USB ドライバースタックのアクティビティの主要なイニシエーターの1つです。 Hub3 は列挙プロセスのステージを報告します。これは、最も多くのデバイス列挙エラーを示す根本原因を指します。 StateMachineキーワードが有効になっていると、Hub3 は、ソフトウェアデバイス、ハブ、およびポートオブジェクトの内部ステートマシンアクティビティを報告します。これにより、ドライバーのロジックをより詳しく把握できます。

  • USB UCX イベント

    USB イベント収集が有効になっている間、USB UCX イベントプロバイダーは、クライアントドライバーから i/o を報告し、デバイスエンドポイントとエンドポイントストリームを開いたり閉じたりします。 StateMachineキーワードが有効になっていると、ucx は、ホストコントローラーとエンドポイントオブジェクトの内部ステートマシンアクティビティを報告します。これにより、ドライバーのロジックをより詳しく把握できます。

  • USB xHCI イベント

    USB イベント収集が有効になっている間、USB xHCI イベントプロバイダーは、システムの xHCI コントローラーのプロパティと xHCI 操作の低レベルの詳細を報告します。 xHCI は、xHCI ハードウェアによって送信され、完了したコマンド要求を報告します。これには、xHCI 固有の完了コードも含まれます。

このセクションの内容

トピック 説明
Logman を使用して USB イベント トレースをキャプチャする方法 このトピックでは、 Logman ツールを使用した USB ETW イベントトレースのキャプチャについて説明します。 Logman は、Windows に組み込まれているトレースツールです。 Logman を使用して、イベントをイベントトレースログファイルに取り込むことができます。
USB ETW トレースでのアクティビティ ID GUID の使用 このトピックでは、アクティビティ ID Guid に関する情報を提供し、これらの Guid をイベントトレースプロバイダーに追加する方法、およびそれらを Netmon で表示する方法について説明します。
Netmon での USB ETW トレース Microsoft ネットワークモニター (Netmon とも呼ばれます) を使用して、USB ETW イベントのトレースを表示できます。 Netmon はトレースを自動的に解析しません。 USB ETW パーサーが必要です。 USB ETW パーサーは、ネットワークモニターパーサー言語 (NPL) で記述されたテキストファイルであり、USB ETW イベントトレースの構造を記述します。 パーサーは、USB 固有の列およびフィルターも定義します。 これらのパーサーによって、Netmon が USB ETW トレースを分析するための最適なツールになります。
USB ETW での Xperf の使用 このトピックでは、Xperf と Netmon を使用して、USB トレースデータを分析する方法について説明します。
USB ETW と電源管理 このトピックでは、Windows PowerCfg ユーティリティを使用して、ETW を使用して USB の選択的中断状態を調べ、システムのエネルギー効率に関する問題を特定するための簡単な概要を示します。

USB ETW の使用
Windows USB イベント トレーシング