以下是HAL硬件ID、硬件抽象层dll文件、计算机类型的对应关系(以及还需要的两个文件)
E_ISA_UP = hal.dll = "Standard PC"(ntoskrnl.exe+ntkrnlpa.exe)
ACPIPIC_UP = halacpi.dll = "Advanced Configuration and Power Interface (ACPI) PC"(ntoskrnl.exe+ntkrnlpa.exe)
ACPIAPIC_UP = halaacpi.dll = "ACPI Uniprocessor PC"(ntoskrnl.exe+ntkrnlpa.exe)
ACPIAPIC_MP = halmacpi.dll = "ACPI Multiprocessor PC"(ntkrnlmp.exe+ntkrpamp.exe)
MPS_UP = halapic.dll = "MPS Uniprocessor PC"(ntoskrnl.exe+ntkrnlpa.exe)
MPS_MP = halmps.dll = "MPS Multiprocessor PC"(ntkrnlmp.exe+ntkrpamp.exe)
SYSPRO_MP = halsp.dll = "Compaq SystemPro Multiprocessor or 100% Compatible"(ntkrnlmp.exe+ntkrpamp.exe)
UP代表单处理器,MP代表多处理器,其中用于多处理器的ntkrnlmp.exe和ntkrpamp.exe,实际安装时会改名成ntoskrnl.exe和ntkrnlpa.exe
-------------------------------------------------------------------------------------------
假设你不知道当前的计算机类型。
登陆OOBC后
执行regedit
选择要登陆的系统
执行:cd machine\system\controlset001\enum\root\acpi_hal\0000
如果此键值不存在,则执行cd machine\system\controlset001\enum\root\pci_hal\0000
执行:rtype hardwareid
(这句的意思是显示当前注册表分支下的hardwareid这个键名的值)
即可得出当前系统正确的HAL硬件ID(因为OOBC每次启动时都会判别计算机类型并存在自己注册表里)
退出注册表操作,执行rexit
之后,就可以通过上面所列出的对应关系,将对应的硬件抽象层dll文件改名复制到%systemroot%\system32\hal.dll
比如:copy c:\hal\halacpi.dll c:\winnt\system32\hal.dll
然后再复制另外两个文件,如果检测到的是多处理器HAL硬件ID,把ntkrnlmp.exe和ntkrpamp.exe名成ntoskrnl.exe和ntkrnlpa.exe复制到%systemroot%\system32
执行reboot重启
------------------------------------------------------------------------------
进入系统后,可以手工删除多余的计算机类型,也可以做成批处理用如下的命令删除(需要有devcon)
devcon.exe remove E_ISA_UP
devcon.exe remove ACPIPIC_UP
devcon.exe remove ACPIAPIC_UP
devcon.exe remove ACPIAPIC_MP
devcon.exe remove MPS_UP
devcon.exe remove MPS_MP
devcon.exe remove SYSPRO_MP
这只会删除多余的,而不会删除当前正在使用中的。
----------------------------------------------------------------------------------
以下是各HAL的兼容性:
E_ISA_UP除自身之外可用于以下类型计算机:MPS_UP, MPS_MP,ACPIPIC_UP, ACPIAPIC_UP, ACPIAPIC_MP
ACPIPIC_UP除自身之外可用于以下类型计算机:ACPIAPIC_UP, ACPIAPIC_MP
ACPIAPIC_UP只能用于自身
ACPIAPIC_MP除自身之外可用于以下类型计算机:ACPIAPIC_UP
MPS_UP除自身之外可用于以下类型计算机:ACPIAPIC_UP
MPS_MP除自身之外可用于以下类型计算机:MPS_UP, ACPIAPIC_MP, ACPIAPIC_UP
SYSPRO_MP只能用于自身
-----------------------------------------------------------------------------------以上内容均来自hal.inf
-----------------------------------------------------------------------------------
那么可以用ACPI Uniprocessor PC或ACPI Multiprocessor PC的计算机却用Advanced Configuration and Power Interface (ACPI) PC或Standard PC,会有什么后果呢?
不会有什么后果,只会有一些影响。
以下引用Microsoft Windows企业部署工具指南中"减少有多个处理器的计算机的主映象数量"这一节中的原文:
APIC 系统的可用中断多于使用处理器中断控制器 (PIC) 的单处理器系统。结果是,带有 APIC HAL 的计算机:
响应时间更快。
能支持更多的硬件设备。
但是我认为CPU主频上G的电脑,使用者可能不会发现速度上有什么差别。
-----------------------------------------------------------------------------------
那么单处理器系统使用多处理器系统的HAL会有什么后果呢?(即把MP用在UP上)
既然这是在兼容性上被允许的,所以我认为也不会有什么严重的后果。
以下引用Microsoft Windows企业部署工具指南中"减少有多个处理器的计算机的主映象数量"这一节中的原文:
不要在目标 UP 计算机上使用包含 UpdateHAL 的 Sysprep.inf 文件,因为 UpdateHAL 将在目标计算机上加载 MP HAL,而不论目标计算机是 UP 计算机还是 MP 计算机。UP 计算机上的 MP 内核将显著降低计算机的性能。