Booting from USB 3.0

Stingerxxx

Reputable
Nov 22, 2014
108
0
4,710
From everything I've researched, Windows 7 does NOT support booting from USB 3.0 as BOOTMGR isn't designed to load them.

So far I've managed to boot from my external drive. I've managed to use it as normal in every sense of the word via USB 2.0. However, I'm really tired of the limited transfer speeds. Boot time is in excess of 2-3 minutes, and that's with only basic services at startup.

Is there ANY way to force BOOTMGR to load the 3.0 drivers?

I know in registry the bootdriverflags tells the PC which drivers to load. Setting it to 4 changes the drivers to USB. There seems to be a simple answer here, but small bits of information are sadly not easy to locate.

In theory if I am able to locate the physical location of the current drivers that windows loads at boot time and change all files to be the 3.0 driver files, the 3.0 port will be initialized instead of the 2.0 port. Of course there's most likely more to it then this, but this is the strongest theory that I currently have.

Another theory would be to manually edit the BCD to include the driver path to the 3.0 drivers and ensure load order is approximately at the same time as the current USB drivers.

Unfortunately Google isn't helping me on this one. Apparently this is more advanced knowledge then the general populace seeks on a regular basis, and therefore google doesn't feel like showing it to me. Or maybe what I theorize is impossible without "hacking" windows itself.

I know that it is possible to initialize 3.0 drivers, Windows 8 and 8.1 have many generic 3.0 drivers load by default. Most Linux distros do as well. It's just Windows 7 and older that don't.... sigh.

Can anyone help me out here?
 
That would require me to reinstall windows. This is not something that I wish to do. Furthermore, installing windows onto an external drive is a pain. Like, a REAL pain. It requires me to use another computer and automate half the process using a third party batch file, then plug the HDD into my computer, use Hiren's boot CD and edit the registry remotely. Then, finally, I can boot into windows and finish the install. The typical "select disk for other drivers" selection is not a part of this process and I don't know how to manually edit the drivers into the install. I suppose that might be something to look into, but I'd rather edit the installation I currently have then go through all that again.

 
I appreciate the feedback, but to be honest that's rather reckless.

My issue isn't being able to use the USB 3.0. My 3.0 ports work fine. I don't need the drivers, I have them. At least, the drivers that are necessary for windows to be able to recognize and initialize the 3.0 port as well as recognize and communicate with any and all devices connected to this port. An install file itself is not going to do the job, unless someone out there has broken down 8.1 and 7 independently, discovered the differences between the two that cause the lack of ability for 7 to boot from 3.0 while 8 and 8.1 have this ability. They would then have to design an installer to not only copy all of the files necessary to enable 3.0 booting, but also edit the registry to reflect said changes, edit the BOOTMGR to load said drivers and do all of this without causing a conflict in the driver loading process. This is an immense task to tackle, and I don't trust a random installer on whatever site to be able to accomplish this. In fact, seeing as this is a very abnormal request and there is no documentation out there, that I have found, that details this process, I'd be more likely to download an .exe file that contains a piece of malware with it and does absolutely nothing to help me here.

What I'm trying to do here is not easy. It's not recommended, it's not supported. It's complicated. It's difficult. I realize this. I'm trying to get windows 7 to do something that it is not designed to do. I've been able to identify some basic files that must be loaded during the boot process, namely the usbxhci.sys. At the current moment only the usbehci.sys is being loaded, which does not have 3.0 support. The usbxhci.sys does. I don't know if it's as simple as switching the file out, changing the registry keys relating with this, and reboot. I'm afraid to try without input from someone with either education or experience in the matter chiming in. I'm continuing to research as I come back and refresh the page, I'm not one to give up easily. I'm hoping someone comes along with the answer, but I'm not banking on it.

As I said, thank you for the response. You're not dealing with an inexperienced person here, however. I may have missed a simple answer. I might have overlooked something basic. I wouldn't doubt that this is the case. With that being said, however, I'm not new to this field. I've been in this line of work for over a decade and I'm not one to overlook something like installing the driver, or selecting the correct radial button.
 
If anyone happens to peruse this thread and is running windows 8, I could use a simple thing from you....

In registry, there is a set of keys. USBSTOR, usbehci, usbohci, others like it. It would be very useful if you could take a look at this area and see if you can locate a usbxhci key. If it is there, I could use the TAG Dword entry. This will be located under HKEY_LOCAL_MACHINE/CurrentControlSet/services. If it is not there, it would be even more helpful to know that. Thank you ^.^ (Also take a quick look under controlset001 and 002, just to see if it's hiding there. It's theoretically possible that win8 has it, but it wasn't loaded due to settings with your particular installation.)
 
Just got done editing the registry to hopefully enable the already present drivers to boot at startup. Time to reboot and (hopefully) be able to boot into windows via the 3.0 port. At the very least hopefully I can boot into windows on the same 2.0 port I'm currently using lol. Hope I didn't screw the pooch. Here goes nothing.
 
Wow... I honestly don't know what to say right now. It worked. I'm currently running windows 7 on an external drive, connected via a USB 3.0 port. With the HDD in 3.0 mode. Two things that Microsoft says you can't do on Windows 7. 😀 It was actually pretty simple. Originally looking down the XHCI path in registry was a good idea, but the wrong approach. The driver is already setup in the registry. Everything that needs to be there is already there. Only a few things needed to be changed.
1) Class. The default class for my driver was Base, meaning it was a base driver to be loaded after the boot time drivers were already initialized. The answer is deceptively simple. Change the class. The correct class in this case is Boot Bus Extender.
After this, 2) a DWORD entry needed to be made, called BootDriverFlags. The value for this needed to be set to 4, as that is the value for USB drivers and the value that currentcontrolset is set to look for when loading boot time drivers.
After this, 3) tag needed to be changed. After a short deal of looking, I found that tag merely means load order in the class it is in. Since I changed the class, the order needed to be similarly changed. There were two keys to change, and uhci is set to 16. I set the hub to 14 and the driver itself to 15.
After this, 4) start needs to be changed. The new value is 0.
The last step here 5) is to edit something called USB Boot Watcher Service. There are two files, an .EXE that loads CMD up and does basically nothing else. The .conf file, however, is the brains of its' operation. Inside it are the keys that load up with the Boot Bus Extender class. The only thing that needs to be done here is to add the names of the keys that you are editing inside brackets, like [example] and then copy the text below any other bracketed name and paste it below your new entries. Ensure all entries are identical except for the names inside brackets, double check the changes inside the registry, ensuring that all necessary areas are edited and nothing else, close registry and reboot. It worked like a charm for me, no hiccups or issues otherwise.

Hopefully someone is able to stumble upon this and find it helpful. Off to tackle something else Microsoft says is impossible........
 
Additional Information

Be aware that if you do follow the above steps, it isn't going to guarantee you blazing fast speeds with your external drive. I am now able to achieve 30mb/s using my drive. This is abysmally slow compared to what internal drives are capable of, especially SSD's. Still, it is noticeably faster then when it was using USB 2.0... I was lucky to pull 10mb/s before.

Also be aware that editing the registry like I have done and like I outlined is still dangerous. The registry is the bread and butter of Windows. It is what holds everything together, what makes everything work. Mess up a single letter, a single number, and your PC might not boot. Use extreme caution if you follow the steps above.

That being said, there are some basic details I figure I must add. The driver itself already has registry entries, however it has entries in several separate locations. You are looking for a single location. Fortunately, it is located in the same place as the other USB drivers. HKEY_LOCAL_MACHINE/CurrentControlSet/services. The driver name is what you are looking for. For example, I am using the ASMedia USB 3.0 driver. This, however is not the driver name. This is the name of the driver, sure, but not of the file that is the driver. The file itself is named asmtxhci and the hub is named asmthub3. These are also the names of the two keys that are our targets.

To find the exact name of your driver, navigate to Device Manager and select Universal Serial Bus Devices. You are looking for a 3.0 driver here. Intel drivers are named Intel® USB 3.0 eXtensible Host Controller Driver. Right click, go to properties. Then click on the details tab. Then click on the Driver Details button. This should show you the path to the driver file. And bingo, at the end of the path is the name of the driver, I.E asmtxhci.sys. The easiest way to find this in the registry is to press win key + R, type regedit. When it has loaded, press CTRL + F then type in the name of the driver (or copy + paste the name if you copied it from the details window.) Now you're in the right place. Remember to also edit the hub file that is near it, as without the hub the port cannot initialize.

ALWAYS REMEMBER TO BACKUP THE REGISTRY BEFORE YOU DO THIS. If you mess up the process and reboot without realizing and fixing your mistake, you have three options. One, reinstall windows. Two, use a WINPE bootable OS to edit the registry remotely, doing your best to change things back to the way they were or fix your mistake manually. Three, use said WINPE to restore your backup and be able to boot into windows again.

ALSO NOTE, this is NOT a guide for how to boot from an external device, or on how to install windows on said external device. This is a guide to enable USB 3.0 booting AFTER you have already installed Windows. This method WILL NOT WORK if your BIOS does not support XHCI devices natively, if the setting is disabled, or if your drive itself does not support USB 3.0.

That said, if you happen to come across this semi-guide and you have any questions, shoot me a message and I'll be more then happy to help you puzzle through whatever issue you are presented with.