Jump to content
Sign in to follow this  

Change HAL sysprep mini-setup.

Recommended Posts


I needed some code that would get the serial number and model during the sysprep mini-setup. I usually just use WMI but it didn't work during this time. I have to change the HAL on systems during this period because after it finished mini-setup it won't boot if the wrong HAL is used.

I use cpuz from the link below. When I run it I use a command line switch to output its contents to a txt file. I then use autoit to parse this file for what I want. After this you run the script below and If you display $Serial[2] or $Model[2] you will get the model and the serial without spaces.


From this I compiled a list of the models for the different systems and what HAL they use. I don't have this code included but the basic part of getting the model and serial was hard to do during sysprep mini-setup without WMI since everything for it isn't loaded yet. Based on the model and my list that goes with the different hals I have the script modify the boot.ini to include the different hal. I have all the HALs copied to my system32 directory so that I am able to point the different boot.ini's

I haven't seen anyone with a better solution then this. Some of you are lucky that you have a few like hals that can work good together and sysprep does automatically but my in my settings I have so many and I don't want to manage all those images.


"CPUZ.exe -txt=c:\systeminfo"


#include <Array.au3>
#include <file.au3>
Dim $aRecords
If Not _FileReadToArray("c:\system2.txt",$aRecords) Then
;~ If Not _FileReadToArray("c:\systemlog.txt.txt",$aRecords) Then

   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)

$Serial_Search = _ArraySearch($aRecords, "  serial      " , 0, 0, 0, 1)
$Model_Search = _ArraySearch($aRecords, "   product     " , 0, 0, 0, 1)

If @error Then
    MsgBox(0, "Info", "The Serial and Model was not found!")
;~  MsgBox(0, "Info", "Serial and Model was Found!" )

$Serial_NOSPC = StringStripWS ($aRecords[$Serial_Search], 8)
$Model_NOSPC = StringStripWS ($aRecords[$Model_Search], 8)
$Serial = StringSplit($Model_NOSPC, "product", 1)
$Model = StringSplit($Serial_NOSPC, "serial", 1)

MsgBox(4096, "", $Serial[2])
MsgBox(4096, "", $Model[2])

[boot loader]
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="XP Pro (Last Configuration)"                                     /noexecute=optin /fastdetect /HAL=hal.dll /KERNEL=ntoskrnl.exe
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="XP Pro (ACPI Multiprocessor PC) for multi-core, hyperthreading"   /noexecute=optin /fastdetect /HAL=H-AMPS.DLL /KERNEL=H-AMPS.exe
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="XP Pro (ACPI Uniprocessor PC) for single-core, no hyperthreading" /noexecute=optin /fastdetect /HAL=H-AUNI.DLL /KERNEL=H-AUNI.exe
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="XP Pro (ACPI PC) for most compatability on ACPI computers"     /noexecute=optin /fastdetect /HAL=H-ACPI.DLL /KERNEL=H-ACPI.exe
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="XP Pro (MPS Multiprocessor PC) for multi-core Xeons"             /noexecute=optin /fastdetect /HAL=H-MPSM.DLL /KERNEL=H-MPSM.exe
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="XP Pro (MPS Uniprocessor PC) for single-core Xeons"               /noexecute=optin /fastdetect /HAL=H-MPSU.DLL /KERNEL=H-MPSU.exe
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="XP Pro (Standard PC) for old non-ACPI computers"                 /noexecute=optin /fastdetect /HAL=H-STD.DLL  /KERNEL=H-STD.exe

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  


Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.