Microsoft KB Archive/323479

= USB Device That Is Swapped During Hibernation May Not Function =

Article ID: 323479

Article Last Modified on 10/26/2006

-

APPLIES TO


 * Microsoft Windows XP Professional
 * Microsoft Windows XP Home Edition

-



This article was previously published under Q323479





SYMPTOMS
If you have multiple universal serial bus (USB) devices connected to an external USB hub, when you unplug a USB device during system hibernation and then plug another USB device into the same USB port, the new USB device may not function.



RESOLUTION
To resolve this problem, obtain the latest service pack for Windows XP. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

322389 How to obtain the latest Windows XP service pack



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the &quot;Applies to&quot; section.



MORE INFORMATION
When your computer resumes after hibernation, the USB hub driver (Usbhub.sys) is responsible for restoring each USB device that is attached to the hub back to the configuration that it had before hibernation. The hub driver does this by determining whether each USB port that had a device attached before hibernation still has a device attached after hibernation.

If the hub driver finds that a USB device is still attached to the port, it allocates a USB address and assigns it to the device. The hub driver then reads the device's USB device descriptor. If the device descriptor does not match the device descriptor for the device that was attached to the port before hibernation, the hub driver marks the previously attached device object for removal. The hub driver also frees up the USB address that is assigned to the device. However, the hub driver does not disable the USB port that the device is attached to.

When the hub driver moves on to the next attached USB device, the hub driver assigns it the same USB address that it had assigned to the previously attached device because its USB address was freed. Because the port for that previously attached device was never disabled, both devices then decode the same USB address. When the hub driver tries to read the device descriptor for the next device, both devices try to respond. This behavior results in bus contention.

This problem may also affect devices that download their firmware from their device drivers when they are initialized. This behavior occurs if such a device reports a different vendor ID or product ID after the downloaded firmware is initialized. When the system resumes from hibernation, this type of USB device will have reverted to its default power-on state and will have reverted to its original vendor ID and product ID. Windows interprets this change to mean that the device was swapped during hibernation.

