发新话题
打印

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

[这个贴子最后由benjaminwan在 2004/05/08 09:42pm 第 2 次编辑]

如果你是Ghost XP制作爱好者,又对此内容感兴趣,想更清楚的了解其制作原理和过程
可以下载我做的范例:http://www.ultraiso.com/cgi-bin/cgi-bin/topic.cgi?forum=1&topic=3608&show=0
                 G.A.A.S XP制作原理简述
既然只是简述原理,就无法做到面面俱到,可能也无法让新手们满意,但是希望看完这篇文章的朋友能对XP系统安装盘的结构有个大概的了解。
本文内的一些名词定义:
1.Ghost XP Disk = Ghost XP 系统恢复盘
2.New Setup XP Disk = 用于全新安装的XP系统安装盘
3.XP without SP1 = 未集成SP1的原版XP
4.XP with SP1 =集成了SP1的XP

New Setup XP 安装过程分解


    我把安装过程分成两个阶段,第一个阶段叫Text Mode Setup ,文本模式安装,最醒目的地方就是进行文件的复制,复制完后重新启动。
    第二个阶段叫 GUI Mode Setup ,完成Text Mode Setup 后进行硬件检测,安装网络,安装开始菜单项,安装系统组件,注册组件,保存设置和删除临时文件。
    其中,Text Mode Setup阶段又可分成两个步骤:第一步是装载虚拟启动软盘组,然后进入黑屏状态
    第二步是黑屏之后,进行的磁盘检测,选择分区和复制文件。

什么才是问题的关键?[


    计算机类型大家都把它叫做电源管理模式,因为它和软关机有关,而在Microsoft Windows 企业部署工具指南中把它称为硬件抽象层 (HAL)
    这里引用指南中的原话:主安装和目标计算机必须有兼容的硬件抽象层 (HAL)。例如,HAL APIC 和 HAL MP(多处理器系统)是兼容的,但 HAL PIC(可编程中断控制器)与 HAL APIC 或 HAL MP 不兼容。
    硬件抽象层 (HAL)的定义中提到的一个重要问题:HAL 还提供了允许单个设备驱动器在所有的平台上支持同样设备的例程。
    硬件抽象层 (HAL)是以一种驱动的方式在windows上存在,它是windows运行的基础,甚至是windows安装过程中所比不可少的。
    说到这里你大概就已经明白了问题的关键:想让Windows在安装过程中自动选择计算机类型,必须先了解硬件抽象层 (HAL)是如何安装的。

Windows是如何处理硬件抽象层 (HAL)的?[


    从硬盘安装XP的过程着手:
    引导程序读取Boot.ini->找到c:\$WIN_NT$.~BT\bootsect.dat->C:\$LDR$->查找C:\txtsetup.sif中所列出的硬件驱动,载入Text Mode Setup安装程序
    txtsetup.sif中所列出的驱动在Text Mode Setup中的第二个步骤时复制到磁盘。
    硬件抽象层 (HAL)也是在Text Mode Setup过程中检测并复制到%systemroot%\system32\hal.dll,但并不在注册表中留下相应的键值。
    重新启动后,GUI Mode Setup阶段就用Text Mode Setup阶段复制的驱动启动,但在其检测硬件阶段再次进行检测并真正安装。
    可是,有人会问:为什么要Text Mode Setup就复制,HAL不是在GUI Mode Setup阶段时才安装吗?因为没有HAL的支持,GUI Mode Setup阶段安装就无法启动。

接下来才是本文的主题


那么现在要做的只是把Text Mode Setup分离出来,先于Ghost XP安装前运行,然后在Ghost XP安装时检测Text Mode Setup阶段安装了哪种硬件抽象层 (HAL),并做出相映的处理就可以了。
    i386\txtsetup.sif负责在Text Mode Setup阶段时文件复制和文件来源路径
    i386\driver.cab是XP Without SP1版的驱动文件库
    i386\sp1.cab是XP With SP1版新加入的驱动文件库
    i386\drvindex.inf所有驱动文件的索引
    i386\layout.inf部署文件,其内容和Txtsetup.sif基本一样
首先必须先看懂Txtsetup.sif
打开txtsetup.sif并查找hal.dll,可以找到
hal.dll      = 100,,,,,,3_,2,3,,,1,2
100代表什么呢,看txtsetup.sif头部的[SourceDisksNames.x86]段
100 = %spcdname%,%spcdtagfilei%,,\i386,1   <---100代表的是i386目录,%spcdname%在txtsetup.sif下部有定义,有时找不到安装盘时会提示请插入XXXX盘,就是这个了。而%spcdtagfilei%指的是SP1版XP识别文件,即是光盘根目录下的win51ip.sp1
3_代表什么呢,再看txtsetup.sif头部[SourceDisksNames.x86]段
3_    = %bootname3%,"%boottagfile3%",,""  <---指的是虚拟启动软盘组第三块盘
3_之后的2表示复制到system32目录,再看txtsetup.sif的头部的[WinntDirectories]段:2  = system32
细心的话,你可以发现有的文件来源为1,有的却为100,其实1等同于100,但为什么要有分别呢?
打开layout.inf,你可以发现它比txtsetup.sif中每项多了一大串数字,那串数字就是未压缩前的文件大小
再打开XP Without SP1版的layout.inf,你可以发现,所有文件来源都为1,对比刚才的layout.inf,凡是来源为100的文件大小都不一样
这即是表示来源为100文件是SP1版XP相对于原版改动过的文件
回到正题:在txtsetup.sif中查找[hal],可以找到
[hal]
486c_up        = hal.dll     ,2,hal.dll    |
acpipic_up     = halacpi.dll ,2,hal.dll      |  <--如果HAL的Hardware ID为acpipic_up,
e_isa_up       = hal.dll     ,2,hal.dll    |  那么复制halacpi.dll到system32,
mps_up         = halapic.dll ,2,hal.dll    |  并在复制后改名为hal.dll
mps_mp         = halmps.dll  ,2,hal.dll  |  复制来源和目的地在各个
syspro_mp      = halsp.dll   ,2,hal.dll    |  [SourceDisksFiles]中有指定
acpiapic_up    = halaacpi.dll,2,hal.dll      |  以下同
acpiapic_mp    = halmacpi.dll,2,hal.dll     |
[Hal.Load]
486c_up= hal.dll               HAL的HardwareID与相应的dll对应表
acpipic_up= halacpi.dll          如果你想知道你的计算机的HAL HardWareID
e_isa_up= hal.dll               你可以打开注册表编辑器
mps_up=halapic.dll             并展开HKEY_LOCAL_MACHINE\SYSTEM
mps_mp= halapic.dll            \CurrentControlSet\Enum\Root\ACPI_HAL\0000|
syspro_mp      = hal.dll      如果不存在则应该是HKEY_LOCAL_MACHINE\SYSTEM\
acpiapic_mp    = halaacpi.dll    CurrentControlSet\Enum\Root\PCI_HAL\0000
acpiapic_up    = halaacpi.dll  但在系统运行是这个键值是不允许用注册表编辑器进行更改的
[ntdetect]
486c_up     = NTDETECT.COM,"\"           |
acpipic_up  = NTDETECT.COM,"\"           |
e_isa_up    = NTDETECT.COM,"\"           |
mps_up      = NTDETECT.COM,"\"           |不管计算机是哪种类型
mps_mp      = NTDETECT.COM,"\"           |都得将NTDETECT.COM复制到C:\
standard    = NTDETECT.COM,"\"           |
syspro_mp   = NTDETECT.COM,"\"           |
acpiapic_mp = NTDETECT.COM,"\"           |
acpiapic_up = NTDETECT.COM,"\"           |
但是,Text Mode Setup 安装太漫长了,如何让它只复制HAL和其他一些必要文件并减少安装时间呢?
再来研究研究txtsetup.sif吧
auditW.chm    = 1,,,,,,,21,0,0,audit.chm  <--这表示在复制后改名为audit.chm
channels.scf = 1,,,,,,,2,0,0,%ViewChannelsSCF% <-表示超过命名规范的文件,会在c:\留下$$Rename.txt指示文件在GUI Mode Setup阶段改名
还有一类文件象ct120d.gpd   = 1,,,,,,,,3,3<---来源1后第7个逗号之后的复制目的地为空,则表示不一定复制,在需要时再复制
但是有4千多个驱动文件存在driver.cab中,不在i386下,如何指示其来源呢?
这就要靠drvindex.inf这个文件,复制时安装程序会先在drvindex.inf中查找,如果找到则从driver.cab或SP1.cab中复制
所以如果i386下和XXXX.cab中同时存在同名的文件,安装程序将会优先从XXXX.cab中复制
drvindex.inf的格式:
[Version]
signature="$Windows NT$"
CabFiles=SP1,driver
[driver]
........  <-包含在driver.cab中的文件
[SP1]
.....  <-包含在SP1.cab中的文件
[Cabs]
driver=driver.cab
SP1=SP1.cab
如果你想在Text Mode Setup复制文件时不复制SP1.cab则只要修改以下几处:
删除:sp1.cab      = 100,,,,,,_x,39,0,0
DriverCabName=driver.cab,sp1.cab 改为DriverCabName=driver.cab
删除:sp1.cab = 16
并将drvindex.inf改为:
[Version]
signature="$Windows NT$"
CabFiles=driver
[driver]
........  <-包含在driver.cab中的文件
[Cabs]
driver=driver.cab
如果你想修改SP1.cab中的驱动文件,那是不可能的,因为它受到SP1.cat这个数字签名文件的保护,最多只能删除或将其所有文件合并到driver.cab中,微软破解中心做的98_2000_XP中的XP就是这样优化驱动库的,因为driver.cab有许多驱动文件在SP1.cab中已经升级了,Microsoft只在drvindex.inf的[driver]段中删除相应的文件名,并没有删除driver.cab中多余的文件
如果你想连driver.cab都不复制,那是不可能的,但是有替代的办法:
随便找个小文件压缩成driver.cab,记下[driver]中所有文件并在txtsetup.sif中删除,并改写drvindex.inf为
[Version]
signature="$Windows NT$"
CabFiles=driver
[driver]
空白
[Cabs]
driver=driver.cab
如果你想把driver.cab中的文件转移到i386下,则不用删除txtsetup.sif中的相应文件名,只要将drvindex.inf修改为如上内容,再把driver.cab中文件解压并一个个压缩放到i386下,我即是采用这种做法
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
hal.dll
halaacpi.dll
以上文件存在SP1.cab中,当然driver.cab中也有,但那并不是SP1版XP安装时用的
halsp.dll存在driver.cab中
我将SP1.cab照上述的方法删除了,将driver.cab照上述的方法修改了
并将以上所有文件压缩放到i386下,但不能删除txtsetup.sif中相应的行,一删除就会出错.
还有其他文件的精简就依次类推,不再细讲。
精简Text Mode Setup是一个痛苦的过程,最后我终于将i386精简到40M以内,安装时间也缩短到2-3分钟
所以最后Text Mode Setup就变成了一个单纯用于检测计算机类型的过程
这个过程完成之后,通过判断system32\hal.dll就可以知道计算机类型了。
说到这里你可能会有个疑问,是复制到windows\system32下吗?
hal.dll大小99KB= Standard PC
halacpi.dll大小76KB= Advanced Configuration and Power Interface (ACPI) PC
如果你的计算机类型是Advanced Configuration and Power Interface (ACPI) PC
但是你将它改成了Standard PC并重新启动,你会发现所有硬件都再要检测一遍,这就是上面所提到的重要的一点,更改了基础,其他驱动必然要重新再检测
然后你可以用另一个系统或维护盘把halacpi.dll改名为hal.dll复制到windows\system32下
如果我的判断没错的话,系统仍然可以启动,但是这种方法有个缺点。
至于什么缺点我在这里不好讲明白,如果你试过了应该就会明白了。
我采用的是另一种方法:
Text Mode Setup时文件复制到另一个文件夹(Benjamin),和在同一个盘下装双系统原理一样,然后在Ghost XP安装时再通过Benjamin\system32\hal.dll来判断计算机类型。
至于如何来判断,说到这里可能已经有人差不多知道,其实方法多了去了。
暂时讲到这里,如何判断留到下一篇吧。
考虑到有些东西新手不知道,我已经尽量将该讲的讲清楚,至于有些东西连菜鸟都应该懂的东西我就不提了。
如果有什么问题和建议,可以向我提出来,但最近比较忙,可能没有时间回答。
                                                       Benjaminwan
                                                        2004.5.8
附件: 您所在的用户组无法下载或查看附件

TOP

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

?????????????

TOP

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

这个也好!

TOP

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

如何让它在:
第一次启动将会进入经过精简得只剩驱动安装的TextMode的XP安装??
作一个可以改变人生的人.

TOP

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

我猜的没错的话,你的ghost镜像c盘不能是ntfs格式。因为当第一次启动时,需要通过boot.ini进入dos运行winnt.exe。
另:能不能把你的精简后的TextMode安装文件上传到网站上。整个iso太大了。

TOP

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

谢谢分享。受益匪浅。

TOP

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

引用:
下面引用由yaojw2004/05/10 05:47am 发表的内容:
我猜的没错的话,你的ghost镜像c盘不能是ntfs格式。因为当第一次启动时,需要通过boot.ini进入dos运行winnt.exe。
另:能不能把你的精简后的TextMode安装文件上传到网站上。整个iso太大了。
同感!

TOP

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述

太复杂啦

TOP

发新话题