このトピックでは、ユニバーサル シリアル バス (USB) のトレースとログ機能に関する情報をクライアント ドライバー開発者に提供します。 この情報は、USB デバイスを開発およびデバッグするユーザーの利益のために提供されます。 これには、ツールのインストール方法、トレース ファイルの作成方法、USB トレース ファイル内のイベントの分析方法に関する情報が含まれています。 このトピックでは、USB トレースとログ機能を正常に使用するために必要な USB エコシステムとハードウェアについて包括的に理解していることを前提としています。
イベント トレースを解釈するには、Windows の Windows USB ホスト側ドライバー、 公式の USB 仕様、および USB デバイス クラスの仕様も理解する必要があります。
Windows のイベント トレースについて
Event Tracing for Windows (ETW) は、オペレーティング システムによって提供される汎用の高速トレース機能です。 カーネルに実装されているバッファリングとログ記録のメカニズムを使用して、ユーザー モード アプリケーションとカーネル モード デバイス ドライバーの両方によって発生するイベントのトレース メカニズムを提供します。 さらに、ETW はログ記録を動的に有効または無効にする機能を提供します。これにより、再起動やアプリケーションの再起動を必要とせずに、運用環境で詳細なトレースを簡単に実行できます。 ログ記録メカニズムでは、非同期ライター スレッドによってディスクに書き込まれるプロセッサごとのバッファーが使用されます。 このバッファリングにより、大規模なサーバー アプリケーションは最小限の妨害でイベントを書き込みます。
ETW は Windows 2000 で導入されました。 それ以来、さまざまなコア オペレーティング システムおよびサーバー コンポーネントは、ETW を採用してアクティビティをインストルメント化してきました。 ETW は現在、Windows プラットフォーム上の主要なインストルメンテーション テクノロジの 1 つです。 インストルメンテーションに ETW を使用するサード パーティ製アプリケーションが増え、Windows が提供するイベントを利用するアプリケーションもあります。 ETW は Windows プリプロセッサ (WPP) ソフトウェア トレース テクノロジにも抽象化されています。このテクノロジでは、開発中のデバッグ用に printf スタイルのメッセージをトレースするための一連の使いやすいマクロが提供されます。
ETW は、Windows Vista および Windows 7 用に大幅にアップグレードされました。 最も重要な新機能の 1 つは、統合イベント プロバイダー モデルと API です。 つまり、新しい統合 API は、ログ トレースとイベント ビューアーへの書き込みを、イベント プロバイダー向けの 1 つの一貫性のある使いやすいメカニズムに結合します。 同時に、開発者とエンドユーザーのエクスペリエンスを向上させるために、いくつかの新機能が ETW に追加されました。
ETW と WPP の詳細については、「Event Tracing and Event Tracing for Windows (ETW)」を参照してください。
ETW ログの USB サポート
USB は、増え続けるさまざまな周辺機器を PC に接続する最も一般的な手段の 1 つです。 USB ホスト PC と USB 周辺機器の非常に大規模なインストール ベースがあり、システム ベンダー、デバイス ベンダー、エンド ユーザーは、USB デバイスがシステムおよびデバイス レベルで完璧に動作することを期待し、要求します。
USB デバイスの大規模なインストールベースと急増により、Windows USB ソフトウェア スタック、USB ホスト コントローラー、USB デバイスの間の互換性の問題が明らかになっています。 これらの互換性の問題により、デバイスの操作エラー、システムハング、システムクラッシュなどの問題が発生します。
システムやデバイスに直接アクセスしたり、場合によってはシステム クラッシュ ダンプを行ったりすることなく、USB デバイスの問題を調査およびデバッグすることは困難または不可能でした。 ハードウェアとクラッシュ ダンプへのフル アクセスでも、関連する情報を抽出することは、少数のコア USB ドライバー開発者のみが知っている時間のかかる手法でした。 ハードウェアまたはソフトウェア アナライザーを使用して USB の問題をデバッグできますが、非常にコストがかかり、ごく一部の専門家のみが利用できます。
USB ETW のサポート
ETW は、USB ドライバー スタックが USB 関連の問題の調査、診断、デバッグに役立つ可能性があるイベント ログメカニズムを提供します。 USB ドライバー スタック ETW イベント ログは、USB ドライバー スタック内の既存のアドホック ログ メカニズムによって提供されるほとんどのデバッグ機能またはすべてのデバッグ機能をサポートします。その制限はありません。 これにより、USB 関連の問題のデバッグが容易になります。これにより、長期的により堅牢な USB ドライバー スタックが提供されます。
USB ホスト コントローラー ドライバーと USB ハブ ドライバーに ETW ログ記録を追加しました。 USB ホスト コントローラー ドライバー層には、ホスト コントローラー ポート ドライバー (usbport.sys) とミニポート ドライバー (usbehci.sys、usbohci.sys、および usbuhci.sys) が含まれます。 USB ハブ ドライバーレイヤーは、USB ハブ ドライバー (usbhub.sys) で構成されます。
USB Hub イベント
USB イベント収集が有効になっている間、USB ハブ イベント プロバイダーは、USB ハブの追加と削除、すべてのハブのデバイス概要イベント、ポートの状態の変更を報告します。 これらのイベントを使用して、ほとんどのデバイス列挙エラーの根本原因を特定できます。
USB ポート イベント
USB イベント コレクションが有効になっている間、USB ポート イベント プロバイダーは、クライアント ドライバーからの I/O、デバイス エンドポイントの開閉、ミニポートの開始や停止などのミニポート状態遷移を報告します。 ログに記録された I/O には、物理 USB ポートの状態に対する要求が含まれます。 物理 USB ポートでの状態遷移は、コア USB ドライバー スタックのアクティビティの主要なイニシエーターの 1 つです。
Windows には、USB 3.0 デバイスをサポートする USB ドライバー スタックが用意されています。 Microsoft 提供の USB 3.0 ドライバー スタックは、Usbxhci.sys、Ucx01000.sys、および Usbhub3.sysの 3 つのドライバーで構成されています。 3 つのドライバーはすべて連携して、ほとんどの USB 3.0 ホスト コントローラーのネイティブ サポートを Windows に追加します。 新しいドライバー スタックは、SuperSpeed、高速、全速度、低速のデバイスをサポートします。 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 トレース | USB ETW イベント トレースは、Netmon とも呼ばれる Microsoft ネットワーク モニターを使用して表示できます。 Netmon はトレースを自動的に解析しません。 USB ETW パーサーが必要です。 USB ETW パーサーは、USB ETW イベント トレースの構造を記述するネットワーク モニター パーサー言語 (NPL) で記述されたテキスト ファイルです。 パーサーは、USB 固有の列とフィルターも定義します。 これらのパーサーにより、Netmon は USB ETW トレースを分析するための最適なツールになります。 |
USB ETW での Xperf の使用 | このトピックでは、Xperf と Netmon を使用して USB トレース データを分析する方法について説明します。 |
USB ETW と電源管理 | このトピックでは、ETW を使用して USB 選択的一時停止状態を調べ、Windows PowerCfg ユーティリティを使用してシステムのエネルギー効率の問題を特定する方法について簡単に説明します。 |