Useful USB Boot Information

If your device fails to boot from a UFD and:

1)      Your device is getting through NTLDR and you're getting into the NTOS but then failing with error 0x7B

2)      You have verified that your BIOS is enumerating your UFD by using the XPE instrumented NTDETECT. 

Then kernel mode PnP is probably failing to set up the critical device storage stack needed by the UFD.  This could be related to your UFD and/or your PCI bus and bridge to the USB 2.0 Controller. 

First check to make sure all of the UFD resources exist on your device

The following table shows all of the file and registry resources currently used to boot from a UFD.  Resource Requirement list for USB Boot

TOP OF STORAGE DEVICE STACK

DISK.SYS (Disk Class driver)

USBSTOR.SYS (UFD Storage driver)

USBHUB.SYS (USB HUB Port driver)

USBEHCI.SYS (USB 2.0 Enhanced controller Mini Port driver)

PCI.SYS (PCI Bus Driver PCI to USB Controller Bridge)

BOTTOM OF STACK

                NTLDR

                NTDetect.com    (USB Boot Version)

                NTOSKRNL

        +------------------------

        |       PCI.SYS                         +--------------------------------------

USB     |       USBEHCI.SYS   ------------------------------------  |   USBPORT.SYS

Stack   |       USBHUB.SYS      (USB Boot Version)      |       USBD.SYS

        |       USBSTOR.SYS     (USB Boot Version)      +--------------------------------------

        |       DISK.SYS

        +------------------------

                USBD.SYS

                USB.INF         (USB Boot Version)

                USBPORT.INF     (USB Boot Version)

                USBSTOR.INF     (USB Boot Version)

The following registry entries are critical to the USB Boot process

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\*pnp0a03]

"Service"="pci"

"ClassGUID"="{4D36E97D-E325-11CE-BFC1-08002BE10318}"       

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#cc_0c0320]

"Service"="usbehci"

"ClassGUID"="{36FC9E60-C465-11CF-8056-444553540000}"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\usb#root_hub20]

"Service"="usbhub"

"ClassGUID"="{36FC9E60-C465-11CF-8056-444553540000}"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\usb#class_09]

"ClassGUID"="{36FC9E60-C465-11CF-8056-444553540000}"

"Service"="USBHUB"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\usb#class_08]

"ClassGUID"="{36FC9E60-C465-11CF-8056-444553540000}"

"Service"="USBSTOR"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\gendisk]

"ClassGUID"="{4D36E967-E325-11CE-BFC1-08002BE10318}"

"Service"="disk"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\usbstor#disk]

"ClassGUID"="{4D36E967-E325-11CE-BFC1-08002BE10318}"

"Service"="disk"

[HKEY_LOCAL_MACHINE\usbsystem.sav\ControlSet001\Services\USBEHCI]

"Start"=dword:00000000

"Type"=dword:00000001

"ErrorControl"=dword:00000001

"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,\

  72,00,69,00,76,00,65,00,72,00,73,00,5c,00,55,00,53,00,42,00,45,00,48,00,43,\

  00,49,00,2e,00,53,00,59,00,53,00,00,00

"Group"="Base"

"DisplayName"="USB 2.0 Bus Driver"

"Description"="USB 2.0 Bus Driver"

[HKEY_LOCAL_MACHINE\usbsystem.sav\ControlSet001\Services\USBHUB]

"Start"=dword:00000000

"Type"=dword:00000001

"ErrorControl"=dword:00000001

"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,\

  72,00,69,00,76,00,65,00,72,00,73,00,5c,00,55,00,53,00,42,00,48,00,55,00,42,\

  00,2e,00,53,00,59,00,53,00,00,00

"Group"="Base"

"DisplayName"="USB HUB Driver"

"Description"="USB HUB Driver"

[HKEY_LOCAL_MACHINE\usbsystem.sav\ControlSet001\Services\USBSTOR]

"Start"=dword:00000000

"Type"=dword:00000001

"ErrorControl"=dword:00000001

"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,\

  72,00,69,00,76,00,65,00,72,00,73,00,5c,00,55,00,53,00,42,00,53,00,54,00,4f,\

  00,52,00,2e,00,53,00,59,00,53,00,00,00

"Group"="Base"

"DisplayName"="USB Boot Mass Storage Driver"

"Description"="USB Boot Mass Storage Driver"

When Kernel mode PnP builds the critical device storage stack, it needs to map the HW or compatible ID or your hardware to the correct driver.  PnP uses the Critical Device data base to do this.  Plug your UFD into a safe build (such as an XP Professional system)and verify that all of the Compatible ID’s for your specific hardware exist in the SYSTEM.SAV hive of your runtime. 

Example of Debugging a USB Boot issue:

There may exist some hardware main board that contains some PCI bridge and USB boot support along with a UFD that fails to boot (blue screen 0x7B).  In this scenario, boot into Window XP safe environment and plug in the UFD. View the device tree by connection and look at the Compatible Hardware ID(s) for each device from the PCI bus up to the Generic Volume.  Verify that your Critical Device Database on your runtime contains compatible ID(s) for each device needed in the tree.

For each device in the tree, verify that a compatible or hardware ID exists in the Critical Device Database, and that it maps to the appropriate driver.

The Compatible ID “PCI\CC_0C03” exists for the Enhanced Host Controller, so this driver is set up correctly.  Proceed to the next one.  Check that all drivers in the tree contain CDD entries for either a Hardware ID or Compatible ID.  If one is missing then add it. 

- Joe