I received the error on Windows XP startup that my hal.dll file (hardware abstraction layer) was missing and Windows would not boot. Here’s how I fixed it.
Boot from your Windows CD and follow the directions to start the Recovery Console. When asked for your Administrator password, enter that in. In my case I didn’t have one so I left it blank.
I then navigate to the system32 folder by typing “cd windows/system32? to get into the system32 directory and type “dir†to get a list of directory files to confirm that the hal.dll file was there. In which case it was. This tells me that there is a problem with my boot.ini file.
I then typed the following:
cd C:/
Attrib -H -R -S C:\Boot.ini
DEL C:\Boot.ini
BootCfg /Rebuild
Fixboot
exit
The Attrib command I entered made the file editable. The DEL command deleted the Boot.ini file and the BootCfg /Rebuild created a new Boot.ini file based on my partition tables. The exit command reboots the PC.
If you ever run into this and the hal.dll file is truely missing, you can extract a copy from your Windows CD by typing the following from the recovery console.
expand d:\i386\hal.dll_c:\windows\system32\hal.dllThis will copy the file from the CD to your system32 directory and reboot. You should be up and running again.
I hope this helps someone that has the same problems I encountered with Windows and hal.









On Friday, Jul 11
I've observed the same error after installing Ubuntu 8.04 alongside Windows XP, which has already been running on the system for quite some time.
I had the suspicion that Windows fails to load due to incorrect partition reference in boot.ini. Unexpectedly, the hard part was to locate the boot.ini itself as it was not present on the system partition as I've expected for some reason, but was placed on another partition used only for data storage. After finding the boot.ini fixing it was as easy as changing
default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS
to
default=multi(0)disk(0)rdisk(0)partition(4)\WINDOWS
AND
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
to
multi(0)disk(0)rdisk(0)partition(4)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
It depends on a particular configuration what the partition number should be, but it shouldn't hurt to experiment with different values, as there's nothing more to break :)