How to switch Windows XP HAL _BACK_ from Standard PC to ACPI (the clean way)

Awh man… a whole bunch of bad information on the internet about this. You don’t need to re-install the OS. Hell, you don’t even have to hack (and hence, un-sign) the hal.inf or machine.inf files. Using a little knowledge of the way Device Manager identifies devices (and hence, locks them into their supported hardware IDs), you can trick it into allowing you to “update” to the ACPI HAL and kernel.

Of course, on an unsupported system, this may just BSOD you forever, then you’ll be pretty much hosed since your ntoskrnl.exe, ntkrnlpa.exe, and hal.dll will have been replaced with ACPI versions – something “Last Known Good configuration” will not help you with. So BE ABSOLUTELY CERTAIN your system supports ACPI mode (e.g. “oh crap, I switched to Standard PC and now I can’t get out!”) before changing this.

Not even gonna give that “omg registry editing is dangerous” BS, because every geek should know their way around the registry. But this is another good place to mention: you could f’ing hose your system if you do this. I’m actually in the process of re-installing Windows on the PC I tried this on right now, because it’s a 266MHz Pentium II laptop with 64mb RAM, originally Win95, far from ACPI. The most recent BIOS update (in 2001) provided ACPI compatibility, so I figured I’d give it a try. Since it was installed with the Standard PC HAL (no ACPI), it installed all its hardware support under that key. So, it just BSOD-looped me (0x7b, curiously enough – couldn’t find the HDC driver?), and since 64mb isn’t enough to load MiniXP, and the HDD is too old to work with a USB-adapter, I’m screwed. Meh, I just installed it an hour ago anyway.

  1. Regedit. Browse to:
  2. Right click the 0000 key and choose “Permissions…”.
  3. Check the “Full Control” checkbox for “Everyone”. This allows you to edit this next value…
  4. Open the “HardwareID” value and change it from “e_isa_up” to “acpipic_up” (followed by one line break, the cursor should be on the line directly under “acpipic_up”).
  5. Open Device Manager, open the “Computer” key, right-click “Standard PC”, and select “Update Driver”.
  6. You’ll pick from a list, don’t search, answer accordingly.
  7. Select the ACPI entry, which will now be shown in the Compatible Hardware list (joy!), thanks to the reg-tweak.
  8. Once again, if you actually CONTINUE with this, and your system is NOT originally an ACPI system, it very well may make it unbootable.
  9. Select “Next” and let the new HAL install.
  10. Reboot, and you’re done! Enjoy your ability to select the multi-processor HAL once again if you were curiously poking around. Since hal.inf locks you into only “compatible” HALs, you can now update again and select Multi-Processor PC if your system supports it, then you’ll have multi-cores again.

Hope this helps more people than it harms… please be careful with this. I’ll update this if that reinstall works and ACPI mode works after all… there might just be more stuff I need to tweak to make it work right. Not entirely clear on how the device-driver handling works… seems very strange that I would get a 0x7b BSOD instead of an ACPI-based BSOD… that tells me it’s not finding the HDC that it just booted with 10 minutes ago. That is, perhaps something is screwy with the hardware IDs it’s now detecting. I’ll look into it… but this should work for anyone that switched from ACPI to Standard PC and now needs a way back 😉

  • Or you could always make a backup Ghost image of your system before trying this.

  • falconfour

    Definitely. I considered that, but since it was such a fresh install on this system, and since I couldn’t access it over USB, I figure it wasn’t worth the headache. The huge BIOS jump (A02 to A12, even changed the Setup screen and startup screens) warranted a re-install by itself 😛

    But yeah, if you can boot F4UBCD, I highly recommend taking a backup archive of at least the files in the Windows folder: WindowsSystem32Config (whole folder), and WindowsSystem32: hal,dll, ntoskrnl.exe, and ntkrnlpa.exe. THEN perform the HAL tweak. Then restore those files if the system doesn’t boot, and you’ll be back to the way things were before the tweak (it only affects the registry and those three files).

    But this is still a lot better information than most of those ugly hacks out there (directly injecting hal.dll and friends, or editing hal.inf)…

  • Indeed.

    WinHTTracking your blog now, added to my knowledgebase. 😀

  • Mike

    This blog saved my a**. I have an all-USB only XP box and screwed up the ACPI setting in an attempt to optimize VirtualBox CPU utilization.

    This article + Linux Rescue w/PC RegEdit saved my bacon.


  • Thank you for this most excellent and informative post! I know it’s good to re-install Windows from time to time, but I didn’t want to be bothered this time. I searched many times for a better way to go about changing the HAL but only came up with the usual nonsense, until I happened upon your post. Followed your steps and I can change the HAL at will!

    FYI, I’ve read that Windows 2000 let you change the HAL without registry modification, but supposedly too many people were messing with it and screwing up their systems.

    I believe the 0x7b BSOD is a result of the BIOS update causing the IDE device to appear differently to Windows. In other words, you’d probably need have an updated driver loaded before booting into Windows after the BIOS update. I learned all of that fun stuff while figuring out how to enable AHCI without reinstalling.

  • PS: Has anyone figured out how to fix this on a machine that’s already messed up? I never found a working solution, unless what Mike mentioned, “Linux Rescue w/PC RegEdit” is a means of modifying the registry on a non-booting Windows installation?

    • falconfour

      My little flagship Boot CD whose blog articles put this blog on the map, “FalconFour’s Ultimate Boot CD”, happens to have a full blown offline Regedit launcher for offline Windows installs… among many, many other things. Linux is a cheap, pointless hack when trying to fix a Windows environment – Linux couldn’t even *write* to an NTFS drive until someone fully reverse-engineered NTFS over about 15 years! 🙂

      Using the BootCD, you can usually check the “hal.inf” file and replace those named files with the ones you want (like “halmacpi.dll” -> “hal.dll”, etc). There are 3 files if I remember correctly: hal.dll, ntoskrnl.exe, ntkrnlpa.exe, that need to be swapped-out in the System32 folder, to exchange kernels for ACPI/multiprocessor/uniprocessor systems.

      And the 0x7B BSOD is a complicated pain in the arse. Windows may even fail to recognize the identity of a “disk drive” device due to a drive UpperFilter or LowerFilter that fails to load or is in the wrong mode. Then you have to trace the driver path from the “Start = 0” mode device drivers, through the CurrentControlSetControlCriticalDeviceDatabase, through CurrentControlSetControlClass, and CurrentControlSetServices, to see that the disk controller (which you can identify using MiniXP’s CurrentControlSetEnum tree) is being loaded properly. Basically, if MiniXP can load the drive controller, you can trace down “how” it loaded by comparing MiniXP’s tree with your offline OS. And in 64-bit Windows, an unsigned UpperFilter or LowerFilter for a drive/controller device (antivirus, partitioning, encryption filters, etc) can cause a 0x7B unless you “Disable driver signature enforcement” and get rid of that driver (or unlink it from the Upper/LowerFilter values for those devices using an offline editor).

      Fun stuff, huh?

  • Richard Holt

    Thanks for this article. It’s really helped me out.

  • fenri

    Nice tutotial, thx. It didn’t work form me (07B) but probbaly something is wrong with motherboard in this case.
    You don’t need bootable pen for recovery. If you enable windows recovery console (winnt32 /cmdcons) before doing the trick, You can restore hal.dll and ntoskrnl.exe with expand command in case of BSOD 07B. Worked for me.

  • fenri

    Finally I solved my problem. It was not motherboard issue but lack of corect hal. (halaacpi.dll). It seems that this file comes with some other stuff and cannot be extracted with recovery console. What You can do is to make windows update (via installer) and hit F5 when it is said “hit F6 to install aditional SCASI or RAID…”. It allows You to choose HAL different then this previously installed.
    I have my ACPI and multithreading back, and all programs and settings are intact.
    Thx again for help, it put me on the right track.

  • Hal Warren

    I think the following link describes a novel way to do this task that worked well for me:

  • Erwinus

    Dude you are absolutely the greatest! This works for me. My Windows XP was from another asus laptop that has died lately and want to use this image on a old laptop to rescue my WinXP installation (and to be able to access all my programs and settings before i buy a new one).

    Because the ACPI stuff does not operate correctly on the died laptop i decide to change it to standard-pc but cause problems (driver problems) on this old laptop. Changing it back to ACPI did the trick! Thank you Thank you sooooo much!

    It takes me hours to find the right solution for my problem wit BSOD’s, but man, if i saw you today, i want to buy you a beer!

  • roger

    enter acpiapic_mp for multiprocessor like Pentium 4 3GHz

  • Gregg Eshelman

    Very useful information on switching HALs. 🙂

    Something to be aware of is that some old servers have BIOS code deliberately designed to block Windows XP Pro from being able to use more than one CPU. I was given some older Compaq dual PIII Xeon servers. Installed XP Pro because it supports up to 4 CPUs but it’d only install the single processor HAL. I tried the setup switches to force it to multiprocessor and it’d only make it partway through setup before failing. I tried forcibly switching to multiprocessor after installing and it’d bluescreen.

    I had a Dell Precision 610 Workstation, no problem at all with XP Pro and its dual CPUs, so I figured it should work on the Compaq server. I bet there are Dell servers with a similar XP limit built in.

    I suspect collusion between HP/Compaq and Microsoft, or threats from Microsoft to not sell them Windows Server licenses, if they didn’t hobble XP multi-CPU on their servers.

    If one could tart up one of those servers enough to shoehorn Vista 32bit on, I wonder if it too would be hobbled to a single CPU?

  • Whats up very cool blog!! Man .. Beautiful .
    . Superb .. I’ll bookmark your web site and take the feeds also? I’m satisfied to search out numerous useful
    info here within the publish, we’d like develop extra techniques in this regard, thank you for sharing. . . . . .

  • Thanks for your personal marvelous posting! I quite enjoyed reading it, you might be a great author.
    I will always bookmark your blog and will eventually come back
    sometime soon. I want to encourage yourself to continue your great writing, have a
    nice morning!

  • which software do you use to create your multi boot disk?

  • David Lauder

    Thanks, that’s brilliant. I was moving XP from an Intel D865 P4 mobo with bad capacitors to a mobo with AMD Athlon 64. After much BSOD looping, I finally managed to remove Intel IDE (rename intelide.sys!). Then I set Standard PC by mistake before realising that I had fallen into a trap. Your ‘clean’ way to switch back to ACPI worked a treat.

  • Gregg Eshelman

    Can this be used to do something like force an old dual P3 Compaq server to allow both CPUs to be used by XP? Some of those servers have something that blocks any non-server version of Windows from using the second CPU.

  • excellent issues altogether, you just gained a new reader.
    What could you recommend about your post that you made a few days ago?
    Any certain?

  • This website truly has all the information and facts I needed concerning this subject
    and didn’t know who to ask.

  • Heya i’m for the first time here. I came across this board and I find It
    truly useful & it helped me out much. I hope to
    give something back and aid others like you helped me.

  • Pingback: Fix Hal.inf Errors - Windows XP, Vista, 7 & 8()