返回列表 发帖

总结Ram Disk方式加载PE/XPE镜像

总结Ram Disk方式加载PE/XPE镜像



Windows Server 2003 SP1以上版本的setupldr.bin和ntldr都内建有Ram Disk支持(需要ramdisk.sys吗?),可以分别用来启动PE和XP Embedded的镜像,镜像格式可以是ISO、IMG、SID以及ISO、IMG的CAB压缩格式IS_和IM_(相当强大的!)。

1 PE镜像的加载

1.1 光盘启动

如果是光盘启动的话(Windows安装光盘或者PE光盘),光盘的引导记录会读取并执行\i386\setupldr.bin文件,setupldr.bin会寻找根目录下面有没有winnt.sif文件,如果没有的话就会正常加载内核并执行txtsetup.sif(好像在此期间整个光盘被虚拟到X:上)。如果根目录下面存在winnt.sif,而且winnt.sif的内容类似图中所示的那样,那么setupldr.bin就会构造Ram Disk并把镜像解压缩到Ram Disk中(Ram Disk的盘符也是X:),并继续执行下面的步骤(基于XP的就没有这个功能,比如微软官方的PE)。

1.2 硬盘启动

硬盘启动和光盘启动类似,但是因为直接在boot.ini中写入setupldr.bin文件是无法引导的(原因不明),所以必须使用avldr.bin(或其它,比如grub)“绕”一下,avldr.bin是使用Avlgomgr工具根据setupldr.bin生成的,在boot.ini中写入“c:\avldr.bin=......”就可以了,注意setupldr.bin必须在硬盘根目录中。avldr.bin加载并执行setupldr.bin后面的步骤就和光盘启动一样了。很多版本的PE装到硬盘上后把avldr.bin改名为avldr,把setupldr.bin改名为peldr,个人不赞成修改,因为虽然名字和ntldr相比“顺”了,但是失去了原汁原味,而且会让初学者摸不着头脑。

还有一点需要注意的是光盘引导记录和setupldr.bin文件默认的Windows系统目录都是“I386”,很多PE改成了其它目录(比如WXPE),如果要这样做,那么就必须对光盘引导记录和setupldr.bin动手术了,个人也不赞同这样做,毫无意义。

1.gif


图 1 通过setupldr.bin加载PE镜像



2 XP Embedded镜像的加载

只要使用2003 SP1以上的ntldr就可以,它的运行方式和setupldr.bin是类似的,boot.ini中的写法如下所示。它和setupldr.bin的区别在于:

  • 因为它本身就是NT加载器,所以显然不需要avldr.bin作“中介”;
  • 它的启动参数是从boot.ini而不是winnt.sif中读取的;
  • 它不会处理txtsetup.sif,而是直接从注册表中读取信息;


从最后一点区别就可以明显地看出PE和XP Embedded的区别了,两者在其它地方基本都差不多,而且更进一步讲都和XP差不多。不过迄今为止XP Embedded我虽然能启动起来了,但是一直是0x0000007F的STOP故障。可能是XP Embedded对于通用驱动的处理比PE要困难,不过应该可以从PE那里借鉴一些知识。

2.gif


图 2 通过ntldr加载XP Embedded镜像



[ 本帖最后由 Mallon 于 2007-12-7 22:32 编辑 ]

文件名:PE和XPE范例.rar
下载地址:http://www.fs2you.com/files/7ccb639c-a4bc-11dc-ab25-0014221b798a/

TOP

TOP

返回列表