Verwenden des Netzwerkmonitortools
Das Netzwerküberwachungstool (NetMon.exe) ist eine archivierte Windows-basierte Anwendung, mit der Sie Ablaufverfolgungen von WPD-Komponenten anzeigen können. Ab Windows 8 wurde das Tool WpdMon.exe ersetzt.
Installieren und Konfigurieren von NetMon.exe
Führen Sie die folgenden Schritte aus, um das Netzwerkmonitor-Tool zu installieren und zu konfigurieren.
Laden Sie NetMon.exe herunter, und installieren Sie sie.
Laden Sie das Windows Driver Kit herunter, und installieren Sie es.
Installieren Sie die WPD-Parser auf Ihrem Entwicklungscomputer, indem Sie eine Instanz von Powershell.exe mit Administratorberechtigungen starten und die folgende Sequenz von Befehlen ausführen.
- PowerShell -ExecutionPolicy RemoteSigned
cd C:\Program Files (x86)\Windows Kits\10\Tools\10.0.22621.0\x86\Network Monitor Parsers\usb
- .. \NplAutoProfile.ps1
- CD.. \wpd
- .. \NplAutoProfile.ps1 Hinweis Die WPD-Parser sind im Windows Driver Kit enthalten.
Konfigurieren Sie die NetMon.exe Optionen mithilfe des Dialogfelds "Extras/Optionen":
- Wählen Sie auf der Registerkarte "Allgemein " die Schriftart "Schriftart mit fester Breite verwenden" im Feld "Rahmenzusammenfassung " aus.
- Wählen Sie auf der Registerkarte "Farbregeln" die Option "Öffnen" und dann ".
C:\Program Files (x86)\Windows Kits\10\Tools\10.0.22621.0\x86\Network Monitor Parsers\wpd\wpd.nmcr
Wählen Sie " Öffnen" gefolgt von "OK" aus .
Nachdem Sie diese Schritte ausgeführt haben, ist NetMon.exe bereit, WPD-Ablaufverfolgungsdateien zu untersuchen. Folgen Sie den Anweisungen im nächsten Abschnitt zum Sammeln von Ablaufverfolgungen, um mit dem Sammeln von Ablaufverfolgungen zu beginnen.
Sammeln von Ablaufverfolgungen
Zum Generieren von Ablaufverfolgungen müssen Sie ein Befehlsskript erstellen. Kopieren Sie Folgendes in eine Textdatei, und speichern Sie sie mit der Dateinamenerweiterung .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
Nachdem Sie die Befehlsdatei erstellt haben, führen Sie sie auf Ihrem Windows 8-Computer über eine Befehlssitzung mit erhöhten Rechten aus.
Wenn Sie den Inhalt der Beispielbefehlsdatei verwendet haben, werden Ihre Ablaufverfolgungen in der Datei wpd_trace.etl gespeichert.
Anzeigen von Ablaufverfolgungen
Um Ihre Ablaufverfolgungen anzuzeigen, starten Sie NetMon.exe, wählen Sie das Menü "Datei/Öffnen/Erfassen" aus, und öffnen Sie die oben gesammelte wpd_trace.etl-Datei. Wenn Sie eine Ablaufverfolgungsdatei öffnen, sehen Sie, dass NetMon.exe die Ablaufverfolgungen auf verschiedenen Ebenen anzeigt:
- WPDAPI – Zeigt Informationen auf WPD-API-Ebene mit WPD-Befehlen und Antworten an.
- WPDMTP – Zeigt Informationen auf MTP-Ebene mit MTP-Befehlen und Antworten an.
- Transport (WPDMTPUS oder WPDMTPIP oder WPDMTPBT) – Zeigt Pakete auf Transportebene an
Die folgende Abbildung zeigt eine WPDAPI-Anforderung auf API-Ebene. Die Anforderung durchgibt WPDMTP in Form von MTP-Anforderungen, die einen Transport erreichen und dann blasen.
- Die Protokollierung auf Transportebene protokolliert nicht die tatsächlichen Daten während der Datenphase. Untersuchen Sie die WPDMTP-Antwortnachricht für die Datasets, die während Befehlen wie GetDeviceInfo oder SendObjectPropList gesendet oder empfangen wurden.
- Wenn Sie im Fenster "Framezusammenfassung" eine WPDMTP-Antwortzeile auswählen, wird das entsprechende Element im Fenster "Framedetails" erweitert.
- Wählen Sie im Fenster "Framedetails" die "+"s" aus, um sie weiter zu erweitern und zu erkunden. Wenn ein MTP-Vorgang über eine Datenphase verfügt, steht das vom Gerät empfangene Dataset unter dem Feld "DataSetOfDataPhase " eines WPDMTP-Antwortelements zur Verfügung.
- Sie können auswählen, um die Elemente zu erweitern und zu sehen, dass im Fenster "Framedetails " WPD/MTP freundliche Nachrichten angezeigt werden. Die Konvention, die beim Schreiben der WPD-Parser folgt, besteht darin, dass Sie eine Zusammenfassung der Details auf Der Kopfzeilenebene anzeigen können. In einem GetServiceCapabilities-Aufruf wird beispielsweise das Feld "DataSetOfDataPhase " daneben angezeigt, die Anzahl der Formate in diesem Dataset.
- Sie können die Spalten "Quelle " und "Ziel " im Fenster "Framezusammenfassung " entfernen, um die Klarheit zu verbessern.
- Wenn Sie ein Feld im Fenster "Framedetails " auswählen, wird der entsprechende Wert im Fenster "Hex-Details " hervorgehoben.
Filtern mit NetMon.exe
Das Netzwerkmonitor-Tool bietet mehrere Filterfunktionen.
Um nur die MTP-Ablaufverfolgungen anzuzeigen, geben Sie "!wpdmtp" in das Fenster "Anzeigefilter" ein, und wählen Sie "Übernehmen" aus.
So filtern Sie nach Fällen, in denen der Treiber einen Fehler zurückgegeben hat:
- Geben Sie wpderror != 0 im Fenster "Anzeigefilter" ein, und wählen Sie "Übernehmen" aus.
Sie können nach allen Methodenaufrufen für ein bestimmtes Szenario filtern. Beispielsweise würde der folgende Filter alle Aufrufe von GetServiceProperties abrufen:
WPDMTP. CorrespondingCommand.MTPOpcode == 0x9304
Ebenso würde der folgende Filter dieselben Methodenaufrufe abrufen:
WPDMTP. CorrespondingCommand.MTPOpcode == MTP_OPCODE_GETSERVICEPROPERTIES