[这个贴子最后由benjaminwan在 2004/05/31 12:30pm 第 3 次编辑]
[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述
[2]让你的Ghost XP更加自动化---计算机类型自动检测的实现
[3]让你的Ghost XP更加自动化---dllcache的重建
OOBC就是O&O BlueCon
它的功能比Microsoft的系统修复控制台强大,特别是它还支持注册表的操作。
而实际上OOBC和系统修复控制台十分相似。
XP的系统修复控制台比OOBC多了如下几个文件
KBDAL.DLL<<--这些是键盘布局文件
KBDBE.DLL
KBDBLR.DLL
KBDBR.DLL
KBDBU.DLL
KBDCA.DLL
KBDCR.DLL
KBDCZ.DLL
KBDCZ1.DLL
KBDDA.DLL
KBDDV.DLL
KBDES.DLL
KBDEST.DLL
KBDFC.DLL
KBDFI.DLL
KBDFR.DLL
KBDGKL.DLL
KBDGR.DLL
KBDGR1.DLL
KBDHE.DLL
KBDHE220.DLL
KBDHE319.DLL
KBDHELA2.DLL
KBDHELA3.DLL
KBDHU.DLL
KBDHU1.DLL
KBDIC.DLL
KBDIR.DLL
KBDIT.DLL
KBDIT142.DLL
KBDLA.DLL
KBDLT.DLL
KBDLV.DLL
KBDLV1.DLL
KBDNE.DLL
KBDNO.DLL
KBDPL.DLL
KBDPL1.DLL
KBDPO.DLL
KBDRO.DLL
KBDRU.DLL
KBDRU1.DLL
KBDSF.DLL
KBDSG.DLL
KBDSL.DLL
KBDSL1.DLL
KBDSP.DLL
KBDSW.DLL
KBDTUF.DLL
KBDTUQ.DLL
KBDUK.DLL
KBDUR.DLL
KBDUSL.DLL
KBDUSR.DLL
KBDUSX.DLL
KBDYCC.DLL
KBDYCL.DLL
migrate.inf
除此之外,OOBC和XP的系统修复控制台还有如下几个文件的差别:
smss.exe
OOBC.LIC
OOBCFT.SYS
OOBCTM.DLL
OOBCTM.SYS
winnt.sif
AUTOCONV.EX_
HPT3XX.SY_
所以安装了系统修复控制台后可以修改如上文件,把系统修复控制台改造成OOBC
-----------------------------------------------------------------------
在你系统文件丢失,或测试时不小心把计算机类型安装错导致不能启动时,OOBC就可以派上用场了。
而且OOBC的大小只有7M多,完全可以集成到万能Ghost XP中(可以成为Ghost XP的第二启动项一起放在.gho文件中,也可以放在光盘上)
当然,PE也可以,就是占用空间大了点。
------------------------------------------------------------------------
许多启动盘集成了OOBC,但似乎用的人不多。
========================================================
|接下来稍微介绍一下OOBC下手工检测和更改计算机类型的方法|
========================================================
OOBC下不能expand,所以以下步骤必须在Windows下执行
可以将如下命令存为.cmd文件并执行,用于把当前系统所有的硬件抽象层文件提取到c:\hal
if not exist c:\hal mkdir c:\hal
echo driver.cab>>c:\driver.txt
echo sp1.cab>>c:\driver.txt
echo sp2.cab>>c:\driver.txt
echo sp3.cab>>c:\driver.txt
echo sp4.cab>>c:\driver.txt
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:hal.dll c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:halaacpi.dll c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:halacpi.dll c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:halapic.dll c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:halmacpi.dll c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:halmps.dll c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:halsp.dll c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:ntoskrnl.exe c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:ntkrnlpa.exe c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:ntkrnlmp.exe c:\hal
FOR /F "usebackq" %%i IN (c:\driver.txt) DO if exist "%systemroot%\Driver Cache\i386\%%i" expand "%systemroot%\Driver Cache\i386\%%i" -f:ntkrpamp.exe c:\hal
del c:\driver.txt
-------------------------------------------------------------------------------------------------
以下是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 内核将显著降低计算机的性能。
"显著降低计算机的性能"这句话真的有点骇人听闻,
由于我的计算机类型是Advanced Configuration and Power Interface (ACPI) PC
所以我无法验证这句话是否真实,并且"显著降低计算机的性能"是否真的显著到可以让使用者感觉得到?
------------------------------------------------------------------------------------------------
Benjaminwan
2004.5.30