ネットワーク モニター ツールの使用

ネットワーク モニター ツール (NetMon.exe) は、WPD コンポーネントからのトレースを表示するために使用できるアーカイブされた Windows ベースのアプリケーションです。 ネットワーク モニター ツールが WpdMon.exe置き換えられました。

NetMon.exe のインストールと構成

ネットワーク モニター ツールをインストールして構成するには、次の手順を実行します。

  1. NetMon.exeをダウンロードしてインストール します 。

  2. Windows Driver Kit (WDK) をダウンロードしてインストールします。

  3. 管理者のアクセス許可を持つ Powershell.exe のインスタンスを起動し、次の一連のコマンドを実行して、開発マシンに WPD パーサーをインストールします。

    1. PowerShell -ExecutionPolicy リモート署名済み (RemoteSigned)

    2. cd C:\Program Files (x86)\Windows Kits\10\Tools\10.0.22621.0\x86\Network Monitor Parsers\usb

    3. ..\NplAutoProfile.ps1

    4. cd ..\wpd

    5. ..\NplAutoProfile.ps1

      WPD パーサーは、Windows Driver Kit (WDK) に含まれています。

  4. [ツール]/[オプション]ダイアログ を使用して、 NetMon.exe オプションを構成します。

    1. [ 全般 ] タブで、[ フレームの概要] ボックスで [固定幅フォントを使用 ] を選択します。
    2. [ カラー ルール ] タブで、[ 開く ] を選択し、[ C:\Program Files (x86)\Windows Kits\10\Tools\10.0.22621.0\x86\Network Monitor Parsers\wpd\wpd.nmcr] を選択します。 [ 開く] を選択し、[ OK] を選択します。

これらの手順を完了すると、 NetMon.exe WPD トレース ファイルを調べる準備が整います。 「トレースの収集」セクションの手順に従います。

トレースの収集

トレースを生成するには、コマンド スクリプトを作成します。 次のコードをテキスト ファイルにコピーし、.cmdファイル名拡張子を付けて保存します。

echo off
@REM ---------------------------------------------------------------------------------------
@REM UNCOMMENT THE LOGMAN COMMANDS FOR THE FOLLOWING PROVIDERS AS REQUIRED
@REM Microsoft-Windows-WPD-API                 To log API traffic
@REM Microsoft-Windows-WPD-MTPClassDriver      To log MTP command, response and datasets
@REM Microsoft-Windows-WPD-MTPUS               To log USB traffic at WpdMtpUS layer
@REM Microsoft-Windows-WPD-MTPIP               To log IP traffic at WpdMtpIP layer
@REM Microsoft-Windows-WPD-MTPBT               To log BT traffic at WpdMtpBt layer
@REM Microsoft-Windows-USB-USBPORT             To log USB core layer traffic
@REM Microsoft-Windows-USB-USBHUB              To log USB core layer traffic
@REM ---------------------------------------------------------------------------------------

@REM Start Logging

logman start  -ets WPD -p Microsoft-Windows-WPD-API            -bs 100 -nb 128 640 -o wpd_trace.etl
logman update -ets WPD -p Microsoft-Windows-WPD-MTPClassDriver -bs 100 -nb 128 640
logman update -ets WPD -p Microsoft-Windows-WPD-MTPUS          -bs 100 -nb 128 640
logman update -ets WPD -p Microsoft-Windows-WPD-MTPIP          -bs 100 -nb 128 640
logman update -ets WPD -p Microsoft-Windows-WPD-MTPBT          -bs 100 -nb 128 640
logman update -ets WPD -p Microsoft-Windows-USB-USBPORT        -bs 100 -nb 128 640
logman update -ets WPD -p Microsoft-Windows-USB-USBHUB         -bs 100 -nb 128 640
logman update -ets WPD -p Microsoft-Windows-Kernel-IoTrace 0 2
echo.
echo Please run your scenario now and
pause

@REM Stop logging
logman stop -ets WPD

コマンド ファイルを作成したら、管理者モードのコマンド プロンプトから実行します。

サンプル コマンド ファイルの内容を使用した場合、トレースはファイル wpd_trace.etl に格納されます。

トレースの表示

トレースを表示するには、 NetMon.exe起動し、[ ファイル]、[開く]、[キャプチャ ] メニューの順に選択し、収集した wpd_trace.etl ファイルを開きます。 トレースファイルを開くと、NetMon.exe がさまざまなレイヤーでトレースを表示します。

  • WPDAPI – WPD コマンドと応答を使用して WPD API レベルからの情報を表示します
  • WPDMTP – MTP コマンドと応答を使用して、メディア転送プロトコル (MTP) レベルからの情報を表示します
  • トランスポート (WPDMTPUS または WPDMTPIP または WPDMTPBT) – トランスポート レベルのパケットを示します

次の図は、API レベルでの WPDAPI 要求を示しています。 要求は、トランスポートに到達し、バブルアップする MTP 要求の形式で WPDMTP を経由します。

さまざまなトレース レイヤーの吹き出しが表示された [フレームの概要] ウィンドウを示すスクリーンショット。

  • トランスポート レベルのログ記録では、データ フェーズ中に実際のデータはログに記録されません。 GetDeviceInfo や SendObjectPropList などのコマンド中に送受信されたデータセットの WPDMTP 応答メッセージを調べます。
  • [フレームの概要] ウィンドウで WPDMTP 応答行を選択すると、[フレームの詳細] ウィンドウで対応する項目が展開されます。
  • [ フレームの詳細 ] ウィンドウで [+] を選択し、さらに展開して探索します。 MTP 操作にデータフェーズがある場合、デバイスから受信したデータセットは、WPDMTP 応答項目の DataSetOfDataPhase フィールドで使用できます。

トレースの表示中に [フレームの詳細] ウィンドウを示すスクリーンショット。

  • 項目を展開し、[ フレームの詳細 ] ウィンドウに WPD/MTP フレンドリ メッセージが表示されることを選択できます。 WPD パーサーを記述するときに従う規則は、ヘッダー レベルで詳細の概要を確認できることです。 たとえば、 GetServiceCapabilities 呼び出しでは、 DataSetOfDataPhase フィールドの横に、そのデータセット内の形式の数が表示されます。
  • [フレームの概要] ウィンドウで [ソース] 列と [変換先] 列を削除して、わかりやすくすることができます。
  • フレームの詳細 ウィンドウでフィールドを選択すると、16 進の詳細 ウィンドウで対応する値が強調表示されます。

NetMon.exe を使用したフィルター処理

ネットワーク モニター ツールには、いくつかのフィルター処理機能が用意されています。

  • MTP トレースのみを表示するには、[表示フィルター] ウィンドウに「!wpdmtp」と入力し、[適用] を選択します。

  • ドライバーがエラーを返した場合にフィルター処理するには:

    • 表示フィルター ウィンドウに「wpderror != 0」と入力し、[適用] を選択します。
  • 特定のシナリオのすべてのメソッド呼び出しをフィルター処理できます。 たとえば、次のフィルターは、GetServiceProperties へのすべての呼び出しを取得します。

    WPDMTP.CorrespondingCommand.MTPOpcode == 0x9304

  • 同様に、次のフィルターは同じメソッド呼び出しを取得します。

    WPDMTP.CorrespondingCommand.MTPOpcode == MTP_OPCODE_GETSERVICEPROPERTIES