无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6724|回复: 38
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2004-5-8 16:19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[UploadFile=34_2187.doc][这个贴子最后由benjaminwan在 2004/05/08 09:46pm 第 1 次编辑]

如果你是Ghost XP制作爱好者,又对此内容感兴趣,想更清楚的了解其制作原理和过程
可以下载我做的范例:http://bbs.wuyou.net/cgi-bin/topic.cgi?forum=34&topic=2169&show=25
                 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
2#
发表于 2004-5-8 17:22:05 | 只看该作者

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

这么好的帖子为什么没有人顶?
回复

使用道具 举报

3#
发表于 2004-5-8 17:29:18 | 只看该作者

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

不知道下一篇什么时候出?
回复

使用道具 举报

4#
发表于 2004-5-8 17:33:47 | 只看该作者

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

正在下载!不知道能不能下完 !可否延迟一下做种子的时间?
回复

使用道具 举报

5#
发表于 2004-5-8 17:39:55 | 只看该作者

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

高手,
回复

使用道具 举报

6#
发表于 2004-5-8 17:43:35 | 只看该作者

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

希望能够更完善和更方便。
回复

使用道具 举报

7#
发表于 2004-5-8 18:50:04 | 只看该作者

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

高手就是不一样
回复

使用道具 举报

8#
发表于 2004-5-8 19:15:15 | 只看该作者

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

回复

使用道具 举报

9#
发表于 2004-5-8 20:13:35 | 只看该作者

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

真是高啊!
回复

使用道具 举报

10#
发表于 2004-5-8 21:17:57 | 只看该作者

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

呵呵,网络上真是藏龙卧虎之地啊。
回复

使用道具 举报

11#
发表于 2004-5-9 00:30:17 | 只看该作者

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

太让人惊喜了!
回复

使用道具 举报

12#
发表于 2004-5-9 00:54:01 | 只看该作者

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

希望能够更完善和更方便。
回复

使用道具 举报

13#
发表于 2004-5-9 02:34:40 | 只看该作者

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

看过,真的不错,等待完整的方案出台啦
回复

使用道具 举报

14#
发表于 2004-5-9 04:37:06 | 只看该作者

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

学到不少东西
回复

使用道具 举报

15#
发表于 2004-5-9 07:23:00 | 只看该作者

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

ok
回复

使用道具 举报

16#
发表于 2004-5-9 09:18:03 | 只看该作者

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

真是高手啊!
回复

使用道具 举报

17#
发表于 2004-5-9 09:52:58 | 只看该作者

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

写得不错,建义多发些这样的帖子,
回复

使用道具 举报

18#
发表于 2004-5-9 11:17:34 | 只看该作者

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

benjaminwan:
  一级棒!希望提供你修改的组件!!
回复

使用道具 举报

19#
发表于 2004-5-9 11:18:27 | 只看该作者

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

好东西啊,有时间研究研究
回复

使用道具 举报

20#
发表于 2004-5-9 12:01:34 | 只看该作者

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

[这个贴子最后由死性不改在 2004/05/09 12:18pm 第 3 次编辑]

实在高明!佩服!!!
有一点建议:
(1)可以在执行过sysprep.exe退出后用批处理将注册表“HKLM\system\setup”导出到sysprep\sysprep.chk,重写其中的cmdline键值为c:\sysprep\compair.cmd。
(2)compair.cmd只需要执行以下操作:
1,复制(不需要进行比较和用devcon update) Text Mode Setup中产生的hal.dll和ntoskrnl.exe到c:\windows\system32目录,覆盖同名文件;
2,删除Text Mode Setup的所有东西;
3,删除注册表
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL\0000 和 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\PCI_HAL\0000键值;
4,导入c:\sysprep目录中的sysprep.chk。
5,用boot.bak替换boot.ini。
(3)compair退出后,系统会自动重新启动,然后执行重新封装。

注:
1,删除注册表
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL\0000 和 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\PCI_HAL\0000
键值的操作是允许的,就算是在windows下也可以通过修改权限达到目的,这样系统在重新
封装过程就会根据所加载的hal重写注册表,这样可以避免完成后,设备管理器有两个计算
机模式。最主要的是把compair放在cmdline执行,可以避免对于属于非Standard PC的hal,
进入系统后再次重新检测硬件。
2,我无法下载,只是叫朋友把system和software文件发给我看看,
然后陆续分析了一下compair.cmd,boot.ini,boot.bak等等,
如有误解的地方请指正。
回复

使用道具 举报

21#
发表于 2004-5-9 15:37:40 | 只看该作者

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

死性不改:
    一起来完善吧!!!
回复

使用道具 举报

22#
发表于 2004-5-10 15:10:00 | 只看该作者

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

好文章!!!
回复

使用道具 举报

23#
发表于 2004-5-11 08:08:28 | 只看该作者

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

[UploadFile=34_2187_22.rar][这个贴子最后由hlk94在 2004/05/11 10:27am 第 1 次编辑]

使用微软的Windows Embedded Stdio中的一个程序可以在DOS下确定HAL
注意:只有在DOS下运行才能获得正确的HAL,在Windows下运行无法获得正确的HAL,只能得到当前正在使用的HAL
把所有文件解压到一个可写的目录下,运行hal.bat

回复

使用道具 举报

24#
发表于 2004-5-11 08:18:42 | 只看该作者

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

下面引用由hlk942004/05/11 08:08am 发表的内容:
使用微软的Windows Embedded Stdio中的一个程序可以在DOS下确定HAL
注意:只有在DOS下运行才能获得正确的HAL,在Windows下运行无法获得正确的HAL,只能显示当前正在使用的HAL
把所有文件解压到一个可写的目录下 ...
好东东啊,顶顶顶。
回复

使用道具 举报

25#
发表于 2004-5-11 08:19:25 | 只看该作者

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

下面引用由hlk942004/05/11 08:08am 发表的内容:
使用微软的Windows Embedded Stdio中的一个程序可以在DOS下确定HAL
注意:只有在DOS下运行才能获得正确的HAL,在Windows下运行无法获得正确的HAL,只能显示当前正在使用的HAL
把所有文件解压到一个可写的目录下 ...
是不是用这个就能完成全自动的电源模式的选择了?
回复

使用道具 举报

26#
发表于 2004-5-11 09:03:46 | 只看该作者

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

很高兴看到这样的好贴
回复

使用道具 举报

27#
发表于 2004-5-11 10:49:05 | 只看该作者

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

复杂啊,但是是好思路
回复

使用道具 举报

28#
发表于 2004-5-11 13:52:16 | 只看该作者

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

厉害
回复

使用道具 举报

29#
发表于 2004-5-26 16:39:10 | 只看该作者

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

好帖子,不能沉了
回复

使用道具 举报

30#
发表于 2004-6-8 09:11:13 | 只看该作者

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

GAO
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-10-24 07:12

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表