usbbootfix.bat doesn't help by itself since SP1, but may be involved, so run it before set_7_usb_boot.cmd
@echo off
if "%1"=="fix" goto :fix
rem -- install task
copy /y "%~f0" "%SystemRoot%\system32\usbbootfix.bat"
SCHTASKS /Create /RU SYSTEM /SC ONEVENT /MO "*[System[Provider[@Name='Microsoft-Windows-UserPnp'] and EventID=20003]]" /EC System /TN USBBootFix /TR "'%SystemRoot%\system32\usbbootfix.bat' fix" /F
rem -- apply other settings
reg add HKLM\SYSTEM\CurrentControlSet\services\pciide /v Start /t REG_DWORD /d 0x0 /f
reg add HKLM\SYSTEM\CurrentControlSet\services\msahci /v Start /t REG_DWORD /d 0x0 /f
reg add HKLM\SYSTEM\CurrentControlSet\services\intelide /v Start /t REG_DWORD /d 0x0 /f
reg add HKLM\SYSTEM\CurrentControlSet\services\viaide /v Start /t REG_DWORD /d 0x0 /f
rem -- run :fix once after install
:fix
call :fixservice usbehci "Boot Bus Extender"
call :fixservice usbohci "Boot Bus Extender"
call :fixservice usbuhci "Boot Bus Extender"
call :fixservice usbhub "System Bus Extender"
call :fixservice usbstor "SCSI miniport"
goto :eof
:fixservice
setlocal
set Start=
set Group=
for /f "skip=2 tokens=1,2,*" %%I in ('reg query HKLM\SYSTEM\CurrentControlSet\services\%~1') do (
if "%%I"=="Start" set Start=%%K
if "%%I"=="Group" set Group=%%K
)
if not "%Start%"=="0x0" reg add HKLM\SYSTEM\CurrentControlSet\services\%~1 /v Start /t REG_DWORD /d 0x0 /f
if not "%Group%"=="%~2" reg add HKLM\SYSTEM\CurrentControlSet\services\%~1 /v Group /t REG_SZ /d "%~2" /f
endlocal
goto :eof
@echo off
setlocal EnableExtensions EnableDelayedExpansion
pushd %~dp0
rem set_7_usb_boot.cmd v0.02
rem created by cdob
echo prepare offline windows 7 registry, set USB boot drivers &echo.
set System_Root=\Windows
if not %1.==. set System_Root=%1
if not exist "%System_Root%\system32\config\system" set /P System_Root=Path to your SystemRoot folder on usb drive (e:\Windows):
if not exist "%System_Root%\system32\config\system" (echo Error: target not found &pause &popd &goto :eof)
copy "%System_Root%\system32\config\system" "%System_Root%\system32\config\system_%random%.sav"
reg.exe load HKLM\loaded_SYSTEM "%System_Root%\system32\config\system"
set ControlSetDefault=
call :setReg Default
call :setReg LastKnownGood
reg.exe unload HKLM\loaded_SYSTEM
popd
goto :eof
:setReg
set ControlSet=001
reg.exe query "HKLM\loaded_SYSTEM\Select" /v "%1" >nul 2>&1 && (
for /f "skip=2 tokens=3" %%a in ('reg.exe query "HKLM\loaded_SYSTEM\Select" /v "%1"') do set /a ControlSet=%%a
set ControlSet=000!ControlSet!
)
set ControlSetNNN=ControlSet%ControlSet:~-3%
if %ControlSetDefault%.==%ControlSetNNN%. goto :eof
echo. &echo ControlSet "%ControlSetNNN%" used.
set Services=HKLM\loaded_SYSTEM\%ControlSetNNN%\Services
set Control=HKLM\loaded_SYSTEM\%ControlSetNNN%\Control
rem http://msdn.microsoft.com/en-us/library/ff794567(v=winembedded.1001).aspx
rem Deploying Microsoft Hyper-V Server 2008 R2 on USB Flash Drive
rem http://technet.microsoft.com/en-us/library/ee731893%28WS.10%29.aspx
reg.exe add %Control%\PnP /f /v PollBootPartitionTimeout /t REG_DWORD /d 30000
rem Loads VHD, SD, and USB boot drivers.
reg.exe add %Control% /f /v BootDriverFlags /t REG_DWORD /d 0x6
set ControlSetDefault=%ControlSetNNN%
goto :eof