Windows PreInstallation Environment深入研究
Windows PreInstallation Environment(WinPE)直接从字面上翻译就是“Windows预安装环境”,微软在2002年7月22日发布,它的原文解释是:“Windows预安装环境(WinPE)是带有限服务的最小Win32子系统,基于以保护模式运行的Windows XP Professional内核。它包括运行Windows安装程序及脚本、连接网络共享、自动化基本过程以及执行硬件验证所需的最小功能。”换句话说,你可把WinPE看作是一个只拥有最少核心服务的Mini操作系统。微软推出这么一个操作系统当然是因为它拥有与众不同的系统功能,如果要用一句话来解释,我认为与Win9X/2000/XP相比,WinPE的主要不同点就是:它可以自定义制作自身的可启动副本,在保证你需要的核心服务的同时保持最小的操作系统体积,同时它又是标准的32位视窗API的系统平台。当然,现在这么说也许难以理解,没有关系,下面让我们来仔细研究它。
WinPE概览
即使有刚才的解释,你一定还是对这个全新概念的Mini操作系统一头雾水,没关系,在这里我将演示一下其运行的全过程,相信看过之后你或许就会有大致的了解。大多数人获得的WinPE光碟(包括我手上这张ISO镜像光碟)应该是一张“Windows XP OPK”CD,意思就是Windows XP OEM预安装工具包CD。实际上,Windows XP OPK CD是WinPE 32位版本的一个可引导副本,也就是说,这张CD已经是个用WinPE定义制作的操作系统了,我们可直接用它来引导系统。先看看这张CD的目录结构吧(图1),总共有352MB,是不是有些大呢?其实由于这是个副本(至少包含了不少驱动程序),大小是由当时自定义制作决定的,若是WinPE的32位非自定义版本,其在磁盘上的镜像大约为120MB。
1.引导WinPE
笔者考虑到网络环境等问题,主要的使用环境是VMware虚拟机和Virtual PC虚拟机,不过这两种虚拟机环境与实际PC环境几乎没有区别(就是说如果你不清楚虚拟机也没关系,就当是在真实PC上直接运行)。
将BIOS中设置成光驱引导,并开始启动系统,当屏幕画面上出现“Press any key boot from cd”时(图2),按任意键从光驱上的WinPE引导启动(图3、4)。如果你的存储设备驱动不被支持,在启动时按下F6键可加载特殊设备的驱动。当启动到桌面时系统会做一些如调整分辨率的工作(图5),最后打开默认的CMD命令行解释工具,大家看看,是货真价实的图形操作环境哦(图6)。
可以看到桌面上空空如也,不要指望可以拿鼠标点来点去,毕竟是个什么应用程序都没有安装的最小化图形操作系统。但它确实是标准的视窗环境,光碟上带有记事本,在命令行下输入“Notepad”并回车就可打开(图7);另外尽管光碟上带有的可执行的命令行工具有限,但明显可以自己添加,看看这是什么(图8)?没错,是我们最熟悉的扫雷游戏(现在知道题头所指了吧,呵呵),拿鼠标先玩玩吧,这是笔者从大家熟悉的WinXP操作系统中加入的(方法很简单,用ISO工具直接拷入刚才的镜像文件就可以了)。
那么还是先回到CMD命令行工具中吧。默认的目录是\I386\system32\,输入命令行“dir *.exe /w”可查看有哪些可运行的程序(图9)。下面我们实际研究一下对个人用户有实际意义的WinPE特性的操作。
在光碟镜像中可同时看到32位和64位操作系统的工具(图10),对于个人用户来讲,你可用它直接引导没有安装任何系统的机器,并在其上实现32位系统的许多功能,这在后面会一一道来。
2.WinPE对网络的支持
刚才dir时我们看到了ping命令,熟悉这个命令的读者应该都知道,只有安装了TCP/IP协议才能使用,那么不管三七二十一,先来ping自己试试吧,在CMD中键入“ping 127.0.0.1”,回车搞定(图11),显然是可ping通的,这证明TCP/IP协议确实已在运行。再试一试光碟上另一个命令IPConfig,键入运行(图12),看到IP地址已经自动分配好了。既然网络确实已经连接,那让我们来实际操作使用吧(这里可能有不少从视窗系统开始接触计算机的朋友会对操作不知所措,其实并没有想象中那么困难,你可以在CMD中使用命令工具带“/?”参数来查询具体使用方法,如果你机器上本来就装有XP,那么在帮助中心查询就更方便了,多实验一下,掌握命令行以后你会发现方便很多)。
现在我的物理机和虚拟机构成了一个虚拟网络,使用光碟镜像中的net命令,在虚拟机中键入“net view”查看已连接的服务器(图13),这里显示的服务器“XQ-B6QAS26953 EC”,名字表示虚拟机已通过网络连接了我的物理机器。我的物理机器上有一个名为TUKU的文件夹已经共享,所以再键入“net use e:\\XQ-B6QAS26953EC\TUKU”,意思是将物理机器上的共享目录TUKU镜像为虚拟机器上的E盘(图14),成功后可在虚拟机里自由地访问共享目录(图15),这时就可通过这个来做远程安装等工作。net命令还有不少参数,自己可以查阅并多加尝试,才可以发挥WinPE强大的网络环境功能,如果只是简单地访问服务器,上面的两个命令参数基本足够了。不过这里要记住用WinPE的机器可访问其他操作系统的机器,而逆操作是不能的,这是由于WinPE本身的限制,我们后面再讲这个问题。事实说明,WinPE启动后就可以使用网络环境。
3.利用WinPE创建、删除、格式化和管理NTFS文件系统分区
对于个人用户来说这个功能很是实用和方便。但不少朋友在dir完以后就叫苦,怎么只有format.com,没有fdisk啊,根本没办法分区嘛。其实这是个误解,Windows XP中针对磁盘管理工作有专用的命令行工具DiskPart.exe,它是一种文本模式命令解释程序,能让你通过使用脚本或从命令提示符直接输入来管理对象(磁盘、分区或卷),WinPE使用的当然也是DiskPart。
在CMD模式下键入“diskpart”并回车进入DiskPart命令行解释(图16)。键入“list disk”,显示有两块硬盘(图17),分别为磁盘0和磁盘1。键入“select disk=0”执行,意思是选择指定磁盘,并将焦点转移到此磁盘,接下来的操作就都是针对它的(后面的操作都是一样,在磁盘、分区或卷上使用DiskPart命令前,必须首先将对象列表,然后选择要给予焦点的对象,只有对象拥有焦点时,键入的任何DiskPart命令才对该对象进行操作)。键入“detail disk”可以查看磁盘0的细节信息(图18),现在磁盘0整个是一个活动分区C,格式为FAT32,容量为16G。下面我们以实际操作将磁盘0分为两个区,分别为NTFS格式的8G主分区C和FAT32格式8G逻辑分区D,而将磁盘1整个转为FAT32格式的分区E来演示WinPE对磁盘的管理操作:
(1)执行“select disk=0”,将焦点转到磁盘0。执行“select partition 1”,将焦点转到磁盘0的分区活动C上面。
(2)执行“delete partition”将原来的分区C删除(图19)。
(3)执行“create partition primary size=8000”回车,在磁盘0上建立一个新的8000MB的主分区(图20),焦点会自动转到新建立的分区上。
(4)接着执行“create partition extended”回车,将磁盘0上剩余的磁盘空间建立为扩展分区(图21)。
(5)完成上一步后再执行“create partition logic”回车,将刚建立的扩展分区创建为一个逻辑分区(图22)。
(6)至此,我们就已经把原来一个活动分区C的磁盘0创建为有一个主分区和一个逻辑分区了(图23),不过这两个分区还没有驱动器号,执行“select partition 1”将焦点转到主分区1,然后执行“assign letter=C”(图24),将驱动器号C:分配给主分区。执行“active”回车将主分区设为活动使其可以引导系统(图25)。
(7)接下来执行“select partition 3”将焦点转到逻辑分区,执行“assign”回车,意思是系统将下一个可用的驱动器号分配给逻辑分区,由于驱动器号D、E均被占用(D为磁盘1分区占用,E为光驱占用),所以系统将F分配给了逻辑分区(图26)。不过没关系,我们先不管驱动器号的顺序,到这里我们对磁盘0的操作就结束了,剩下的目标是将磁盘1的活动分区D转换为分区E。
(8)执行“select disk 1”将焦点转到磁盘1,执行“select partition 1”将焦点转到活动分区D。
(9)由于磁盘1的D分区是活动的主分区,所以设其驱动器号为E,显然是要将它重新建立为一个非主分区的驱动器,那么它就不会占据驱动器号D而将它让给磁盘0的逻辑分区了。执行“delete partition”删除原来分区D,执行“create partition extended”将磁盘1上所有的磁盘空间建立为扩展分区。
(10)完成上步后再执行“create partition logic”将刚建立的扩展分区创建为一个逻辑分区(图27)。
(11)最后执行“assign”自动分配驱动器号,系统仍然把D分配给了它(不过在机器重新启动后系统会自动调整将D分配给磁盘0的逻辑分区,磁盘1的逻辑分区会使用驱动器E,而光驱就顺延到F了,重启一次系统这些改变都会自动实现)。
(12)现在我们对机器上硬盘的重新分区工作就结束了,执行“exit”退出DiskPart命令行解释工具,然后执行“format c: /fs:ntfs”,将刚才建立的DISK 0主分区格式化为NTFS文件格式的分区(图28),同理执行“format d: /fs:fat32”、“format f: /fs:fat32”将分区D、F格式化(图29),我们最终的操作就完成了。
(13)完成后执行“exit”重新启动机器,可以再次进入“DiskPart”来查看分区情况是否正确(图30)。
上面的操作基本包括了对磁盘的创建、删除、格式化和管理,如果你再仔细读读帮助说明,保证你在掌握它强大的功能以后不再想使用Fdisk去管理磁盘。实际上你如果在使用Windows XP,这些知识都非常实用。此外“DiskPart”工具最方便的地方是支持脚本,在这里就不详细说明了。
WinPE的限制
上面我们已经将WinPE特性的基本操作都实践了一下,应该可以体会到WinPE对个人的方便之处,但是就像上文所说的那样,WinPE只是有限功能的Mini操作系统,要正确使用WinPE,当然也要了解它的一些限制。
1.为了防止将它用作盗版操作系统,在连续使用24小时后WinPE将自动退出并重启。
2.你可从WinPE计算机通过网络直接访问服务器和共享。但不能从网络上的另一个位置访问WinPE计算机上的任何文件或文件夹。WinPE通过TCP/IP及其上的NetBIOS获得到达文件服务器的网络连接,不支持其他方法(如IPX/SPX网络协议)。
3.因为涉及反盗版,所以只能从Windows XP Professional CD建立WinPE的自定义版本。而不能从Windows XP Home Edition或Windows 2002 Server操作系统家族的任何成员建立。
4.WinPE太大,不能放在软盘上。WinPE仅包括可用Win32 API的子集(包括I/O(磁盘和网络)和核心Win32 API)。如果Win32下运行的服务基于Win32 API子集,则它在WinPE是否可用需具体分析。这里不详细列出WinPE不支持的API了,反正rundll32.exe和shell.dll等是不被支持的,想要在WinPE下面玩Quake的朋友还是趁早放弃。
WinPE的作用
不少朋友看到这儿无论是否有收获,肯定都会想WinPE到底对自己有什么明确的作用,这里不妨总结一二。
1.方便易用的启动工具盘
通过刚才的叙述,大家可以看出,WinPE启动相当快捷,而且对启动环境要求不高;最可贵的是,虽然名为启动盘,其功能却几乎相当于安装了一个Windows XP的“命令行版本”——别忘了网络支持哦。因此,对于个人计算机用户,只要将其刻录在一张光碟上,便可放心地去解决初始化系统之类的问题;而对小型网络环境(如网吧等)用户来说,这一功能尤其实用。
2.有趣的硬盘使用功能
自定义的WinPE不仅可放到那些可移动存储设备如CD上,还可以放在硬盘上使用。因为许多朋友会认为将WinPE的自定义版本放在硬盘上没有什么意义,其实不然。把WinPE放在硬盘上应该是最为有趣的地方,且不说你的操作系统损坏无法进入的情况下启动硬盘上的WinPE可以方便地修复,关键是由于WinPE在硬盘上,所以在WinPE环境下安装应用程序就有了可能。呵呵,撇开题外话不讲,这里看一下如何把自定义的WinPE放到硬盘上吧(只能在硬盘上放置WinPE的32位版本)。
首先要安装恢复控制台:
(1)将Windows XP Professional CD放在CD-ROM驱动器中,这里指定其为cd_drive。
(2)在命令行CMD窗口中运行cd_drive\i386\winnt32.exe /cmdcons。
然后将WinPE自定义可引导副本放置在硬盘上,如下操作:
(1)在目标硬盘上,创建“C:\Minint”的目录(这里必须将目录命名为“Minint”)。
(2)将WinPE“根目录\i386”下的所有内容复制到C:\Minint。
(3)从WinPE根目录下将Winbom.ini复制到目标硬盘的根目录。
(4)在目标硬盘上,将“C:\Cmdcons\txtsetup.sif”的只读属性改为读/写。
(5)在目标硬盘上,将“C:\Minint\txtsetup.sif”复制到“C:\Cmdcons”进行覆盖。
(6)重新启动目标计算机。在“引导”菜单上,选择引导到“命令控制台”,计算机将使用WinPE引导。
3.Windows XP OPK CD的本职工作
上面说了其实我们拿到的是WinPE的一个可执行副本,即Windows XP OPK(Windows XP OEM预安装工具包)CD。从名字都知道它原来的本职工作是为了方便OEM工作的。如果你在Windows操作系统环境下打开光碟,它就会自动运行Autorun为你的系统安装一个“Windows安装管理器”的工具包(图31)。利用它,你可以轻易制造出带有计算机厂商OEM标志的Windows安装镜像。虽然这是Windows XP OPK CD的主要本职工作,但显然对我们个人没什么意义,当然,如果你想把手上的Windows安装CD都打上自己独有的印记,并在朋友的机器上安装时炫一下,那么使用它是个好主意。当然自己的“印记”绝非OEM标志那么简单,实际上你还可任意设定WinPE携带的软件,并可设置这些软件在WinPE启动时运行;理想的情形下你甚至可以为自定义的WinPE版本加上类似于Windows Explorer的图形外壳程序——要不怎么叫专为厂商OEM设计呢?
四、自定义WinPE
1.自定义Windows XP OPK CD的启动过程
这当然是最简单的自定义方法,简单到你只需在软盘上放一个自己编写的INI文件就可以了。
进入Windows XP OPK CD中的WinPE目录,可找到一个名为“Startopk.cmd”的文件,实际上此CD引导系统启动到后期,就会执行Startopk.cmd(这里的CMD文件类似于BAT批处理文件,可以手动编辑)。打开Startopk.cmd,里面只有一行命令“factory -WinPE”,其意思是找到Winbom.ini文件,并顺序处理这个文件中的命令部分。Winbom.ini对WinPE的启动过程至关重要,我们来看一下能默认用它实现哪些功能:
(1)将测试装置复制到目标计算机上,并运行硬件诊断程序。
(2)运行程序,例如分区和格式化驱动器的应用程序。
(3)使用“net use”命令建立网络连接,以及将目录更改到预安装映像的位置。
因此要自定义WinPE的启动过程当然不能放过Winbom.ini,这里的关键就是系统会如何找到这个文件了——因为原来CD介质上的Winbom.ini文件显然是不可改写的。这里WinPE做了一个巧妙的设计,使得Factory.exe将首先在可移动媒体驱动器(如软盘驱动器)根目录搜索Winbom.ini文件。所以你只需编辑Winbom.ini文件,并将其放到软盘的根目录下,在Windows XP OPK CD启动时将插入此软盘,那么Factory命令就会优先读取软驱上的Winbom.ini文件内容,通过这种方式就可以控制手上这张Windows XP OPK CD的启动了。
明白了如何控制Windows XP OPK CD的启动,那么启动任务的定义就在于Winbom.ini文件本身的内容了,实际上Windows XP OPK C运行命令factory -WinPE时,它将按下面顺序处理Winbom.ini文件中的命令部分:[WinPE.Net]、[DiskConfig]、[OEMRunOnce]、[OEMRun]、[WinPE](除Restart项)、[UpdateSystem]、[WinPE]中的Restart项。当然实际上,Winbom.ini文件中远不止这些部分(图1),但对于通常的制作,这些关键项已足够。我们可以打开手上这张Windows XP OPK CD的Winbom.ini文件直观地看看(图2),内容出乎意料的简单吧?由于Winbom.ini的支架已经写好,默认参数也已设定,若要自定义,只要加入其所包含各项的命令参数就能达到你想要的启动效果,当然这种定义也是有一定限制的,详细设置方式可阅读Windows XP OPK CD上的参考说明,都是非常简明的英语,并且大多数都有例子说明,所以并不难懂(图3)。
2.制作WinPE的可启动ISO副本
上文已提到,通常我们拿到的Windows XP OPK CD是WinPE基于32位版本的可引导副本,通过自定义启动过程可以取得一定的自由性。但如果希望配置WinPE使用不同的驱动程序组、或加入自定义的程序等,上述方法就不可取了。这时可创建自定义的WinPE版本,这当然也是WinPE最有特点之处。在加入自定义特性之前,让我们先来看一下WinPE自定义版本的创建过程:
1.在硬盘上创建一个新目录,假设为“build_location”。
2.将OPK CD插入CD驱动器,下面指定表示为“cd_drive”。
3.将cd_drive\winpe下的所有文件复制到build_location目录。
4.将cd_drive\tools\platform目录中的Factory.exe和Netcfg.exe文件复制到build_location目录。如果正在创建WinPE的32位版本,对应Platform的值为x86。
5.从CD驱动器取出OPK CD。
6.如果正在创建WinPE的32位版本,将Windows XP Professional CD插入CD-ROM中。
7.在命令行模式下进入build_location,运行以下命令:
Mkimg.cmd source_directory destination_directory [image_name]
上面提过,CMD类似于BAT批处理文件,Mkimg.cmd与Startopk.cmd在同一目录,你发现它还可以带参数运行:其中“source_directory”用于指定Windows XP Professional 32位版本CD的位置,如果source_directory是CD-ROM,则只需指定驱动器号,要注意在source_directory中不要包括后置斜杠;“destination_directory”用于指定生成版本的存放路径(不是ISO文件,而是硬盘版本)。“image_name”可选,当然这里的目的是要生成ISO镜像文件,所以应在此指定其路径和文件名。需要注意,你可将ISO文件刻录到CD上,若要此CD能够成为系统启动光盘,请在创建ISO文件前删除i386目录下的Bootfix.bin文件。
3.自定义特性的加入
按照上面的步骤就可制作出WinPE的可启动ISO副本,但显然还没有做什么自定义的工作。进入Windows XP OPK CD中的WinPE目录,可看到除了上面提到的Mkimg、Startopk文件外,还另有一个CMD文件:Startnet.cmd,上面已经说过WinPE引导系统启动到后期,就会执行Startopk.cmd。然而当你创建自己的WinPE版本时,它将使用Startnet.cmd中的命令而不是Startopk.cmd了。默认Startnet.cmd文件并没有直接使用“factory -WinPE”命令,我们大致看一下其中的内容:
regsvr /32 /s netcfgx.dll
factory -minint
netcfg -v -WinPE
net start dhcp
net start nla
a:\floppy.cmd
你可看到Startnet.cmd的这一版本包括factory -minint命令(意思是使用“即插即用”安装网络接口卡),而后面那些命令更可灵活控制安装和启动网络服务。显然,对Startnet.cmd我们有自由的修改权利,因此可使自定义的WinPE副本按照我们的意愿去执行启动任务。例如在Startnet.cmd加入“net use e: \\网络某可见服务器\此计算机的共享目录”命令,那么WinPE启动后就自动将这一服务器(即网上邻居中可见的域中主机)的共享目录映射为本地硬盘E了。而更复杂、更自由的操作方式是通过编写CMD文件来处理,例如Startnet.cmd默认中的“a:\floppy.cmd”命令。
Floppy.cmd是一个可选命令,这一文件中可包含通常在命令提示符下运行的任何命令,例如启动应用程序或打开运行脚本的其他命令行窗口。你只要编写Floppy.cmd,并将其放到软盘的根目录下(也可使用其他文件名和存储位置,但要相应修改Startnet.cmd的内容),待到使用WinPE启动系统时,将此软盘放入软驱,即可实现更为灵活的自定义内容。例如在Floppy.cmd加入命令“format c: /fs:ntfs”,那么WinPE在启动时如果搜索到有Floppy.cmd文件,就会执行将C盘格式化为NTFS格式的命令;当然如果没有把软盘放入软驱,WinPE也不会出错。这实际上给了我们极大的自由度,通过控制“a:\floppy.cmd”文件的编写而使WinPE启动时做出多样化执行任务的选择。例如在本文连载(上)中所提到的,如果是新机器,你可将分区、格式化、转换文件格式等一系列磁盘管理命令编写成Diskpart脚本,然后加入到Floppy.cmd中,这样使用WinPE启动机器后,就会自动完成分区等一系列操作,大大减轻了工作的繁琐程度,特别是在完成批量装机等重复任务时,工作的强度将大为降低。
最后对自定义作一个总结:如果你不想制作WinPE的启动副本,可使用Windows XP OPK CD启动机器,并通过软盘上的Winbom.ini控制启动过程。如果想实现更多的自定义内容,请制作ISO启动副本,并将其刻录至光盘,这样启动机器后将通过光盘中的Startnet.cmd或软盘上的Floppy.cmd实现自定义。显然WinPE有着非常灵活而强大可控制的启动方式,这无疑是你选择它来替代其他启动方式的理由。
[img]http://pic.xabar.net/generator/email/?id=asp30&mail=163.com&tc=&rc=[/img]