Windows XP - A Tale of 2 HALs

Windows XP - A Tale of 2 HALs
Photo by Tadas Sar / Unsplash

The HAL:

Many people don't know what the HAL is, and what files make up the HAL. There are basically 3 files that make the HAL, and 2 of them makes it be ACPI or non-ACPI or SMP or whatever. It's tricky to figure this out however because Microsoft has done a terrible job at naming the files. I'll attempt to explain how to switch from one HAL to another in this document.

Selecting the HAL you want:

This is the list of the types of HALs you can do and the files that are related to that HAL. You can find these files on your install CD for Windows. Their name will end in ".dl_" on the CD rather than ".dll" because they are compressed. It is important if your install CD is at a lower Service Pack than your workstation that you use the most up to date files. To get the latest files you should Slipstream Service Packs in to a i386 folder. Slipstreaming is explained here among other places.

Pick the right HAL:

ACPI Multiprocessor PC = Halmacpi.dl_
ACPI Uniprocessor PC = Halacpi.dl_
Advanced Configuration and Power Interface (ACPI) PC = Halacpi.dl_
MPS Multiprocessor PC = Halmps.dl_
MPS Uniprocessor PC = Halapic.dl_
Standard PC = Hal.dl_
Compaq SystemPro Multiprocessor or 100% Compatible = Halsp.dl_
Pick the right Kernel:

Single Processor Kernel: NTOSKRNL.EX_
Multi Processor Kernel: NTKRNLMP.EX_
How to actually switch HALs:

Extract the proper HAL along with the right OS Kernel and rename the extracted files as follows:



where D: is the drive letter used by your CD-ROM drive and C: is where your WINNT folder resides. You need to be sure to copy the right Kernel and HAL file based on your needs. The example above shows how you could switch to a MultiProc ACPI HAL from a single proc non-ACPI.

How this applies to corporate images:

I have found that in my corporate image if I use the Single Proc Kernel (NTOSKRNL.EXE) and the Advanced Configuration and Power Interface (ACPI) PC HAL (Halacpi.dll) that I can put my image on almost anything. After imaging a HyperThreading machine I have a package I made that puts the NTKRNLMP.EXE in the System32 folder as NTOSKRNL.EXE, and copies Halmacpi.dll over hal.dll. After rebooting the machine shows both processors. Windows XP is nice in that it lets you switch out HALs while the machine is running. Windows 2000 was not as nice about changing out the HAL while the machine was booted.

Where do I go from here?

Now that you have an understanding of the HAL you can try to switch your HAL around. Feel free to email me at if you would like to send me feedback.