2008年11月16日星期日

Windows 2000/XP/2003操作系统所支持的计算机类型(HAL)及相关内核文件的对应关系

作者:Climbing(xclimbing@msn.com)
版本:2.1b
创建日期:2004年12月6日
最后修改日期:2005年3月1日

============
致谢
============
这篇总结文章的写成,主要参考了死性不改网友所发布的用于制做万能克隆的S&R&S系列中的相关批处理文件,在此表示万分感谢!
同时感谢无忧启动论坛的hyne网友(他已经沉默了很长时间了),他是万能克隆技术的先驱者之一,本文章引用了很多他制做的计算机类型选择程序(acpi.exe)中的说明,这里一并表示感谢。
感谢JUJUMAO论坛木鸟网友对本文作出的有益补充!


================
文章正文
================


1) 所谓的计算机类型(设备管理器 -> 计算机)是通常我们所说的计算机的电源类型,也就是Windows系统中的HAL类型。


2) 所谓的内核文件有两个,一个是hal*.dll,另一个是NT的内核文件(NT Kernel),这些文件都可以从%windir%\Driver Cache\I386目录下的*.cab文件中解出来,至于是哪个cab文件,当然跟你的系统打上的Service Pack有关系,例如你打了SP4补丁,那么就是sp4.cab文件,如果没有打补丁,那就是driver.cab文件,详细的可以参考下面的批处理程 序。


3) 下面所说的死性不改名称是指死性不改网友给对应的文件起的名字,由于具有相当程度的普遍性,在这里一并列出,方便大家使用和参考。


4) 硬件ID,即HardwareID,是指某种计算机类型所对应的ID,这是一一对应的关系,更新某计算机的硬件ID就意味着同时更新计算机类型。后面将提 供使用devcon和rundll32两种办法更改硬件ID的方法,但这两种办法必须运行于当前的Windows环境下(而不是第三方的纯DOS环境 等)。


其对应关系如下:


计算机类型               HAL文件(死性不改名称)              Kernel文件(死性不改名称)    硬件ID(HardwareID)
Standard                 hal.dll(hal.chk)                   ntoskrnl.exe(sxbg.chk)        E_ISA_UP
ACPI Uniprocessor        halaacpi.dll(acpu.chk)             ntoskrnl.exe(sxbg.chk)        ACPIAPIC_UP
ACPI Multiprocessor      halmacpi.dll(acpm.chk)             ntkrnlmp.exe(ntos.chk)        ACPIAPIC_MP
MPS Uniprocessor         halapic.dll(mpsu.chk)              ntoskrnl.exe(sxbg.chk)        MPS_UP
MPS Multiprocessor       halmps.dll(mpsm.chk)               ntkrnlmp.exe(ntos.chk)        MPS_MP
Compaq SystemPro         halsp.dll(com.chk)                 ntkrnlmp.exe(ntos.chk)        SYSPRO_MP
ACPI                     halacpi.dll(acpi.chk)              ntoskrnl.exe(sxbg.chk)        ACPIPIC_UP


1、上述的七种计算机类型的详细名字顺序对应下面的七个名字(我假设你了解每种计算机类型代表哪一类的计算机)。
A. Standard PC
B. ACPI Uniprocessor PC
C. ACPI Multiprocessor PC
D. MPS Uniprocessor PC
E. MPS Multiprocessor PC
F. Compaq SystemPro Multiprocessor or 100% Compatible
G. Advanced Configuration and Power Interface (ACPI) PC


2、更改计算机类型的方法。


下面提供了四种更改计算机类型的方法,在后两种方法中,推荐使用RunDll32方式。


2.1 通过改名相关文件直接更改计算机类型。


首先大家要明确,上述的所有相关文件都应该是保存在%windir%\system32目录下(这里的%windir%表示Windows的安装目 录)。选择某种计算机类型就要将相应的HAL部分的文件改名为hal.dll,而Kernel部分的文件改名为ntoskrnl.exe。以ACPI Multiprocessor为例:将halmacpi.dll复制到%windir%\system32目录下并改名为hal.dll(DOS命 令:copy /y halmacpi.dll %windir%\system32\hal.dll),将ntkrnlmp.exe复制到%windir%\system32目录下改名为 ntoskrnl.exe(DOS命令:copy /y ntkrnlmp.exe %windir%\system32\ntoskrnl.exe),由于更改的是Windows的内核文件,这种更改方法不能在Windows环境正在运 行的情况下进行,但可以在纯DOS环境下或者系统恢复控制台下运行。


2.2 在boot.ini中通过Windows系统的启动参数直接指定计算机类型。


如果你在恢复克隆时选错了计算机类型并且你知道应该使用什么样的计算机类型(或者你不知道该使用什么类型而想多试几种类型),那么你可以直接在 Boot.ini中指定要使用的计算机类型对应的Hal及Kernel文件,以ACPI Uniprocessor PC类型计算机为例:



-


multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Professional(ACPI Uniprocessor)" /hal=halaacpi.dll /kernel=ntoskrnl.exe


对应死性不改网友的文件命名法,你可以这样写boot.ini的启动项:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Professional(ACPI Uniprocessor)" /hal=acpu.chk /kernel=sxbg.chk


2.3 使用rundll32命令更改计算机类型。这种改法的前提是你能够进入Windows系统,例如你选择成了Standard PC,虽然能够进入系统,但计算机类型却不对的情况。
请 将下面的代码保存为ChangeHalByRundll.cmd,用法请参考批处理中的说明。另外,批处理中使用的reg.exe是命令行方式操作注册表 的程序,在Windows XP/2003系统中内置了该程序,而Windows 2000中却没有,你可以将XP/2003下的reg.exe复制到2000中使用。

以下内容为程序代码:

@echo off
:: =========================================================================================================
:: ChangeHalByRundll.cmd 使用Windows的rundll32命令来更改计算机类型的批处理
:: 用法: ChangeHalByRundll <硬件ID>
::   <硬件ID>是指你想更改成的计算机类型所对应的HardwareID。
:: 例如:你想将计算机改成ACPI Uniprocessor类型,那么使用命令:ChangeHalByRundll ACPIPIC_UP
:: 计算机类型与硬件ID的对应关系如下:
:: 计算机类型 硬件ID(HardwareID)
:: Standard E_ISA_UP
:: ACPI Uniprocessor ACPIAPIC_UP
:: ACPI Multiprocessor ACPIAPIC_MP
:: MPS Uniprocessor MPS_UP
:: MPS Multiprocessor MPS_MP
:: Compaq SystemPro SYSPRO_MP
:: ACPI ACPIPIC_UP
:: =========================================================================================================

if %1#==# goto _usage
set HardIDs=E_ISA_UP ACPIPIC_UP ACPIAPIC_UP ACPIAPIC_MP MPS_UP MPS_MP SGI_MPS_MP SYSPRO_MP
echo %HardIDs% | find /i "%1" > nul
if errorlevel 1 goto _usage


:_update
REG.EXE DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E966-E325-11CE-BFC1-08002BE10318}\0000" /f
REG.EXE DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E966-E325-11CE-BFC1-08002BE10318}\0001" /f
REG.EXE DELETE "HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E966-E325-11CE-BFC1-08002BE10318}\0000" /f
REG.EXE DELETE "HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E966-E325-11CE-BFC1-08002BE10318}\0001" /f
REG.EXE DELETE "HKLM\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL" /f
REG.EXE DELETE "HKLM\SYSTEM\CurrentControlSet\Enum\Root\PCI_HAL" /f
rundll32.exe setupapi,InstallHinfSection %1_HAL 131 %windir%\inf\hal.inf
cls
echo.
echo 恭喜,计算机类型更改完毕,请重新启动计算机使更改生效,系统会重新扫描硬件!
echo 按任意键退出...
pause >nul
goto _quit


:_usage
cls
echo.
echo 错误:你没有指定计算机类型对应的硬件ID或者你指定的硬件ID不存在。
echo 用法: %0 ^<硬件ID^>
echo.
echo 计算机类

没有评论:

免责声明

1、本人是文盲,以上内容文字均不认识,也看不懂是什么意思(包括但不限于对所以上之内容的识别、阅读、理解、分析、记忆等);

2、本人过去、现在以及将来都不认识本文中提及当事人,且自古以来与该相对人无利益关系;

3、本人昨天、今天以及明天都没有或者不准备去本文所述地点。本文表述之事与本人无关。

4、本人在此发文(包括但不限于汉字、拼音、拉丁字母、斯拉夫字母、日语假名、阿拉伯字母、单词、句子、图片、影像、录音、以及前述之各种任意组合等等)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对文中观点。如需要详查请直接与键盘发明者及生产厂商法人代表联系;

5、人生有风险,上网需谨慎。本文不暗示、鼓励、支持或映射读者作出生活方式、工作态度、婚姻交友、股票债券买卖、子女教育的积极或消极判断。未成年人请在监护人陪同下阅读本文。无完全民事行为能力者,请立即关闭网页,并用20%高锰酸钾+75%乙醇对键盘、硬盘、电压插座、显示器、鼠标、cpu进行灌溉消毒;

6、如本人留言违反国家有关法律,请网络管理员及时删除本文,本人保留继续发文的权利;

7、因删贴不及时所产生的任何法律(包括宪法、加法、减法、乘法、除法、剑法、拳法、脚法、指法、民法、刑法、书法、公检法、基本法、劳动法、婚姻法、输入法、没办法、国际法、今日说法、吸星大法及文中涉及或可能涉及以及未涉及之法,各地治安管理条例)纠纷或责任本人概不负责;

8、本人谢绝任何跨省(包括但不限于跨国、跨洲、跨星球、跨星系)追捕行为。确因不抓不足以平民愤,或不抓就领不到薪水养家户口的公职人员,建议携带工作证、身份证、结婚证/离婚证、独生子女证、健康证、暂住证、毕业证、边防证、县以上政府机关出具的介绍信温情操作。抓捕按照以下排序倒序:作者、原作者以及网络管理员以及网络运行商、电信运营商、电力供应商、电脑生产销售商;

9、如回复内容导致回复者或第三方、第四方、第N次方怀孕,本人愿配合做亲子鉴定。