要深入理解WinPE的启动机制,首先需要掌握它的两种常见部署方式,这是后续进行镜像制作的基础。
第一种是A类部署方式:将WinPE的系统文件直接放置在光盘镜像中。系统启动后,系统盘(通常为X盘)即为光盘本身。这种模式有明显缺陷——一旦光盘被取出,虽然系统可能仍在运行,但所有依赖光盘的软件和工具都会失效。就像某些系统光盘自带的PE,光盘一拿开,功能便无法使用。
第二种是B类部署方式:将WinPE的系统文件打包成一个SDI镜像。启动时,PE以RamDisk形式在内存中展开,系统盘是内存虚拟出来的磁盘。这样一来,即使光盘被取出,系统完全不受影响,所有功能照常运行。这是目前主流PE采用的方式——核心全部加载到内存中,与光盘无关。
准备工作:你需要准备哪些资源
要动手制作,请先备好以下材料:
- 一张Windows产品CD(例如Windows 2003 Server光盘;如果使用XP,请换成XP安装盘,注意是安装版,不是Ghost版)
- 一张Windows OPK CD 或 Windows PE CD(OPK全称是“原始设备生产商工具包”,仅供OEM厂商使用;非OEM客户需要购买Windows PE许可证,但两者附带的核心工具相同)
注意:以下所有操作建议在虚拟光驱环境下进行,避免反复刻录光盘浪费时间。
镜像制作步骤(以x86架构为例)
首先,在硬盘上创建一个目录,用于存放Windows PE的创建工具。例如:
md c:\build_x86
如果不熟悉命令行,直接在C盘下新建一个名为“build_x86”的文件夹即可。
接下来,将Windows OPK CD或PE CD放入光驱(假设盘符是E盘),将其中的Winpe文件夹及其所有子目录复制到刚才创建的目录:
xcopy e:\winpe c:\build_x86 /s
复制完成后取出光盘,换上Windows产品CD,然后进入build_x86目录:
cd c:\build_x86
现在运行Mkimg命令,它是生成PE镜像的核心脚本。基本语法如下:
mkimg.cmd source_directory winpe_image
举例来说,如果产品CD的盘符是E盘,希望将镜像输出为c:\winpe,则执行:
mkimg.cmd e:\ c:\winpe
注意,这里的source_directory是产品光盘的根目录,请务必指定正确。
Mkimg还支持几个实用参数,可根据需要添加:
/NOVER:禁用版本检查(创建非标准映像时适用)/WMI:从WMI知识库添加WMI提供程序/PNP:添加即插即用设备驱动检测功能/NOWF:禁用Windows防火墙(默认启用)
另一个常用的定制脚本是BuildOptionalComponents.vbs,用于添加可选组件。其参数包括:
/ADO:构建ADO支持(用于连接SQL Server)/D:location:指定可选组件文件的目标位置(默认桌面)/E:完成后自动打开目标文件夹/HTA:构建HTML应用程序支持/Q:静默运行(仅失败时提示)/S:location:指定备用的源文件位置/WSH:构建Windows脚本宿主支持/X:提供验证组件安装的示例脚本
例如,要同时添加HTA和WSH支持并指定目标位置,可以这样写:
BuildOptionalComponents.vbs /D:winpe_img /S:cd_drive /HTA /WSH /X /E
完成上述步骤后,PE的所有文件就已经构建完毕。接下来是制作可启动光盘镜像的环节,而A类和B类镜像的制作方法从这里开始分岔。
A类镜像:简单直接
A类镜像的制作非常简便——只需将winpe_img目录下的所有文件打包成一张可启动光盘镜像。在build_location目录下执行:
oscdimg -h -n -betfsboot.com winpe_img C:\WinPE.iso
这样,一个基础的PE启动ISO就制作完成了。
B类镜像:内存启动的RamDisk版
B类镜像需要借助Windows Embedded Studio中的SDI Loader工具。流程稍多,但思路清晰:
- 新建一个工作目录,比如
workdir。 - 打开SDI Loader,点击Add Disk,定位到
workdir,输入新文件名pe.sdi,点击打开。弹出对话框时确认创建新磁盘映像。然后填写磁盘大小——注意不要超过或太接近目标机器的物理内存,最好小于内存的一半。 - 使用DiskPart工具对新建的磁盘进行分区。推荐的命令序列:
Clean
List disk
Select disk=X (X是上一步看到的硬盘编号)
Create partition primary
分区后,将其格式化为NTFS文件系统,建议开启文件压缩支持。
- 假设新分区的盘符是K盘,回到
build_location目录,用Robocopy将PE文件复制到K盘:
robocopy.exe /MIR winpe_img K:\ /R:3 /W:4
使用Robocopy的好处是,如果NTFS分区启用了压缩,可以在空间不足时自动压缩并重试拷贝,确保数据完整。
- 复制完成后,在SDI Loader中将
pe.sdi卸载。 - 在
workdir中新建一个i386文件夹,将winpe_img\i386文件夹下的NTDETECT.COM和SETUPLDR.BIN两个文件复制进去。 - 在
workdir中创建一个文本文件,命名为winnt.sif,内容如下:
[SetupData]
BootDevice = "ramdisk(0)"
BootPath = "\i386\System32\"
OsLoadOptions ="/noguiboot /fastdetect /minint /rdimageoffset=36352 /rdpath=PE.SDI"
- 最后,用
oscdimg命令制作可启动ISO镜像:
oscdimg -h -n -betfsboot.com winpe_img C:\WinPE.iso
至此,两种风格的PE镜像都已制作完成。A类适合快速启动、对光盘依赖不敏感的场景;B类则更能应对无盘或光盘被取出的情况,是多数PE工具的首选。根据你的实际需求,选择一个合适的方案上手尝试吧。
