|
Descripton |
The USB Device Tree Viewer, short UsbTreeView is based upon the Microsoft "USBView" sample application found in the Windows Driver Development Kits and now standalone at GitHub.
But it is source code only, there is no executable for end users provided. Meanwhile USBView comes as executables as part of the "Debugging Tools für Windows", see here: USBView. But still it is still more or less merely a demo application for the Windows USB API, after 20 years it still doesn't even save the window position...
UsbTreeView started with the USBView source code from the DDK for Server 2003. Here are the improvements I've done:
- Window position is saved, yea
- Informations from the Windows Device Management are collected and matched with the found USB devices; Therefore UsbTreeView can show the child devices, including drive letters and COM-ports
- Background color and font of the right pane can be set (the font shown in the screenshots is DOSLike 7)
- Keeps the tree item selection over refresh
- Shows open handles on failed safe removal
- Way more descriptors are decoded, as Audio 2.0
- Hexdump of the descriptors can be shown
- Safe removal, device restart and port restart
- Extended USB information available under Windows 8, 10 and 11 (taken from the latest USBView sample application)
- Extended information about host controllers
- Failed USB requests are re-tried in the background, e.g. if a USB mouse was moved while requesting its properties
- Toolbar with jump-lists for easily finding devices in complex trees
- Tree-view with handmade 16x16 icons, USBView used 32x32 icons scaled down to 15x15
- many minor improvements
With V3.0
- No more enumeration of all devices on arrival and removal of a USB device
- Search function (not full text, only things like device ID, drive letter, volume name etc)
- Some new Keyboard shortcuts (Alt+D to open the drives list, Alt+R the Others list, Alt+S to focus the
search edit, Alt+Left/Right to cycle thru the search hits
- Options not to expand empty hubs or hub with only empty hubs attached
- Options to jump to arrived and removed devices
- Option to expand tree items to make selected arrived and removed devices visible
- Option to rename tree items (press F2 or single-click it when selected)
- Uses Windows visual theme with option to turn it off
With V3.2
- Tree node highlight of arrived and removed devices
With V3.3
- Can write and read a report in XML format (not compatibel with USBView's)
With V3.4
With V3.5
- Can copy a full height screenshot of the tree-view to the Windows clipboard
With V3.6
- Support for high-DPI screens - no more bitmap scaling under Windows 8/10/11
With V3.7
- Tree node of USB devices can use better names than those (often generic) from the Device Manager
With V3.8
- Context menu item "Regedit..." to open certain device specific registry keys in the Windows Registry Editor
With V4.0
- Child devices of the USB device are shown in the tree-view (can be turned off)
- USB4 and Thunderbolt (information from Device Manager only)
- Option to show drive sizes in the tree-view
- The former UsbTreeView.txt is now accessible thru the help menu
With V4.2
With V4.3
- Font of the tree-view can be changed
- All devices can be renamed (F2 or click again)
- Renaming a device sets the device's registry value "FriendlyName" too. This way the name change is reflected in the Windows Device Manager.
But only if in the menu "Options" -> "Device Names in Tree" "From Device Manager" is selected, otherwise this stays for UsbTreeView only.
With V4.4
- Shows SuperSpeedPlus connection speed of 10 or 20 GBit/s (requires Windows 11 24H2 or later)
- 256x256 icons for ultra high DPI (or just very large font in the tree-view - just for fun: with Sans Serif 136 you get 256x256 icons at 100 scale)
With V4.5
- Context menu item "Network Properties..." for network devices opening its Properties dialog
- Context menu item "Test Read Speed..." for disk devices perfoming a short read speed test
|
|
|
|
|
Latest History |
V4.5.2
- Bugfix: Most items in the Tools menu did not start when UsbTreeView had no admin privileges
- New: Shows USB4 drives (which are childs of an NVME controller rather than their USB4 Device Router)
V4.5.1
- Bugfix: With option "allow only one instance" activating a previous instance actually works now
- New: In section Summary it shows comments for the "USB Version" like "3.2 Gen 1 (aka USB 3.0 - 5 Gbit/s)"
V4.5.0
- New: Context menu item "Properties" for "My Computer" node opening the Windows properties dialog
- New: Context menu item "Network Properties..." for network devices opening its Properties dialog
- New: Context menu item "Test Read Speed..." for disk devices perfoming a short read speed test
- New: Device specific icons instead of class icons if available
- New: Fonts are stored DPI specific, avoiding rounding errors when switching between DPIs
- Restored: 48x48 icons removed in V4.4.0 in favor of 256x256 are back (256 does not scale well down to 48)
V4.4.4
- Bugfix: Crash when selecting certain WPD devices
- Bugfix: Sometimes wrong 45 tree icon after restarting a device
- New: Tree icons with 10 or 20 instead of S+ for SuperSpeedPlus devices on Windows 11 24H2
V4.4.3
- Bugfix: Non-PCI xHCI host controllers not shown
- New: Context menu item "Explorer" for Storage Volumes and WPD storage devices
V4.4.2
- Bugfix: USB4 Device Router not shown
- Mew: Firmware Status Capability Descriptor decoded
V4.4.1
- Bugfix: In section "Summary" complain about missing iSerial string descriptor even it is present
- Mew: Manufacturer and Product string descriptor shown in section "Summary"
V4.4.0
- Bugfix: Some reasons for crashs fixed
- New: Shows SuperSpeedPlus connection speed of 10 or 20 GBit/s (requires Windows 11 24H2 or later)
- New: 256x256 icons for ultra hi-res screens or very large font in the TreeView
Old History
|
|
|
|
|
Screenshots |
USB 1.1
Here we have an old XP Computer with one single USB 1.1 host controller. As every USB host controller it has exactly one USB root-hub. The root-hub has two ports, at port 1 there is a USB mass storage device attached which is mounted at drive letter Z:. Even the USB drive is USB 2.0 it is running at Full-Speed only because it is attached to a USB 1.1 hub.
USB 2.0
Here we have Win7 Computer with an Intel P35 chipset which has 8 USB 2.0 High-Speed capable ports. The 8 physical ports are split here: 4 USB 1.1 controllers deal with USB low and Full-Speed devices while one USB "Enhanced" controller deals with the High-Speed devices. I don't know why the 1.1 ports are split over 4 controllers with 2 ports each. Since all manufactures do this, there must be a good reason...
The USB High-Speed controllers usually have the keyword "Enhanced" in their device name. Since Vista the "USB Hub Capabilities" can be checked for the "HighSpeed" flag.
At port 1 of the Enhanced controller there is a USB High-Speed hub attached and at his port 4 there is a USB mass storage device attached which is thanks to USBDLM mounted at drive letter Z: again. Here it is running at High-Speed.
Newer Intel chipset have no more USB1 root hubs. Instead there are two integrated standard hubs which translate Low and Full-Speed into High-Speed. Intel calls them "Integrated USB 2.0 Rate Matching Hub".
USB 3.0
Here we have a Win8 Computer with a Texas Instrumens TUSB7340 USB SuperSpeed controller card. Windows 8 has native support for USB 3.0 SuperSpeed and an enhanced USB stack which delivers more information, e.g. which speed each port supports. Therefore UsbTreeView can show a 'H' in the icon of the high-speed ports and an 'S' for the SuperSpeed ports. Still missing is the information about the supported SuperSpeed (5, 10 or 20 GBits/s)
The TUSB7340 has 4 physical ports. 4 logical ports are for low, full and high-speed devices and another 4 for SuperSpeed devices. Windows 8 also delivers information about which logical ports belong together. In the screenshot you see that the selected port 4 has the CompanionPortNumber 8, this means that port 4 and 8 share the same physical port.
USB-C ports may have two companion ports (a group of one USB2 and two USB3): Instead of switching the USB3 RX/TX lines depending on the orientation the device is plugged, the 2x5 USB3 pins are just wired to two separate USB3 ports, see here: https://richardg867.wordpress.com/2020/02/29/usb-c-done-cheap/
Internal USB3 ports may have no USB2 companion ports.
USB 3.0 Hub
USB3 hubs are in fact two completely independend hubs, one for SuperSpeed and the other one for High, Full and Low-Speed devices.
The SuperSpeed hub is wired to the five pins in front of a USB3 port, the High-Speed hub is wired to the four pins deep inside of the port.
The only thing in common is that both appear connected to ports which are mutual "companion ports".
Here port 20 is the companion port of port 9 and vice versa. Port 9 is highlighted in red because it is the High-Speed port. If Port 9 would be selected then port 20 would be highlighted blue because it's a SuperSpeed port:
The ports of the two hubs are mutual companion ports of the same port at the other hub.
A USB3 device first tries to establish a stable communication with the USB3 port. If that fails (for instance because of a too long or too bad cable) then it tries the USB2 High-Speed connection which usually works then because its electrical requirements are much lower. If connected with High-Speed then the device reports a USB version 2.1 or 2.0.
With the right adaptor one could attach a SuperSpeed device and a High-Speed device to the same physical port a the same time. This happens too with fake USB3 hubs which are in fact High-Speed hubs with the five SuperSpeed pins wired thru to one or all of the output ports.
So when a USB3 hub is attached there must appear two hubs, otherwise it is fake.
Intel Series 8 xHCI Controller
Here we have a bunch of yellow exclamation marks on a Intel Series 8 xHCI controller on a Asus H81-Plus board. Its ports 11 to 15 have a connection status 3 "Device general failure" which leads to the yellow exclamation marks in the tree view.
Probably that's the result of having higher port numbers than actual ports are available. In the Intel datasheet's there is documented a register called MAXPORTS:
"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."
So here ports 11 to 15 are in fact a gap in the port numbering, the ports do not exist. Since V3.8.5 UsbTreeView does not show such ports anymore (Windows 8 and higher). Intel's drivers (which you need up to Windows 7) just report NoDeviceConnected at these ports.
No response from USB device
Here we have a non-responding USB device: The USB port signalled an attached device, Windows requested its device descriptor but got no answer. Since Vendor and Product ID are therefore unknown, Windows assigns USB\VID_0000&PID_0002\ plus a random number as device instance ID. The PID might be another low number as 0001 or 0004.
Either the device is defective and does not respond or the connection is so bad that any communication fails. Sometimes USB ports signal an attached device even there is none or just a long cable without a device attached.
|
|
|
|
|
Identify simple BadUSB Devices |
Simple BadUSB devices are USB composite devices, so they keep their usual functionality but have an additional 'bad' function as a keyboard or a network adaptor.
By means of UsbTreeView you can check:
The BadUSB device demonstrated by Adam Caudill and Brandon Wilson at github.com looks like this:
======================== USB Device ========================
+++++++++++++++++ Device Information ++++++++++++++++++
Device Description : USB Composite Device
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 Input Device
Device ID : USB\VID_13FE&PID_5201&MI_01\7&17D1C3FF&0&0001
Class : HIDClass
Note that it is a Composite Device, that is has two child devices - the expected disk and the potentially bad keyboard.
A regular USB drive look like this:
======================== 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 : USB Storage Device
Child Device 1 : Disk
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 can ask on arrival of a new keyboard or network device if it shall be activated:
https://www.uwe-sieber.de/usbdlm_help_e.html#badusb
|
|
|
|
Uwe Sieber
Home: https://www.uwe-sieber.de/english.html |