Udostępnij przez


Korzystanie z narzędzia Network Monitor

Narzędzie Network Monitor (NetMon.exe) to zarchiwizowana aplikacja oparta na systemie Windows, której można użyć do wyświetlania śladów ze składników WPD. Narzędzie Network Monitor zastąpiłoWpdMon.exe.

Instalowanie i konfigurowanie NetMon.exe

Aby zainstalować i skonfigurować narzędzie Network Monitor, wykonaj następujące kroki:

  1. Pobierz i zainstaluj NetMon.exe.

  2. Pobierz i zainstaluj zestaw sterowników systemu Windows (WDK).

  3. Zainstaluj analizatory WPD na komputerze deweloperskim, uruchamiając instancję Powershell.exe z uprawnieniami administratora i uruchamiając następującą sekwencję poleceń.

    1. PowerShell -ExecutionPolicy ZdalnyPodpisany

    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

      Analizatory WPD są zawarte w zestawie sterowników systemu Windows (WDK).

  4. Skonfiguruj opcje NetMon.exe przy użyciu okna dialogowego Narzędzia/opcje:

    1. Na karcie Ogólne wybierz pole Użyj czcionki o stałej szerokości w polu Podsumowanie ramki .
    2. Na karcie Reguły kolorów wybierz pozycję Otwórz , a następnie wybierz pozycję C:\Program Files (x86)\Windows Kits\10\Tools\10.0.22621.0\x86\Network Monitor Parsers\wpd\wpd.nmcr. Wybierz pozycję Otwórz, a następnie przycisk OK.

Po wykonaniu tych czynności, NetMon.exe jest gotowy do analizy plików śledzenia WPD. Postępuj zgodnie z instrukcjami w sekcji Zbieranie śladów .

Zbieranie śladów

Aby wygenerować ślady, utwórz skrypt polecenia. Skopiuj następujący kod do pliku tekstowego i zapisz go przy użyciu rozszerzenia nazwy pliku .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

Po utworzeniu pliku polecenia uruchom go z poziomu wiersza polecenia trybu administratora.

Jeśli użyto zawartości przykładowego pliku polecenia, ślady są przechowywane w pliku wpd_trace.etl.

Wyświetlanie śladów

Aby wyświetlić ślady, uruchom NetMon.exe, wybierz menu Plik/Otwórz/Przechwyć i otwórz zebrany plik wpd_trace.etl. Po otwarciu pliku śledzenia NetMon.exe wyświetla ślady w różnych warstwach:

  • WPDAPI — wyświetla informacje z poziomu interfejsu API WPD za pomocą poleceń i odpowiedzi WPD
  • WPDMTP — wyświetla informacje z poziomu protokołu MTP (Media Transfer Protocol) za pomocą poleceń i odpowiedzi MTP
  • Transport (WPDMTPUS lub WPDMTPIP lub WPDMTPBT) — pokazuje pakiety na poziomie transportu

Na poniższej ilustracji przedstawiono żądanie WPDAPI na poziomie interfejsu API. Żądanie przechodzi przez WPDMTP w postaci żądań MTP, które docierają do transportu, a następnie są przekazywane dalej w górę.

Zrzut ekranu przedstawiający okno

  • Rejestrowanie na poziomie transportu nie rejestruje rzeczywistych danych na etapie przesyłania danych. Sprawdź komunikat odpowiedzi WPDMTP dla zestawów danych, które zostały wysłane lub odebrane podczas poleceń, takich jak GetDeviceInfo lub SendObjectPropList.
  • W przypadku wybrania wiersza odpowiedzi WPDMTP w oknie Podsumowanie ramki odpowiedni element zostanie rozwinięty w oknie Szczegóły ramki .
  • Wybierz ikony "+" w oknie Szczegóły ramki, aby je dalej rozwinąć i zbadać. Jeśli operacja MTP ma dane okresowe, zestaw danych odebrany z urządzenia jest dostępny w polu DataSetOfDataPhase elementu odpowiedzi WPDMTP.

Zrzut ekranu przedstawiający okno

  • Możesz wybrać opcję rozwinięcia elementów i zobaczyć, że w oknie szczegóły ramki wyświetlane są przyjazne komunikaty WPD/MTP. Podczas pisania analizatorów WPD konwencja jest taka, że można wyświetlić podsumowanie szczegółów na poziomie nagłówka. Na przykład w wywołaniu GetServiceCapabilities pole DataSetOfDataPhase pokazuje obok niego liczbę formatów w tym zestawie danych.
  • Aby zwiększyć przejrzystość, możesz usunąć kolumny Źródło i Miejsce docelowe w oknie Podsumowanie ramki
  • Po wybraniu pola w oknie Szczegóły ramki odpowiednia wartość jest wyróżniona w oknie Szczegóły szesnastkowe.

Filtrowanie za pomocą NetMon.exe

Narzędzie Network Monitor udostępnia kilka funkcji filtrowania.

  • Aby wyświetlić tylko ślady MTP, wprowadź !wpdmtp w oknie Filtr wyświetlania i wybierz pozycję Zastosuj.

  • Aby odfiltrować przypadki, w których sterownik zwrócił błąd:

    • Wprowadź wpderror != 0 w oknie Filtr wyświetlania i wybierz pozycję Zastosuj.
  • Możesz filtrować wszystkie wywołania metody dla danego scenariusza. Na przykład następujący filtr pobiera wszystkie wywołania metody GetServiceProperties:

    WPDMTP. CorrespondingCommand.MTPOpcode == 0x9304

  • Podobnie, następujący filtr zwracałby takie same wywołania metod:

    WPDMTP.CorrespondingCommand.MTPOpcode == MTP_OPCODE_GETSERVICEPROPERTIES