169 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			169 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								UsbTreeView V2.3.1.0 - Shows the USB Device Tree
							 | 
						||
| 
								 | 
							
								Freeware by Uwe Sieber - www.uwe-sieber.de
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Works under Window 2000, XP, and higher
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Usage:
							 | 
						||
| 
								 | 
							
								UsbTreeView [/R:filename]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/R:filename  write (silently) a report to filename
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								UsbTreeView is based upon the USBView sample from the Windows Driver Kit for Server 2003.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Improvements:
							 | 
						||
| 
								 | 
							
								- better icons in the treeview
							 | 
						||
| 
								 | 
							
								- refresh on device change performed asynchronously, selected item stays selected
							 | 
						||
| 
								 | 
							
								- shows additional information gathered from the Windows device management
							 | 
						||
| 
								 | 
							
								- shows drive letters/mountpoints and COM ports
							 | 
						||
| 
								 | 
							
								- can perform safe removal, device restart and port restart
							 | 
						||
| 
								 | 
							
								- custom font and color for the right pane
							 | 
						||
| 
								 | 
							
								- toolbar with jump-lists for easily finding devices in complex trees
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								History
							 | 
						||
| 
								 | 
							
								V1.1     - first published version
							 | 
						||
| 
								 | 
							
								V1.2     - works with Windows 2000 again
							 | 
						||
| 
								 | 
							
								V1.3     - shows some more information about USB 3.0 devices
							 | 
						||
| 
								 | 
							
								V1.3.1   - minor fixes
							 | 
						||
| 
								 | 
							
								V1.3.2   - workaround for TI root hubs
							 | 
						||
| 
								 | 
							
								V1.4.0   - device safe removal and restart, saves window position
							 | 
						||
| 
								 | 
							
								V1.4.1   - shows driver version and date, custom font and color for the right pane,
							 | 
						||
| 
								 | 
							
								           removed some redundant information
							 | 
						||
| 
								 | 
							
								V1.4.2   - keeps tree item selection over refresh
							 | 
						||
| 
								 | 
							
								V1.5.0   - More USB information
							 | 
						||
| 
								 | 
							
								         - Extended USB information available under Windows 8 
							 | 
						||
| 
								 | 
							
								         - Rearranged the text output
							 | 
						||
| 
								 | 
							
								         - Some minor improvements
							 | 
						||
| 
								 | 
							
								V2.0.0   - USB enumeration rewritten; faster and independent from the treeview
							 | 
						||
| 
								 | 
							
								         - Port restart
							 | 
						||
| 
								 | 
							
								         - Extended host controller information
							 | 
						||
| 
								 | 
							
								         - Some failed USB requests are re-tried in the background, e.g. for
							 | 
						||
| 
								 | 
							
								           mouses
							 | 
						||
| 
								 | 
							
								         - nearly flicker free refresh and resize
							 | 
						||
| 
								 | 
							
								         - lots of minor improvements
							 | 
						||
| 
								 | 
							
								V2.0.1   - Bugfix: Crash on complex descriptors
							 | 
						||
| 
								 | 
							
								V2.0.2   - Bugfix: Multiple volumes per disk not shown correctly
							 | 
						||
| 
								 | 
							
								         - Bugfix: String descriptors which are referenced more than once was
							 | 
						||
| 
								 | 
							
								           shown multiple times each
							 | 
						||
| 
								 | 
							
								V2.1.0   - Decoding of USB Video Class (UVC) 1.1 descriptors
							 | 
						||
| 
								 | 
							
								         - Toolbar with jump-lists for easily finding devices in complex trees
							 | 
						||
| 
								 | 
							
								         - Driveletters, COM-Ports or extended device names shown in the device tree
							 | 
						||
| 
								 | 
							
								V2.1.1   - Bugfix: Crash on root-hubs which are not a child device of the host controller
							 | 
						||
| 
								 | 
							
								V2.1.2   - Bugfix: Windows 'app key' (or Shift+F10) opened the context menu in the wrong position
							 | 
						||
| 
								 | 
							
								V2.1.3   - Bugfix: V2.1.2 always showed wrong error for the device's Address property
							 | 
						||
| 
								 | 
							
								           Bugfix: Workaround for font problem
							 | 
						||
| 
								 | 
							
								V2.1.4   - Bugfix: V2.1.3 switched back to the default font
							 | 
						||
| 
								 | 
							
								V2.1.5   - New: Can write a report
							 | 
						||
| 
								 | 
							
								           New: Improved device names in the treeview
							 | 
						||
| 
								 | 
							
								V2.1.6   - Bugfix: Crash on decoding USB3 standard hubs
							 | 
						||
| 
								 | 
							
								         - Bugfix: some format glitches on USB3 standard hubs
							 | 
						||
| 
								 | 
							
								V2.1.7   - Bugfix: Decoding of bmAttributes in USB 2.0 Extension Descriptor was wrong
							 | 
						||
| 
								 | 
							
								V2.1.8   - Bugfix: Decoding of SuperSpeed Endpoint Companion Descriptors was done only for MSC devices
							 | 
						||
| 
								 | 
							
								V2.1.8.1 - Bugfix: Crash when saving report to 'long' path
							 | 
						||
| 
								 | 
							
								V2.1.9   - Bugfix: Crash on USB-Hubs with more than 16 Ports
							 | 
						||
| 
								 | 
							
								         - New: Commandline parameter for writing a report, e.g. /R:U:\UsbTreeView-Report.txt
							 | 
						||
| 
								 | 
							
								V2.2.0   - New: Shows some more device properties
							 | 
						||
| 
								 | 
							
								         - New: Can show the Windows device properties dialog
							 | 
						||
| 
								 | 
							
								V2.2.1   - Bugfix: V2.2.0 worked under Windows 7 and 8 only
							 | 
						||
| 
								 | 
							
								V2.3.0   - Bugfix: Several bugs which could cause crashes
							 | 
						||
| 
								 | 
							
								         - New: Decoding of HID descriptors
							 | 
						||
| 
								 | 
							
								V2.3.1   - Bugfix: Font color setting was ignored
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ToDo:
							 | 
						||
| 
								 | 
							
								- USB Video Class H.264 decoding
							 | 
						||
| 
								 | 
							
								- Maybe Unicode support if someone shows me that it is required
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								About Unknown Descriptors
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								There are two reasons why decriptors cannot be decoded and therefore
							 | 
						||
| 
								 | 
							
								shown as "Unknown":
							 | 
						||
| 
								 | 
							
								- decoding is not implemented
							 | 
						||
| 
								 | 
							
								- the device's InterfaceClass is 0xFF (vendor specific), so class specific
							 | 
						||
| 
								 | 
							
								  descriptors cannot be decoded since their class is unknown
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								So, if you have an unknown descriptor and the interface class is not 0xFF
							 | 
						||
| 
								 | 
							
								then please let me know, maybe I find the right specification document
							 | 
						||
| 
								 | 
							
								and can add the decoding for it.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For an unknown reason HID descriptors often cannot be read, Windows
							 | 
						||
| 
								 | 
							
								returns ERROR_GEN_FAILURE or ERROR_INVALID_PARAMETER. As far as I have
							 | 
						||
| 
								 | 
							
								seen it depends alone on the device but another user reported that
							 | 
						||
| 
								 | 
							
								some device's hid descriptor can be read under NT6 but not under NT5.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								About "Safe Removal" and "Restart"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								On Safe Removal UsbTreeView first calls the configuration management call
							 | 
						||
| 
								 | 
							
								CM_Query_And_Remove_SubTree. On success the device has the problem code
							 | 
						||
| 
								 | 
							
								21 which is CM_PROB_WILL_BE_REMOVED. A code 21 device can be reactivated
							 | 
						||
| 
								 | 
							
								by performing a DIF_PROPERTYCHANGE class installer call. This is what
							 | 
						||
| 
								 | 
							
								UsbTreeView does if you select "Restart device".
							 | 
						||
| 
								 | 
							
								But CM_Query_And_Remove_SubTree needs admin previleges, otherwise it fails
							 | 
						||
| 
								 | 
							
								with CR_ACCESS_DENIED. In this case CM_Request_Device_Eject is called
							 | 
						||
| 
								 | 
							
								which works without admin previleges but leads to problem code 47 which
							 | 
						||
| 
								 | 
							
								is CM_PROB_HELD_FOR_EJECT. Such a device cannot be reactivated alone.
							 | 
						||
| 
								 | 
							
								A reactivation is possible by restarting the port or the whole hub it is
							 | 
						||
| 
								 | 
							
								attached to. But the latter of course restarts all devices attached to
							 | 
						||
| 
								 | 
							
								the hub.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In all cases UsbTreeView just performs the system call and shows a
							 | 
						||
| 
								 | 
							
								message-box if Windows returns an error. But Windows does not always
							 | 
						||
| 
								 | 
							
								return an error, even there was one, so sometimes nothing happens at all.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								About "Restart Port"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This calls IOCTL_USB_HUB_CYCLE_PORT which simulates a disconnect and
							 | 
						||
| 
								 | 
							
								reconnect of the attached device.
							 | 
						||
| 
								 | 
							
								It is available under XP but usually only for hubs which run with the
							 | 
						||
| 
								 | 
							
								Microsoft default driver. 3rd party drivers usually return
							 | 
						||
| 
								 | 
							
								ERROR_UNKNOWN_FUNCTION.
							 | 
						||
| 
								 | 
							
								Under Vista and Windows 7 it is no more supported, it always fails
							 | 
						||
| 
								 | 
							
								with ERROR_NOT_SUPPORTED.
							 | 
						||
| 
								 | 
							
								With Windows 8 it works again but in contrast to XP admin previleges
							 | 
						||
| 
								 | 
							
								are required. Without admin previleges it fails as under Vista and Win7
							 | 
						||
| 
								 | 
							
								with ERROR_NOT_SUPPORTED.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								About the Debug-Port
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In Microsoft's USBView sample there is a list of USB host controllers
							 | 
						||
| 
								 | 
							
								and their debug port. I've put the table into UsbTreeView, it shows
							 | 
						||
| 
								 | 
							
								then in the properties of the host controller a line like so:
							 | 
						||
| 
								 | 
							
								DebugPort (from List): 1
							 | 
						||
| 
								 | 
							
								Windows 8 has extended USB information, it reports for each port if it
							 | 
						||
| 
								 | 
							
								is debug capable and this works indeed (seen on a i945G Chipset with ICH7).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								USB Mouses
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If an USB mouse is moved while the tool requests its USB properties there
							 | 
						||
| 
								 | 
							
								is usually an error because the mouse just has more important things to
							 | 
						||
| 
								 | 
							
								do. UsbTreeView tries then for some seconds to get this information.
							 | 
						||
| 
								 | 
							
								You might see the yellow question mark at your mouse for a moment which
							 | 
						||
| 
								 | 
							
								disappears as soon as you stop moving the mouse. This retry mechanism is
							 | 
						||
| 
								 | 
							
								done for all type of devices but usually its a mouse where it helps.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Information shown in the tree-view
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								UsbTreeView is optimized for speed, therefore USB descriptors are not
							 | 
						||
| 
								 | 
							
								gathered before a device is selected in the tree-view. So, information
							 | 
						||
| 
								 | 
							
								which come from USB descriptors cannot be shown in the tree-view, it
							 | 
						||
| 
								 | 
							
								all comes from the Windows devices manager.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Uwe Sieber, mail@uwe-sieber.de
							 | 
						||
| 
								 | 
							
								2013-10-14
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |