USB Device Tree Viewer V4.1.1
 
Home

  English version of this page

[Download]
 
  Einführung
 
Der USB Device Tree Viewer, kurz UsbTreeView, basiert auf dem Microsoft USBView Beispielprojekt aus dem Windows Server 2003 Driver Development Kit. Dieses gibt es jetzt auf GitHub.
Da hier nur die Quelltexte enthalten sind und Microsoft das lange Zeit verfügbare UVCView auch nicht mehr anbietet, habe ich daraus ein eigenes Tool gemacht. Inzwischen gibts USBView wieder als EXE, und zwar als Teil der "Debugging Tools für Windows", siehe hier: USBView. Es ist aber immernoch nur ein Demo-Projekt für das Windows USB-API, auch nach 20 Jahren speichert es nicht mal die Fensterposition...

UsbTreeView begann mit dem USBView-Quelltext aus dem DDK für Server 2003. Hier die Verbesserungen:

  • UsbTreeView sammelt neben den USB-Informationen auch Daten aus dem Windows Geräte-Management und führt beide zusammen - so kann es auch Laufwerksbuchstaben und COM-Ports von USB-Geräten zeigen
  • Die Fensterposition wird gespeichert - dazu musste ich auch erst ermahnt werden, jahrelang wurde das Fenster einfach maximiert :-)
  • Hintergrundfarbe und Schriftart der Textansicht rechts können eingestellt werden (in den Screenshots wurde DOSLike 7 genutzt)
  • Auswahl im TreeView bleibt über Refresh hinaus erhalten
  • Zusätzliche Descriptoren werden dekodiert, u.a. UVC 1.1, Audio 2.0
  • Hexdump der Descriptoren kann angezeigt werden
  • Erweiterte USB-Infos unter Windows 8, 10 und 11 (aus der aktuellen USBView Beispielanwendung übernommen)
  • Erweiterte Informationen zu Host-Controllern und Root-Hubs
  • Fehlgeschlagene Abfragen werden im Hintergrund wiederholt, z.B. bei USB-Mäusen die während des Enumerierens bewegt wurden
  • Im TreeView handgemachte 16x16 icons (USBView nutzt 32x32 Icons und skaliert sie auf 15x15 runter)
  • Hardware sicher entfernen, Geräte-Neustart, Port-Reset
  • Zeigt offene Handles nach fehlgeschlagenem "sicheren Entfernen"
  • u.v.a.
Ab V3.0
  • Bei Anschließen und Entfernen von USB-Geräte keine erneute Enumeration aller USB-Geräte
  • Suchfunktion (kein Volltext, nur Sachen wie Geräte-ID, Volume-Name, COM-Port)
  • Neue Tastaturkürzel (Alt-D öffnet die Laufwerksliste, Alt+R die Liste der anderen Geräte, Alt+S das Such-Textfeld, Alt+Links/Rechts springt durch die Such-Treffer
  • Option, Knoten leerer Hubs oder Hubs an denen nur leere Hubs angeschlossen sind, nicht aufzuklappen
  • Option, zum Knoten neu angeschlossener und entfernter Geräte zu springen
  • Option, den Hub-Knoten neu angeschlossener Geräte aufzuklappen
  • Geräte können in der Baumansicht umbenannt werden (F2 oder Mausklick, benötigt Adminrechte)
  • Nutzt Windows-Design ("Theme") mit der Option zum Abschalten
Ab V3.2
  • Farbliche Hervorhebung von angeschlossenen und entfernten Geräten
Ab V3.3
  • Schreibt und liest XML-Report (nicht kompatibel mit USBview)
Ab V3.5
  • Kann einen vollständigen Screenshot der Baumansicht ins Windows Clipboard kopieren
Ab V3.6
  • Unterstützung für High-DPI-Anzeige - kein Bitmap-Scaling mehr unter Windows 8/10/11
Ab V3.7
  • Bessere Geräte-Namen in der Baumansicht (umschaltbar unter Options -> Device Names in Tree)
Ab V3.8
  • Kontext-Menü-Eintäge zun Start des Windows Registry-Editors mit zum Gerät gehörigen Schlüsseln
V4.0
  • Sub-Geräte der USB-Geräte werden im TreeView anzeigt (optional)
  • USB4 und Thunderbolt (nur Infos aus dem Geräte-Manager)
  • Anzeige von Laufwerks-Größen in der Baumansicht (optional)
  • Die bisherige UsbTreeView.txt ist jetzt über das Help-Menü verfügbar

 

  Screenshots
 
USB 1.1
Hier haben wir einen alten XP-Computer der nur einen einzelnen USB 1.1 Host-Controller hat. Wie jeder USB-Host-Controller hat er genau einen USB-Root-Hub, dieser hat zwei USB-Ports.
Am Port 1 ist ein USB-Massenspeichergerät angeschlossen, dessen Laufwerk ist auf Z: gemountet.
Obwohl es ein USB-Gerät 2.0 Gerät ist, läuft es mit "Full-Speed", weil es an einen USB 1.1 Hub angeschlossen ist.
 
usbtreeview_1.png

 

USB 2.0
Hier haben wir einen Windows 7 Computer mit Intel P35 Chipsatz dessen ICH7 über einen 8-Port USB 2.0 High-Speed Controller verfügt. Die 8 physischen Ports sind hier aufgeteilt: Die logischen Ports für Low- und Full-Speed-Geräte sind auf vier USB 1.1 Controller mit je zwei Ports verteilt während die acht logischen Ports für USB High-Speed-Geräte an einem "Enhanced" Controller hängen. Warum die USB-1.1-Ports bei allen Herstellern auf mehrere Controller verteilt werden, habe ich noch nicht ergründet.
Eine Möglichkeit abzufragen, welcher USB1-Port zu welchem USB2-Port gehört, gibt es wohl nicht.
USB 2.0 High-Speed-Controller haben typischerweise das Wort "Enhanced" im Gerätenamen. Ab Vista kann man die High-Speed-Unterstützung abfragen - UsbTreeView zeigt das in den "USB Hub Capabilities" im Flag "HighSpeed".
Am Port 1 des Enhanced-Controllers ist ein USB High-Speed Hub angeschlossen, an dessen Port 4 wiederum dasselbe USB-Massenspeichergerät wie oben, dank USBDLM wieder auf Z: gemountet.
Neuere Intel-Chipsätze haben keine USB1-Hostcontroller mehr, stattdessen hat der Chipsatz USB-Standard-Hubs integriert, die ggf. von Low- oder Full-Speed auf High-Speed wandeln. Intel nennt das "Integrated USB 2.0 Rate Matching Hub".
Die große Anzahl der Ports liegt zum einen am Doppelleben der Ports und zum anderen sind oft nicht alle vom Chipsatz untersützten Ports aus dem Computer herausgeführt.
 

usbtreeview_2.png

 

USB 3.0
Hier sind wir unter Windows 8 mit einem Texas Instrumens USB 3.0 Controller TUSB7340. Windows 8 hat eingebaute Unterstützung für USB 3.0 SuperSpeed und einen erweiteten USB-Stack. Dieser liefert u.a. jetzt für jeden USB-Port dessen unterstützte Geschwindigkeit, so dass UsbTreeView hier in den Port-Icons ein 'H' für High-Speed und ein 'S' für SuperSpeed zeigen kann, auch wenn noch kein Gerät angeschlossen ist. Was leider bis heute fehlt ist die Information über die maximal unterstützte SuperSpeed-Geschwindigkeit (5, 10 oder 20 GBits/s)

Der TUSB7340 ist für vier USB3-Anschlüsse ausgelegt, in jeder Buchse ist ein physischer USB2-Port (die vier Kontakte vorn) und ein USB3-SuperSpeed-Port (die fünf innen). Die ersten vier aufgelisteten Ports sind die USB2-Ports für Low-, Full- und High-Speed-Geträte während die hinteren vier für SuperSpeed-Geräte zuständig sind.
Im Screenshot sieht man, dass der ausgewählte Port 4 die "CompanionPortNumber" 8 hat. Das heißt dass die Ports 4 und 8 zusammengehören, sich also die Buchse teilen. Der Hersteller könnte das auch anders verdrahten, aber so ist der Plan. An so einer Buchse könnte man mit einem passenden Adapter auch ein USB1/2-Gerät und ein USB3-SuperSpeed-Gerät gleichzeitig betreiben.
USB-C Ports können auch zwei Companion-Ports haben (also eine Gruppe aus einem USB2- und zwei USB3-Ports): Statt je nach Orientierung des USB-C-Steckers die RX/TX-Leitungen umzuschalten sind die 2x5 USB3-Pins einfach an zwei separate USB3-Ports geführt. Spart ein paar Cent, siehe hier: https://richardg867.wordpress.com/2020/02/29/usb-c-done-cheap/
An einigen wenigen Computern, bei denen nur USB3-Ports herausgeführt sind, wurden die Ports so verdrahtet, dass die USB2-Kontakte einer USB3-Buchse nicht mit dem eigentlichen USB3-Controller verbunden sind sondern mit einem anderen, klassischen USB2-Controllers - so funktionieren Maus, Tastatur und USB2-Datenträger während der Installation von Betriebssystem ohne eingebaute Treiber für den neuen USB3-Controller.

 

usbtreeview_3.png

 

USB 3.0 Hub
USB3-Hubs bestehen aus zwei völlig unabhängigen Hubs, einem für USB3-SuperSpeed und einem für USB2-High-, Full- und Low-Speed.
Einzige Gemeinsamkeit ist, dass sie an "Companion-Ports" angeschlossen sind, also Ports die typischerweise im selben physischen Anschluss liegen.
Hier ist Port 20 der Companion-Port von Port 9 und umgekehrt, Port 9 ist in rot farblich hervorgehoben weil es der High-Speed-Port ist, wäre Port 9 ausgewählt wäre Port 20 in blau hervorgehoben, da ein SuperSpeed-Port:
 

usbtreeview_4.png
 
Die Ports des Hubs sind dann auch jeweils Companion-Ports.
Ein USB3-Gerät versucht zunächst eine stabile Verbindung zum USB3-Hub aufzubauen, wenn dass z.B. wegen eines zu langen oder schlechten Kabels fehlschlägt, wird die USB2-Highspeed-Verbindung versucht, was dann meist funktioniert weil die Anforderungen an Kabel und Kontakte hier deutlich geringer sind. Das Gerät erscheint dann am USB-2.1-Hub und meldet selbst eine USB-Version 2.1 oder 2.0.

 

Intel Series 8 xHCI Controller
Hier haben wir eine Reihe gelber Ausrufezeichen an einem Intel Series 8 xHCI controller auf einem Asus H81-Plus. Dessen Ports 11 bis 15 haben einen 'connection status' 3 "Device general failure" der zu den Ausrufezeichen im TreeView führt.
Das kommt offenbar daher, dass es höhere Portnummern als tatsächlich vorhandene Ports gibt. In Intels Datenblättern ist ein Register namens MAXPORTS dokumentiert:
"Number of Ports (MAXPORTS)
The value in this field reflects the highest numbered port in the controller, not the actual count of the number of ports. This allows for gaps in the port numbering, between USB2 and USB3 protocol capabilities.
"
Die Ports 11 bis 15 sind somit eine beabsichtigte Lücke in der Port-Nummerierung. Ab V3.8.5 zeigt UsbTreeView solche Ports (ab Windows 8) nicht mehr. Intels Treiber (die man bis Windows 7 braucht) melden an diesen Ports einfach 'Kein Gerät'.
 

UsbTreeView_iSeries8.png
 

 

Gerät antwortet nicht
Hier haben wir ein nicht antwortendes USB-Gerät: Der USB-Port hat ein angeschlossenes Gerät signalisiert, Windows versucht dessen Eingenschaften abzufragen, erhält aber keine Antwort. Somit sind weder Vendor- noch Produkt-ID bekannt, Windows vergibt dann als Geräte-ID USB\VID_0000&PID_0002\ plus Zufalls-Wert.
Entweder ist das Gerät defekt und antwortet nicht oder die Verbindung ist so schlecht, dass die Kommunikation fehlschlägt. Manchmal signalisieren USB-Ports auch ein angeschlossens Gerät obwohl nur ein langes Kabel ohne Gerät angeschlossen ist.
 

UsbTreeView_Code43.png
 

 

 


 
  BadUSB-Geräte erkennen
 
Einfache BadUSB-Geräte melden sich als USB-Verbundgeräte, so dass sie ihre normale Funktion behalten, nebenbei aber noch etwas Böses tun. Mit UsbTreeView kann man das prüfen:

Das BadUSB-Gerät aus der von Adam Caudill und Brandon Wilson bei github.com veröffentlichten Demo sieht so aus:

      ======================== USB Device ========================

        +++++++++++++++++ Device Information ++++++++++++++++++
Device Description       : USB-Verbundgerät
Device ID                : USB\VID_13FE&PID_5201\6&1A941099&0&2
Driver KeyName           : {36fc9e60-c465-11cf-8056-444553540000}\0021
Driver                   : C:\Windows\system32\DRIVERS\usbccgp.sys
Legacy BusType           : PNPBus
Class                    : USB
Service                  : usbccgp
Enumerator               : USB
Location Info            : Port_#0002.Hub_#0006
Manufacturer Info        : (Standard-USB-Hostcontroller)
Child Device 1           : Disk drive
 Device ID               : USB\VID_13FE&PID_5201&MI_00\7&17D1C3FF&0&0000
 Class                   : USB
Child Device 2           : USB-Eingabegerät
 Device ID               : USB\VID_13FE&PID_5201&MI_01\7&17D1C3FF&0&0001
 Class                   : HIDClass
Man beachte die zwei Child Devices, zum einen das erwartete Laufwerk, zum anderen die potentiell böse USB-Tastatur.

Ein normaler USB-Stick sieht so aus:

      ======================== USB Device ========================

        +++++++++++++++++ Device Information ++++++++++++++++++
Device Description       : SanDisk Cruzer Edge
Device ID                : USB\VID_0781&PID_556B\20043514800F42F2829F
Driver KeyName           : {36fc9e60-c465-11cf-8056-444553540000}\0023
Driver                   : C:\Windows\system32\DRIVERS\USBSTOR.SYS
Legacy BusType           : PNPBus
Class                    : USB
Service                  : USBSTOR
Enumerator               : USB
Location Info            : Port_#0002.Hub_#0006
Manufacturer Info        : Kompatibles USB-Speichergerät
Child Device 1           : Laufwerk
 Device ID               : USBSTOR\DISK&VEN_SANDISK&PROD_CRUZER_EDGE&REV_1.18\123
 Class                   : DiskDrive
  Volume                 : \\?\Volume{4d513cf0-6422-11e4-86f7-001b2157a355}\
  Kernel Name            : \Device\HarddiskVolume17
  Mountpoint             : Z:\
USBDLM kann beim Anschließen einer Tastatur oder eines Netzwerkadapters fragen, ob dieser aktiviert werden soll:
https://www.uwe-sieber.de/usbdlm_help.html#badusb

 

 
  Konditionen und Download
 

Download aktuelle Version:
x64:
https://www.uwe-sieber.de/files/UsbTreeView_x64.zip
(~390KB)
Win32:
https://www.uwe-sieber.de/files/UsbTreeView_Win32.zip
(~370KB)
Download V3.0.2 (die letzte ohne RichEdit Control):
https://www.uwe-sieber.de/files/usbtreeview302.zip
(~299KB)
Download V2.6.1 (die letzte 2.x):
https://www.uwe-sieber.de/files/usbtreeview261.zip
(~273KB)
Download alte V2.0.2:
https://www.uwe-sieber.de/files/usbtreeview202.zip
(126KB)
Download alte V1.5:
https://www.uwe-sieber.de/files/usbtreeview150.zip
(96KB)

Fast alle alten Versionen stehen nach dem Schema usbtreeviewNNN.zip zum Download.

UsbTreeView ist Freeware.

Erlaubt:
- Nutzung in jeder Umgebung, auch kommerziell
- Ausliefern zusammen mit anderen Software-Produkten, auch kommerziellen
- Veröffentlichen auf CD/DVD von Computer-Zeitschriften
- Mittels Packet-Manager verteilen

Nicht erlaubt:
- Verändern von Dateien
- zum Download mittels einer "Downloader-Software" anbieten

Um Spenden bitte ich nicht, aber wer unbedingt möchte:
PayPal


 

 

 
  Verwandte Tools
 

USB-Port neu starten per Kommandozeile:
Restart USB Port

USB-Geräte auf der Kommandozeile auflisten:
List USB Devices

Infos über COM-Ports:
COM Port Info

Infos über Laufwerke:
USB Drive Info

 

 



 

Uwe Sieber

Home: https://www.uwe-sieber.de/deutsch.html