The USBView.exe sample program does not enumerate devices on pre-Windows XP SP1-based computers

This article has been archived. It is offered "as is" and will no longer be updated.
You may experience the following symptoms when you use the USBView.exe program to enumerate universal serial bus (USB) devices and host controllers:
  • Issue A - USB 2.0 host controllers are not enumerated on Microsoft Windows 2000-based computers.
  • Issue B - Attached USB devices are not displayed.

    The version of the USBView.exe program that is built by using the Windows XP Service Pack 1 Windows Driver Development Kit (DDK) does not show any USB devices when you run the sample on the following operating systems:
    • The release version of Microsoft Windows XP.
    • Any version of Microsoft Windows 2000, Microsoft Windows Millennium Edition, or Microsoft Windows 98.

Issue A - USB 2.0 host controllers are not enumerated on Windows 2000-based computers

The USBView.exe program does not enumerate USB 2.0 host controllers on Windows 2000-based computers because two different USB driver stacks run on Windows 2000-based computers, as follows:
  • The first stack is used for USB 1.1 host controllers.
  • The second stack is used for USB 2.0 host controllers.
Both USB driver stacks create symbolic link names that have the following format, where x represents an instance number:
Both USB driver stacks start the instance number at 0. This behavior means that both driver stacks try to create the following symbolic link name:
The USB 2.0 driver stack tries to create this symbolic link name after the USB 1.1 driver stack creates the symbolic link name. Therefore, the symbolic link name is not created, and the USB 2.0 host controller cannot be accessed through a symbolic link.

Issue B - Attached USB devices are not displayed

The USB driver stack that is included in Windows XP SP1 includes support for a new input/output control (IOCTL) that is named as follows:
This IOCTL replaces the earlier version of the IOCTL that is named IOCTL_USB_GET_NODE_CONNECTION_INFORMATION. The earlier version of the IOCTL was used in earlier versions of the USBView.exe program.

The USBView.exe program was modified to use this newer IOCTL because it returns information about whether the USB device is operating at high speed.

If you try to use IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX on pre-Windows XP SP1-based computers, the attempt is not successful. Additionally, no information about the USB device is displayed.

Issue A - USB 2.0 host controllers are not enumerated on Microsoft Windows 2000-based computers

In addition to supporting the use of a symbolic link name, the new USB driver stack supports the use of a GUID-based device interface.

The EnumerateHostControllers function in the Enum.c file includes a section whose comments explain how to use this technique to enumerate the host controller. You can modify this function to detect when it is running on a Windows 2000-based computer. You can then use both the GUID-based enumeration method and the symbolic link method to enumerate all USB host controllers.

Issue B - Attached USB devices are not displayed

You can modify all uses of the new IOCTL, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, in the USBView.exe program. You can modify the IOCTL so that if the IOCTL is not successful, the USBView.exe program falls back to use the earlier version of the IOCTL, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION.

This fallback behavior allows the USBView.exe program to still report whether a device is running at high speed on a computer that is running Windows XP SP1 or later versions of Windows. Additionally, this fallback behavior also displays USB devices on pre-Windows XP SP1-based computers.
This problem has been fixed in the Windows Server 2003 Service Pack 1 DDK.

Article ID: 838100 - Last Review: 12/08/2015 06:34:31 - Revision: 2.0

Microsoft Windows XP Driver Development Kit

  • kbnosurvey kbarchive kbprb KB838100