HAL(Hardware Abstraction Layer),中文叫做硬件抽象层,是整个NT核心(包括了2k和XP,Vista的情况似乎复杂些,所以请不要把本文提及的任何操作用于Vista)的最底层,负责架起核心和驱动程序,直接和硬件对话。

为
NT核心引入HAL的最大好处就是提高了NT的可移植性。过去98/95受制于DOS的内核,首先就不支持双核/双CPU,而且对ACPI、APCI的支
持也并不好。而NT引入了HAL后,只需要根据不同的硬件配置更换相应的HAL就能做到完美的支持。NT甚至可以移植到Alpha、PowerPC、
IA-64等非x86平台。
由于是操作系统的最底层,因此这个东西一旦出错将会很麻烦。它启动时是第一个被装载的系统组件,很多时候启动
时出现的HAL相关的错误(例如NTOSKRNL.EXE损坏/丢失、HAL.DLL损坏/丢失)是由于BOOT.INI的语法不正确所致,出现类似的情
况时请优先检查boot.ini是否正确。
===========================================
本文的主题:更换Windows的HAL
可以达到的效果:
1.部分主板对APIC、ACPI支持不佳时,强制系统使用APIC或者ACPI可能会造成不稳定,此时可能要考虑使用Standard PC
2.一些克隆版的Windows因为要保持其兼容性而采用了ACPI PC或者Standard PC的HAL,导致在双核的硬件下安装完之后只能使用一个核心
3.Windows下双核与单核的切换,可以缓解部分程序在双核下的兼容性问题,不过这只是权宜之策=============================================
x86 Windows一共有八个HAL,这些HAL可以在Windows的安装盘i386下找到,而我们一般涉及到的主要有:
HAL.DLL(HAL.DL_)——Standard PC
HALACPI.DLL(HALACPI.DL_)——ACPI PC
HALAPIC.DLL(HALAPIC.DL_)——APIC PC
HALAACPI.DLL(HALAACPI.DL_)——ACPI Uniprocessor PC(大部分单核系统的HAL)
HALMACPI.DLL(HALMACPI.DL_)——ACPI Multiprocessor PC(支持双核、HT的系统的HAL)
其余三个一般极少遇到或者根本不会遇到。
而它们对应的NTOSKRNL.EXE和NTKRNLPA.EXE有两个——单核与多核
NTOSKRNL.EXE(NTOSKRNL.EX_)——单核心
NTKRNLMP.EXE(NTKRNLMP.EX_)——多核心
NTKRNLPA似乎是安装的时候才生成,在安装盘中找不到源文件
查看自己的系统安装的HAL:硬件管理器-计算机,显示的“ACPI Multiprocessor PC”就是所安装的HAL。而我们更换HAL就是要更换这个“设备的驱动程序”。
另外如果出现HAL.DLL损坏时也要根据你的系统原本的HAL来选用合适的HAL.DLL,不然的话可能会导致系统无法启动等严重错误。以上几个HAL*.DLL在安装到系统时都要更名为HAL.DLL。=============================================
用WinRAR简单的双核下的系统多线程表现,以验证等下强制改为单核时是否真的有效。


=============================================
我们先要做的是备份当前的HAL:复制Windows\SYSTEM32下面以下三个文件出来存放好:
HAL.DLL
NTOSKRNL.EXE
NTKRNLPA.EXE然后开始更换HAL





更换完毕需要重启两次,然后系统就变成了单核心的了。
注意:由于现阶段Intel和AMD都否认可以让双核CPU只有一个核心工作,因此即使Windows只能使用一个核心,硬件上另一个核心仍然在空载运作的,既是还在继续耗能。因此这样做法只是权宜之策。============================================
我们再用WinRAR测试一下是否只有一个核心被利用了


确实只有一个核心在工作……
=================================================
再从单核改为双核则遇上了麻烦……
用前面的常规方法却发现没有了“ACPI Multiprocessor PC”的选项!因此我们只能使用非常规的方法。
注意:非常规方法有一定风险,所以请做好数据备份等抢救工作!========================================================
方法一:使用Windows的回滚驱动程序功能

在这个位置选择“返回驱动程序”,然后系统提示重启。但是重启后无法进入系统……

不用慌张,启动时按F8,使用最后一次正确配置就能进入系统了。然后系统就会自动更新HAL并且再次提示重启。再次重启后就恢复ACPI Multiprocessor PC了。
========================================================
方法二:暴力更换HAL
准备一张WinPE(或者能读取C盘的急救用启动盘之类的),在这里偶使用了VISTA安装DVD本身带的WinPE

进入命令提示符模式

把之前备份的三个HAL文件(HAL.DLL、NTOSKRNL.EXE、NTKRNLPA.EXE)复制回system32里头。
(偶这里的三个文件是XP安装盘的原始文件,复制的时候需要改名)
然后重启进入系统就会自动进行驱动更新,更新完毕再重启一次就恢复到ACPI Multiprocessor PC了。
===========================================================
题外话:
Vista的安装DVD光盘其实除了安装系统外还有个非常好用的功能——WinPE
WinPE就是一个精简的Windows,其命令提示符不仅可以访问NTFS的分区,而且还能运行notepad或者是不少绿色软件,是拿来修复系统的好帮手

Vista安装DVD启动后进入上面的界面后选择修复计算机

检测硬盘中安装的Vista,如果没有的话就是空白,有的话会有个列表,不过我们不需要自动修复,所以直接选择下一步

Vista提供了五个修复工具,其中四个是针对Vista的,我们用不上,只有第五个是我们需要的——命令提示符

进入命令提示符,它能够提供绝大部分的CMD命令,还能运行诸如WinRAR之类的软件,甚至可以启动安装Windows XP,比起DOS要强大多了