USB Device Tree Viewer V4.2.5

  This page in German language

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
  • TreeView 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
  • Treenode 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.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
  • Half Dark Mode

  Latest History
V4.2.5 (2024-05-09)
  • Bugfix: Yet another crash fixed
V4.2.4 (2024-05-07)
  • Bugfix: Another crash fixed
V4.2.3 (2024-05-02)
  • Bugfix: Some reasons for crashes fixed
  • New: Starts RegEdit in Local System context to get access to all device keys
V4.2.2 (2024-04-14)
  • Bugfix: Somtimes freeze when using the jump-lists
  • New: Shows a very few information about HID devices
V4.2.1 (2024-04-08)
  • New: Dark scroll bars and combo boxes in "Half Dark Mode"
V4.2.0 (2024-04-01)
  • New: "Half Dark Mode"
  • Bugfix: "Device maximum Speed" of SuperSpeed devices connected at High-Speed shown wrong as High-Speed in V4.1.0
  • New: For video devices the default video modes are shown in the Summary section
  • New: Some information about WPD devices
  • New: Option to show useless WPD devices Windows creates for USB storage volumes (maybe known to some for haveing "Code 10" in the device manager when a volume had no drive letter under Windows 7/8)
  • New: USB3 Ports of SuperSpeedPlus connected standard hubs are assumed to support SuperSpeedPlus too
  • New: Shows an error if a bInterfaceNumber is > bNumInterfaces-1
  • Bugfix: Lots of minor fixes and some reasons for crashes fixed
  • New: Workarounds for devices for which no arrival/removal notifications are sent
  • Bugfix: Several reasons for crashs in V4.x fixed
  • Bugfix: Max port speed of known SuperSpeedPlus ports not shown as SuperSpeed
  • Bugfix: SuperSpeed devices running at High-Speed shown with a "Device max speed" of High-Speed
  • Bugfix: Too small font in the right pane on high DPI if there is an INI written by version before V3.6.0
  • Bugfix: Some highlighting glitches
  • Bugfix: Rare crash on device restart
  • Bugfix: Restarted devices sometimes kept the problem icon
  • Bugfix: CDROM drives sometimes not added
  • New: Option to show hidden volumes
  • Bugfix: Crash when selecting a CDROM drive
  • Some minor fixes for child devices
  • New: Child devices of the USB device are shown in the tree-view (can be turned off)
  • New: USB4 and Thunderbolt (information from Device Manager only)
  • New: Option to show drive sizes in the tree-view
  • New: The former UsbTreeView.txt is now accessible thru the help menu
  • Bugfix: Since V3.8.6 instant crash on some machines
  • Bugfix: Wrong complain about too short USB hub descriptor on USB3 root-hubs
  • Bugfix: Crash when a device reports more than 16 configurations
  • Bugfix: Graphical glitches when moving the Window between screens with different scalings
  • Bugfix: Some registry values where shown even if they are not present
  • New: Non-existing ports no more shown in the treeview
  • New: Tools menu for opening the Windows Device Manger, Disk Manager, etc
  • Bugfix: Some minor fixes
  • Bugfix: Loading an XML report did not work on Windows with an ANSI codepage using a variable-width encoding (Chinese/Japanese/Korean)
  • Bugfix: Since V3.7.7 no more new devices where detected after removing a hub until a full refresh
  • New: Billboard Capability Descriptor decoded
  • Bugfix: Starting Regedit did not work mostly
  • New: Context menu item "Regedit..." to open certain device specific registry keys in the Windows Registry Editor
  • Rewind: Reporting a USB version of 2.0 is no more blamed as an error if the device does not deliver an "other_speed" device_qualifier descriptor because the document 2002_05_28_errata.pdf says:
    "Full speed and low speed only devices designed to this specification should also use version number 2.0"
    even main USB 2.0 spec says in
    "Devices that are high-speed capable must set the version number in the bcdUSB field of their descriptors to 0200H. This indicates that such devices support the other_speed requests defined by USB 2.0.". But Full Speed devices do not support the other_speed requests since the have no other speed...
  • Bugfix: V3.7.7 did no show a Window when started under XP thru the Windows Explorer (because it passes stdin/out handles, so UsbTreeView thinks it shall silently write a report to stdout)
  • Bugfix: V3.7.7 crashed when a hub did not deliver its USB_HUB_INFORMATION
  • Workaround: Some ASMedia host controllers fail to deliver their root-hub's symlink by means of IOCTL_USB_GET_ROOT_HUB_NAME. Same problem when requesting the symlink of a standard hub (IOCTL_USB_GET_NODE_CONNECTION_NAME). Both calls may fail with ERROR_NOT_SUPPORTED when the ASMedia drivers asmtxhci.sys and asmthub3.sys are used. Both cases are resolved now by devices' parent-child relation.
  • New: For /R and /X a 'magic' file name of "stdout" makes it write the text- or XML-report to stdout instead of an actual file. If not redirected it attaches to parent process' console or creates a new one.
  • Bugfix: wChannelConfig of Audio 1.0 descriptors decoded wrong, possible crash
  • Bugfix: Other Speed Configuration Descriptor not shown since V3.4
  • Bugfix: x64 Release did not save settings when it has no write access to the INI file because Windows does VirtualStore redirection for 32 bit apps only. Without write access the INI is now saved to %ALLUSERSPROFILE%\Uwe Sieber (under Windows 2000, XP and 2003 to %APPDATA%)
  • Bugfix: Option "Read Msft String Descriptor 0xEE" was read inverted from INI since V3.4.0, so it switched between on and off every start
  • Bugfix: bInterval of endpoint descriptors decoded wrong
  • New: Drop-down lists as wide as the longest item
  • New: Some fine-tuning for smart node naming
  • Bugfix: When renaming a USB dev's node the default name was always the device description from the Device Manager, even another source was selected
  • Bugfix: V3.7.0 had no valid default for the new source of display names resultung in showing device IDs until a valid source was selected
  • New: Tree nodes of USB devices can show now either names from the Device Manager (as UsbTreeView before V3.7) or names build from USB string descriptors or (new default) a smart choice of the available strings (let me know if it does not look that smart for one of your devices)
  • Bugfix: V3.6.0 reported an error for an trailing NULL character in string descriptors even there is none
  • New: Support for high-DPI screens - no more bitmap scaling under Windows 8/10/11
  • Bugfix: Wrong font color when highlighting selected node while not focused
  • Bugfix: Port maximum speed shown wrong on pre-Win8 systems
  • Bugfix: Comboboxes with old content after loading an XML report
  • Bugfix: Minor fixes
  • Bugfix: Crash on Windows 8, 8.1, Server 2008 when dealing with companion ports
  • New: Highlight for companion ports (Win8+)
  • New: Right-click -> Copy Tree from here can copy a full treeview screenshot
  • Bugfix: since V3.4.0 copy tree to clipboard did not work
  • Bugfix: since V3.4.1 possible crash when restarting a hub
  • Bugfix: since V3.4.1 SuperSpeed ports got no 'S' icon and max speed shown as SuperSpeedPlus
  • Bugfix: V3.4.1 crashed on pre-Win8 systems
  • Bugfix: Child devices sorted by device id instead of kernel name, at least for devices the author came across with this leads to better sorting, e.g. for COM ports
  • Bugfix: TreeView's context menu did not work on negative mouse coordinates (on screens left of the main screen)
  • New: Shows a summary with the most interesting information
  • New: Can shows sum of used endpoints of all devices attached to a root-hub in the tree-view
  • New: Remembers which ports have ever operated at SuperSpeedPlus (because so far there is no way to request the capability)
  • Bugfix: Crash with failed USB hub
  • New: UVC 1.5 H.264 descriptors are decoded
  • New: More device interface GUIDs are resolved
  • New: Reporting a USB version of 2.0 is blamed as an error if the device does not deliver an "other_speed" device_qualifier descriptor because USB 2.0 spec says "Devices that are high-speed capable must set the version number in the bcdUSB field of their descriptors to 0200H. This indicates that such devices support the other_speed requests defined by USB 2.0."
  • New: Contains nearly 12000 vendor names from usbif.json instead of 1000 from the former usb.if
  • New: Option to allow only one instance running
  • New: Nodes of devices with a problem show a tool-tip with a problem description
  • Bugfix: Renamed tree items not shown with the customized name on startup
  • New: Shows Registry flags under HKLM\SYSTEM\CurrentControlSet\Control\usbstor\VVVVPPPP
  • New: Sum of used endpoints shown for root-hubs
  • New: Option to show the number of used endpoints in the tree
  • Bugfix: Crashs on device removal
  • Bugfix: Sometimes truncated XML report
  • New: A selected tree node can be renamed by pressing F2 or single left-click it (needs admin privileges)
  • New: Finds root hubs which are not the child device of their host controller (often seen on virtual USB over LAN)
  • Bugfix: Text report by command-line did not work since V3.3.0
  • Bugfix: Device arrivals not detected when registry contains wrong device path for a USB hub
  • New: Can write and read a report in XML format
  • Bugfix: Crash when showing open handle after failed safe removal of a device with a COM port
  • Bugfix: MessageBox was shown after writing a report by command-line
  • Bugfix: guidExtensionCode in 'Video Control Extension Unit Descriptor' was not shown
  • New: Name of guidExtensionCode (e.g. 'YUY2') is extracted from the first four bytes of the GUID
  • Bugfix: Some strings for Smart Card Functional Descriptor where shown as question marks
  • Bugfix: UVC frame intervals where shown without fraction of milliseconds for continuous frame type
  • Bugfix: UVC frame intervals where shown without fraction of milliseconds
  • Bugfix: Under XP the UsbTreeView process did not end after using "Safely Remove"
  • New: Highlight color of selected item darker
  • New: TreeView highlighting as known from the SysInternals ProcessExplorer
  • New: On failed 'safe removal' it shows open handles found for the device ID Windows returns as VetoName
  • New: Shows global registry USB flags under HKLM\SYSTEM\CurrentControlSet\Control\UsbFlags and HKLM\SYSTEM\CurrentControlSet\Services\usbhub\hubg
  • New: Detects arrival of USB devices even its driver fails to start, e.g. if no driver is installed yet
  • New: Detects childs of USB devices even they don't generate device notifications nor they are enumerated by SetupDiGetClassDevs (seen on Arduino Micro)
  • Bugfix: Device Qualifier Descriptor was requested even the device is running at SuperSpeed
  • New: Option to show the port chain instead the port number in the tree
  • Bugfix: Some hexdumps where missing
  • Bugfix: Device Qualifier Descriptor was requested for USB 1.x devices
  • New: Copy tree to clipboard function
  • New: Text copied to clipboard as HTML fragment enclosed in <pre> tags to get a monospaced font offhand
  • New: SmartCard Reader Feature Descritpor decoded
  • Bugfix: Volume of CDROM drives not recognized on arrival
  • Bugfix: Wrong value shown for Clock Selector in Audio Control Clock Selector Unit Descriptor 2.0
  • New: Full enumeration when missing USB device notifcation is detected (workaround for SILEX USB Device Servers)
  • Bugfix: Occasional crash on safe removal
  • Bugfix: Since V3.0.6 no device information for UHCI controllers under Windows 2000
  • Bugfix: wPacketSize decoded wrong if SuperSpeed device reported a Device Bus Speed of 0x02
V3.1.1 (06 May 2017)
  • New: Can show multiple Configuration and Other-Speed-Configuration Descriptors
  • New: TreeView sub-menu to copy some id strings to clipboard
V3.1.0 (24 Feb 2017)
  • Bugfix: Removal of storage volumes not handled correctly
  • New: Project is UNICODE now, so non-ASCII string descriptors are shown correctly even the Windows ANSI codepage cannot
  • New: Improved robustness when decoding invalid descriptors
  • New: Option "Always On Top"
V3.0.8 (01 Jan 2017)
  • Bugfix: No more font change in the text pane when hitting some special charaters
V3.0.7 (09 Dec 2016)
  • New: Improved detection of arrival/removal of child devices
  • New: Devices in low power state and problem code 0 get a 'D1', 'D2' etc icon instead of an exclamation mark
  • New: Workaround for a strange phenomenon: On some Windows device notifications come with wide strings even RegisterDeviceNotificationA was used; This is dealt with now.
V3.0.6 (10 Nov 2016)
  • New: Support for virtual USB Controllers where Hostcontroller and Root-Hub are one and the same device
V3.0.5 (03 Nov 2016)
  • New: Port property PortConnectorIsTypeC (Win10 only)
V3.0.4 (15 Aug 2016)
  • New: Device Manager problem numbers shown in the treeview icons
V3.0.3 (29 June 2016)
  • New: Search hits get highlighted in the text pane (which is a RichEdit control now)
V3.0.2 (16 June 2016)
  • Bugfix: Dropdown lists not refreshed on device arrival and removal
V3.0.1 (13 June 2016)
  • Bugfix: Crash on full refresh
V3.0.0 (12 June 2016)
  • New: No more enumeration of all devices on arrival and removal of a USB device
  • New: Search function (not full text, only things like device ID, drive letter, volume name etc)
  • New: Toolbar controls shrink if required
  • New: Some new Keyboard shortcuts (Alt+D to open the drives list, Alt+O the Others list, Alt+S to focus the search edit, Alt+Left/Right to cycle thru the search hits
  • New: options not to expand empty hubs or hub with only empty hubs attached
  • New: options to jump to arrived and removed devices
  • New: option to expand tree items to make selected arrived and removed devices visible
  • New: Uses Windows visual theme with option to turn it off
Old History


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:



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 deep inside a USB3 port, the High-Speed hub is wired to the four pins in front 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 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
 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:


  Conditions and Download

Download latest release:

Download old V3.0.2 (last without RichEdit control):
Download old V2.6.1 (last 2.x):
Download old V2.0.2:
Download old V1.5:

Other old releases are available under the names.

UsbTreeView is Freeware.
- usage in any environment, including commercial
- include in software products, including commercial
- include on CD/DVD of computer magazines
- distribution by means of packet managers  
Not allowed:
- modify any of the files
- offer for download by means of a "downloader" software

I don't ask for donations but some users insist, so:



  Similar Tools

Restart USB port by command-line:
Restart USB Port

List USB devices on command-line:
List USB Devices

Information about serial COM ports:
COM Port Info

Information about drives:
USB Drive Info




Uwe Sieber