Q. I'm using Microsoft System Center Configuration Manager 2007 (SCCM) to deploy Windows XP and Windows Server 2003 from a USB device, but I receive a missing HAL.DLL error on reboot. What's wrong?

John Savill

February 1, 2009

3 Min Read
ITPro Today logo in a gray background | ITPro Today

A. This is a problem in the initial release of SCCM that was resolved in SCCM R2. When SCCM boots Windows Preinstallation Environment (WinPE) from a USB device and deploys an image that uses NTLDR and boot.ini, as XP and Windows 2003 do, the SCCM process tries to update the boot.ini file with the correct values for disk and rdisk for the deployed OS. The disk and rdisk values determine which disk the OS should boot from.

The problem is that SCCM sees the USB device you booted from as the first disk, which shifts all the disk numbers up by one and makes the values in boot.ini incorrect. If you edit boot.ini and change the disk and rdisk values, the OS will boot fine. You would have to use this work around on every deployment, however, so there is a better solution.

SCCM task sequences usually start with a step that copies WinPE to a local hard drive and restarts the system in WinPE. If you boot WinPE from a USB device, however, WinPE is already running, so SCCM ignores this task. You need to add a step to your task sequence so that even if you're already in WinPE booted from a USB device, you still copy WinPE to the local hard drive and reboot from there. That way you avoid the problem of SCCM changing disk and rdisk.

First, edit the Restart in Windows PE step in the task sequence in SCCM, or add it if it's missing. Delete the existing condition and insert an If condition with the Any option and then add the following TS Environment variable conditions:

_SMSTSINWinPE equals "false"_SMSTSLaunchMode equals "UFD"

If you don't use the If condition with the Any option, then both conditions must be true, which won't be the case, and this work-around won't work. Your conditions should look like the example shown here.

Click to expand


The XML for your task sequence should look like this:

- - - equals false _SMSTSInWinPE - equals UFD _SMSTSLaunchMode smsboot.exe /target:WinPE - A new Microsoft Windows operating system is being installed. The computer must reboot to continue. 10 WinPE 

Now the machine should reboot if the task sequence is not running in PE already as well as if you've booted from USB. Note that if you created the deploy media as an ISO file and then copied the content to a USB device, the above steps won't work because _SMSTSLaunchMode will be equal to CD, not UFD. I saw this problem in a lab environment where the users couldn't write to USB directly, so they created an ISO and then copied that file to a remote USB device. In that case, to test this fix I changed my condition to

_SMSTSLaunchMode equals "CD"

Related Reading:



Check out hundreds more useful Q&As like this in John Savill's FAQ for Windows. Also, watch instructional videos made by John at ITTV.net.

Read more about:

Microsoft

About the Author

Sign up for the ITPro Today newsletter
Stay on top of the IT universe with commentary, news analysis, how-to's, and tips delivered to your inbox daily.

You May Also Like