Manual Plug & Play

I ran into an issue with my Windows XP installation recently, and Google turned up a lot of questions exploring the area but no answers, unfortunately. So here's how I fixed things, maybe some poor soul will find this of use:

In a nutshell, I've upgraded the BIOS for my motherboard and the external USB hubs stopped working. The computer would prompt about "New Hardware Found" whenever I logged in, but it could not install the drivers - so the HUBs just sat there, doing nothing. Very strange, especially because I dual-boot XP and Vista on this machine, and Vista detects and uses the HUBs perfectly.

The usual, obvious things (try to unplug, re-plug, reboot, delete infcache.1, reinstall chipset drivers in as many possible combinations as I could bear to try) did not help, so I decided to tell Windows what to do with the HUBs manually. After all, it knows perfectly well how to handle an USB hub, all I have to do is tell it what drivers to load, right? Turns out this was easy to do, and seems to work perfectly.

First, plug in the hub and ignore the "New Hardware Found" message. Go to Device Manager, and look for the device with the yellow questionmark. Right-click and select Properties, then choose the Details tab. You will see something like this:

Device Instance Id
(click to enlarge)

Note the "Device Instance Id". Open up Regedit and navigate to HKLM\System\CurrentControlSet\Enum\USB. There will be a bunch of subkeys starting with "Vid_". Select the one that corresponds to the Device Instance Id. It will have a subkey with a seemingly random name, such as "6&1b4ffbf&0&1". Select this subkey, like this:

The Registry - before
(click to enlarge)

Right-click the selected key in the treeview and select "Permissions". Check "Full Control" for "Everyone" and click OK.

Enter the following missing registry values on the right-hand side:

  • "DeviceDesc" is a string value and should be "My Favorite USB Hub" or something similarly descriptive.
  • "Mfg" is a string that should be set to the manufacturer name, like "My Favorite Hardware Company". You can be creative, it doesn't matter.
  • "Class" is a string and should be "USB".
  • "ClassGUID" is a string and should be "{36FC9E60-C465-11CF-8056-444553540000}".
  • "Driver" is yet another string and should be "{36FC9E60-C465-11CF-8056-444553540000}\0015".
  • "Service" is the last string and must be "usbhub".
  • Finally, "ConfigFlags" is a DWORD and should be 0.

    Like so:

    The Registry - after
    (click to enlarge)

    While you're typing the above values, Windows will suddenly decide that it has *some* info but not enough and the "New Hardware Found" prompt will disappear. You'll get a balloon tip instead telling you that the hardware you're installing has malfunctioned. Just ignore this and finish adding the entries.

    When you're done, unplug then re-plug your HUB. If everything goes well, Windows will detect your hardware and start using it absolutely silently. (Well, save for the usual USB ding.)

    At this point you will also want to take away the "Full Control" checkbox from "Everyone" and leave the permissions on "Read".

    This doesn't fix the overall problem; the fact that Windows is not able to automatically detect HUBs that you plug in is still there. You're done with this particular device but if you attach a new HUB to your machine you will have to go through this painful process once more.

    I very warmly recommend that you do not change other registry values that might belong to this key or its subkeys. As you add or remove hardware Windows will insert other entries, and, for example, having a duplicate "ParentIdPrefix" value will result in bluescreens.

    Note: If you have a device with nested HUBs (such as a Dell monitor with USB ports and integrated card readers) you will need to perform the above steps twice. First you will get the "Add New Hardware" prompt for the internal HUB itself. When you fix it according to the above instructions, you will gain full use of your memory card reader but the USB ports are still useless because you have a new "Add New Hardware" prompt for the external HUB. Go through the process once more and all will be well.