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.
UsbTreeView started with the USBView source code from the DDK for Server 2003. Here are the improvements I've done:
- 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
- Window position is saved
- 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
- TreeView highlighting of arrived and removed devices
- 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 and 10 (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
- 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+O 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
- Can write and read a report in XML format (not compatibel with USBview's)
| Latest History|
- 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 22.214.171.124: '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 HKLMSYSTEMCurrentControlSetControlusbstorVVVVPPPP
- 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 HKLMSYSTEMCurrentControlSetControlUsbFlags and HKLMSYSTEMCurrentControlSetServicesusbhubhubg
- 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)
V3.1.1 (06 May 2017)
- 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.0 (24 Feb 2017)
- New: Can show multiple Configuration and Other-Speed-Configuration Descriptors
- New: TreeView sub-menu to copy some id strings to clipboard
V3.0.8 (01 Jan 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.7 (09 Dec 2016)
- Bugfix: No more font change in the text pane when hitting some special charaters
V3.0.6 (10 Nov 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.5 (03 Nov 2016)
- New: Support for virtual USB Controllers where Hostcontroller and Root-Hub are one and the same device
V3.0.4 (15 Aug 2016)
- New: Port property PortConnectorIsTypeC (Win10 only)
V3.0.3 (29 June 2016)
- New: Device Manager problem numbers shown in the treeview icons
V3.0.2 (16 June 2016)
- New: Search hits get highlighted in the text pane (which is a RichEdit control now)
V3.0.1 (13 June 2016)
- Bugfix: Dropdown lists not refreshed on device arrival and removal
V3.0.0 (12 June 2016)
- Bugfix: Crash on full refresh
- 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
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.
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'.
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 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 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:
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 HighSpeed connection which usually works then because its electrical requirements are much lower.
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.
Intel's xHCI controllers are quite flexible and need a correct initialisation by the mainboard's BIOS. I don't know this is Intel's or the BIOS maker's fault. As long as all physical ports work as expected this is a cosmetic problem.
| 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: 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: 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 usbtreeviewNNN.zip 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
- 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|
Information about serial COM ports:
COM Port Info
Information about drives:
USB Drive Info