- What Is The HAL Not Who?
If you do not know what the HAL is please see this Microsoft KB article or this WikiPedia article to get an overview of the HAL. I will not go into much detail as to what the HAL is and how it is used so please research this before messing with it, or if you have some test computers to clone to mess with it and see what happens and if you can find the right mix by guessing.
- UpdateUPHAL, UpdateHAL And Their Purposes
The UpdateUPHAL and UpdateHAL sections in the [Unatennded] section of sysprep.inf can be very confusing and extremely hard to research. Microsoft offers some basic explanations of this value on their TechNet site but still leaves most people questioning what it is they need to be doing with the keys and what the keys even do.
Basically these two values in sysprep.inf allow SysPrep to upgrade or downgrade your HAL cloning to hardware of a different HAL version. As I mentioned in my first part of this series it is always best to pick older hardware and clone to newer and not vice-verse, this is one reason why you do that. This is personal preference since you can go backwards but I have better luck moving to newer HAL's and not older. By specifying one of these keys you can move an image from a non ACPI computer to a Multiprocessor ACPI computer or a Multiprocessor ACPI down to a UniProcessor ACPI computer.
UpdateUPHal will install a UniProcessor HAL while UpdateHAL will install a Multiprocessor HAL. When cloning to a PC you need to install the same HAL using SysPrep as Windows XP uses when installing it from the CD. If you need to find what version of HAL a computer is using can see this Microsoft KD article for guidance on finding your currently running HAL.
There have may people that have so many issues using this key value they end up resorting to just overwriting the HAL after cloning with the proper HAL. This method does work but you can use whatever method you prefer. I will go over both the UpdateUPHAL value in sysprep.inf and also the manual way of replacing the HAL in this article.
- Using UpdateUPHAL and UpdateHAL Within SysPrep.inf
UpdateUPHAL values within sysprep.inf require you to specify a Unprocessed HAL to install. The list of available UniProcessor HAL's that can be used with UpdateUPHAL are:
UpdateUPHAL = "ACPIAPIC_UP,%WINDIR%InfHal.inf" UpdateUPHAL = "ACPIPIC_UP,%WINDIR%InfHal.inf" UpdateUPHAL = "MPS_UP,%WINDIR%InfHal.inf"
UpdateHAL values within sysprep.inf require you to specify a MultiProcesser HAL to install. The list of available MultiProcessor HAL's that can be used with UpdateHAL are:
UpdateHAL = "ACPIAPIC_MP,%WINDIR%InfHal.inf" UpdateHAL = "MPS_MP,%WINDIR%InfHal.inf" UpdateHAL = "SYSPRO_MP,%WINDIR%InfHal.inf"
Make sure you are picking the proper HAL's for your computers as this can BSOD your cloned computers or give you extreme performance hits if the wrong one is picked.
- Installing The HAL By Hand
Note: I have seen this process done by someone else before but have never tried this myself so if you can elaborate on it let me know, otherwise please don't ask me for help.
Edit (3/18/08): I have tried this process and it did work for me, the only issue was that I needed to boot to safe mode once to get the OS to stop BSODing. Booting to safe mode was all it took, nothing else, so I would imagine that you could find what was causing this boot to safe mode and make this a feasible solution. If anyone is or has tried this please let me know how it went for you.
Another way to change HAL's is by just extracting the HAL you want directly onto the OS and rebooting. I have been looking for more info on this process and have found two resources for you but again I have not tried this so proceed cautiously.
As I have not done this process myself and have only seen it done I will leave the research up to you on how to complete this successfully, but please let me know if you have success doing this.
- UniProcessor to Multiprocessor Warning
When using a UniProcessor as your base image and using UpdateHAL sysprep will always pick the MultiProcessor HAL. This is a know issue and if you do use a MultiProcessor HAL on a UniProcessor system you can notice performance hits but this is not always the case. Here are a few resources to look into if using a MultiProcessor HAL on a UniProcessor: Microsoft KB 811366, 309283
To avoid this issue many people choose to use a MultiProcessor base machine and clone to a UniProcessor and use the appropriate UpdateUPHAL value. People have greater success going backwards then forwards but this is all a matter of preference for the most part.
- The Different HAL's
Although I only mention 6 of these in the above documentation there are in fact 7 listed in the hal.inf file. I have never seen E_ISA_UP used in a UpdateUPHAL value but I would imagine it is a valid value.
|HAL Name||PC Type||Description|
|E_ISA_UP||Standard Computers||Standard PC|
|ACPIPIC_UP||ACPI PIC-based PC||Advanced Configuration and Power Interface (ACPI) PC|
|ACPIAPIC_UP||ACPI APIC-based PC (UP)||ACPI Uniprocessor PC|
|ACPIAPIC_MP||ACPI APIC-based PC (MP)||ACPI Multiprocessor PC|
|MPS_UP||MPS UP PC||MPS Uniprocessor PC|
|MPS_MP||MPS MP PC||MPS Multiprocessor PC|
|SYSPRO_MP||Compaq SystemPro (MP) HAL||Compaq SystemPro Multiprocessor or 100% Compatible|