Uniprocessor HAL to multiprocessor HAL in Windows

Posted on Mon 17 October 2011 in Tools

The other day, I decided to “upgrade” my virtual Windows 2003 server by doubling the memory size and adding an extra CPU. The memory was not an issue, of course, but the extra CPU turned out to be. Although Device Manager picked up the correct number of CPUs under Processors, the HAL entry under Computer was still listed as “Advanced Configuration and Power Interface (ACPI) PC.” Opening Task Manager confirmed that only one CPU was indeed being used. Back in Device Manager, I found no easily accessible option to upgrade the HAL.

After googling a bit, I encountered this wonderful blog post, which saved my day!

Essentially, do as follows:

  1. Download devcon.exe [microsoft.com].
  2. Copy the script below and save it as a cmd file (say, upgradehal.cmd).
  3. Run the script!

All the normal HAL upgrade warnings apply, of course. Since my server was running as a VM, I simply took a snapshot before upgrading.

The script:

@echo off
@title "Upgrading to ACPI Multi-Processor HAL.."
cls

echo ====================================================
echo Upgrading to ACPI Multi-Processor HAL..
echo ====================================================
echo.
echo please wait..

devcon sethwid @ROOT\PCI_HAL\0000 := !E_ISA_UP !ACPIPIC_UP !ACPIAPIC_UP !ACPIAPIC_MP !MPS_UP !MPS_MP !SGI_MPS_MP !SYSPRO_MP !SGI_MPS_MP > nul
devcon sethwid @ROOT\ACPI_HAL\0000 := !E_ISA_UP !ACPIPIC_UP !ACPIAPIC_UP !ACPIAPIC_MP !MPS_UP !MPS_MP !SGI_MPS_MP !SYSPRO_MP !SGI_MPS_MP > nul
devcon sethwid @ROOT\PCI_HAL\0000 := +ACPIAPIC_MP > nul
devcon sethwid @ROOT\ACPI_HAL\0000 := +ACPIAPIC_MP > nul
devcon update %windir%\inf\hal.inf ACPIAPIC_MP > nul

echo.
echo ====================================================
echo Script Completed: press any key to reboot..
echo ====================================================

pause > nul

devcon reboot

After the reboot, the HAL entry under Computer in Device Manager now read “ACPI Multiprocessor PC,” and Task Manager showed two CPUs being used. Voilà! :-)