麟之趾赏析:WinPE 制作技术文章之 —— WinPE高手从这里诞生(WinPE DIY定制教程)

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 18:51:21

一、增减WinPE系统外置程序(以老毛桃0325版为例)

  外置程序在老毛桃WinPE光盘的“外置程序”目录中,对应的配置文件是该目录下的 WinPE.INI,删除程序只需删除该软件在外置程序目录对应的子目录,再删除 WinPE.INI 中相应的 LINK 创建快捷方式的语句行即可。添加程序正好相反。将绿色软件放到外置程序目录中,在 WinPE.INI 中加入相应的 LINK 语句行创建快捷方式即可(参照其它 LINK 语句,复制一行,只须更改一下快捷方式的位置、名称/目标程序的目录名、可执行文件名)。
  实际上很多并不是为 WinPE 准备的软件也可以在WinPE系统中运行的,用一个笨办法来判断一个普通的绿软是否可以直接在WinPE系统中运行:启动WinPE系统环境,找到该软件所在目录,复制一份备份,然后将该目录和目录下的所有文件属性改为只读,直接双击目录内的可执行文件,看能否运行,运行后各项功能都使用一下看是否正常,如无异常,则可按上面的方法简单加入。如运行异常,有可能缺某些库文件(这种情况一般有提示),或它在自己的目录内写东西,或依赖注册表中的某些键值,这就需要动点手脚,如准备缺少的库文件,看它自己的目录下有没有配置文件可以修改,在WinXP中运行监视它要读些哪些注册表项。这种情况对不同的软件解决的方法不同,也可能无法解决。

二、定制登录过程
  这一项改动需要熟悉 PECMD 各命令的用法,读懂配置内外配置文件,最好对系统登录的过程有点了解。WinPE新手只作为兴趣了解即可,因为老毛桃的登录顺序几乎也没什么可改动的了,可以留给我们定制的就是改改提示句、外置程序的加载方式、调整一下细节而已。这一过程会涉及到内部配置文件:
  1、将光盘映像根目录中的 WinPE.IS_ 用 UltraISO 或 WinRAR 提取出来;
  2、将名称改成 WinPE.CAB(不改也可以,但用 WinRAR 打开会麻烦点);
  3、用 WinRAR 将其中的 WinPE.ISO 解压出来;
  4、用同样的方法,将 WinPE.ISO 中的 WXPE\SYSTEM32\PECMD.INI 提取出来(注:要修改什么文件就提取什么文件,后面的改注册表也要用到此方法);
  5、按自己的需要修改提取出来的文件;
  6、将修改后的文件放入 WinPE.ISO 中替换原来的(目录位置一定要相同);
  7、用 CAB 打包工具将 WinPE.ISO 重新打包为 WinPE.IS_;
  8、再将 WinPE.IS_ 放到老毛桃的光盘映像中替换原来的(注:用 UltraISO 修改 ISO 映像文件时最好用另存,以免改错了原来的备份也没有了);

三、修改外置程序目录名
  需要改动的地方有3个文件和1个目录名:
  1、内部配置文件 PECMD.INI(修改方法见前面说明);
  2、\外置程序\WinPE.INI (前面的根指光盘映像的根目录);
  3、\WINPE安装\SETUP.INI (老毛桃的安装卸载程序要用它);
  4、外置程序的目录名(这个是当然的);
  将三个 INI 文件提取出来按下面的步骤修改,假设新名为 "NEWNAME"。
  1、用记事本打开 INI 文件,将光标定在文件最前面;
  2、菜单:编辑-替换...;
  3、在“查找内容”编辑框中输入"\外置程序"(不含引号);
  4、在“替换为”编辑框中输入"\NEWNAME"(不含引号);
  5、点全部替换;
  6、在“查找内容”编辑框中输入"外置程序\"(不含引号);
  7、在“替换为”编辑框中输入"NEWNAME\"(不含引号);
  8、点全部替换;
  9、保存;
  用修改后的文件替换下载的光盘映像中原来的(外置程序这个目录的名字可以直接在 UltraISO 中修改),说得这么麻烦只是为了防止漏改或者将注释也给改了,实际上新版本因采用的 %CurDir% 这个环境变量后,要改的只有几个地方,手工修改也是可以的。

四、修改系统设定
  这一步主要是指修改WinPE中的注册表,可以直接修改WinPE注册表,也可以修改配置文件。
  1、修改内部注册表的方法:
  用前面修改PECMD.INI的方法将内部注册表的文件提取出来:
\WXPE\SYSTEM32\CONFIG\*.*
\WXPE\SYSTEM32\SETUPREG.HI_ (这是CAB压缩包,将它解开成 SETUPREG.HIV)
  运行注册表编辑器REGEDIT.EXE,鼠标点击 HKEY_LOCAL_MACHINE,然后点“文件”-“加载配置单元”,打开提取出来的注册表文件(需要改哪个就加载哪个),提示挂载名时随便输入取一个名字如“WinPE”,展开 HKEY_LOCAL_MACHINE 后里面就有一项 WinPE,然后就跟普通的注册表操作一样了,改好后用鼠标点一下 “WinPE”项目,然后“文件”-“卸载配置单元”,这个文件就改好了。用改过的注册表文件替换原来的。
  2、修改配置文件的方法:
  对于普通的不依赖于外置程序目录结构的注册表项目,可以用常规方法将修改项写成 REG 文件(可以直接从 XP 系统中导出,然后在其基础上修)。在外置程序目录下有个 RegDoc.cmd,这个文件是毛桃用来注册外置程序文档关联的(就是改注册表),可以用记事本打开它,加入一行:
REGEDIT /s REG文件名
  则WinPE加载外部配置时它会自动导入。这是最简单的改注册表的方法。但是如果要改的项依赖于外置程序的目录结构(比如要在右键菜单中添加用 UltraEdit32 打开),就不能用上面的方法了,因为外置程序的绝对路径是不确定的(不同的机器中盘符不能确定)。这种情况就需要用原始的 REG 命令来做了(就跟老毛桃在REGDOC.CMD 中的做法一样),这个命令的语法比较艰懂,且注册表键值的表示方法跟 REG 文件不同。在命令提示符下通过 /? 参数可以获得它的用法(中文的哦),提醒一下 /? 参数是个以多层使用的,如 REG /? 得到的是基本参数的说明,如用 REG ADD /? 则可得到 ADD 这个参数的用法……,有了这个命令的基础后,我们来看看是怎么解决不定路径问题的。在 REGDOC.CMD 中有一个环境变量 %TP%,代表的是 REGDOC.CMD 这个文件所在的路径。我们可以通过 %TP%\..\ 表示它的上层目录,%TP%\..\..\ 表示它的上两层目录。用此方法可以索引到外置程序目录内的所有路径,而不用考虑外置程序目录本身的绝对路径。还有个方法就是在 WinPE.INI 中用 PECMD 的 REGI 命令一行行添加,这个比系统的 REG 命令好理解些,同样可以用 %CurDir% 环境变量来索引外置程序目录内的所有路径.直接修改的好处是启动 WinPE 就是所需要设置,不依赖外部配置文件,WinPE 的加载速度也比较快,但麻烦。修改配置文件则比较简单,但要依赖配置文件加载过程(直到加载到那些语句时才会生效),启动时需要额外的时间加载,相当于给系统打补丁去修改默认设置。
一般情况下不推荐直接修改WinPE注册表,麻烦,重新打包也比较花时间。但有些跟系统紧密的键必须直接修改才有效,比如屏幕分辨率,虽然在外面也可以修改有,但在登录时加载到它之前是无效的,那么在登录的过程中屏幕就会因切换分辨率而闪烁。
自己修改注册表的前提是自己要知道所希望的改变要修注册表中的哪些键值。可以上网搜索,现在网上的这些资源多得是,实在找不到的话可以还可以用 RegMon 之类的注册表监视软件来定位。比如修改记事本的自动换行,又不知道相应的键值在哪。可以先开启 RegMon,然后在记事本中改变换行的选项,看 RegMon 的监视结果,来定位是哪个键值。因为系统本身也在不断的更改注册表,RegMon 中的显示会很多,但是通过不断的改变记事本中的设置,最终是可以找到的,这个过程需要的是耐心和细心。

五、添加驱动
  在外置程序目录中有一个比较重要的目录“PE_OUTERPART”,核心的外置组件都放在这里。里面有 4 个 CAB 压缩包,分别是 网卡/无线网卡/声卡/显卡 驱动包,而且加载的框架都已经搭好了,在 cmd 脚本中会自动调用 INFCACHEBUILD.EXE 处理驱动程序。我们要做的工作就是获取驱动程序文件,将它们放到相应的驱动包中。从本机上获取驱动文件有很多驱动备份工具,我用的是最笨的方法,在设备管理器中查看驱动程序详细信息,然后一个个复制文件,建一个目录,放到相应的驱动包中。中间有一个步骤,就是改一下复制出来的inf文件的名称,让它按文件名排序时可以排在最前面(我就是在文件名前面加了个下划线)。我不知道这一步是否是必须的。这样提取出来的驱动文件可能很大,测试成功后再删除一些不必要的驱动文件。有很多文件是可以删除的,可以参考原驱动包中同类驱动的文件,将类似的文件保留,其它删除。另一个笨办法是一个个删除,每删除一个测试一次,最终找到一个最小的驱动文件子集。

一、WinPE里添加驱动
  下图可以看见在VM里是认不出VM的显卡的。

  外置程序里的“Drviers_vga.cab” 这个cab包里放的就是显卡的驱动。

  解压出来可以看见没有vm的驱动。

  从vm的windows.iso里找到VM的显卡驱动。

  在刚才解压出来的Drivers_vga包的文件夹里新建一个文件夹,命名为vmware(其实叫什么都随便,但这样放的话以后好自己改至少知道是啥)。

  把vm的驱动放进该文件夹里。

  放进去后把刚才解压的目录重新用XCAB打包,切记一定要选中"处理inf"。

  现在,看看打包后的cab里就有vm驱动了。

  放回vmware里测试,已经能认出显卡了。

一、修改WinPE的OEM信息
  1、提取文件
  从WinPE镜像光盘中提取WinPE.IS_并解压,得到WinPE.ISO,提取其中需要的文件
  2、修改
  修改OEM文字信息请编辑OEMINFO.INI (用记事本编辑即可),修改OEM图标请用作图工具编辑
  3、替换文件&压包
  用UltraISO把修改好的文件替换到WinPE.ISO中对应的位置,再把WinPE.ISO用makecab压为WinPE.IS_文件,最后用UltraISO把刚压缩得到的WinPE.IS_替换到原始WinPE光盘(镜像)中生成新的WinPE光盘(镜像)

  备注:有的修改 OEM 信息是修改 Winpe.ini 文件。

 

二、ISO核心WinPE的X盘大小调整方案(以老毛桃0911为例) 
  从光盘镜像中找到核心文件WinPE.IS_,用WinRAR打开,把里面的WinPE.ISO提取出来,用ULTRAISO打开WinPE.ISO,找到WXPE\SYSTEM32\PECMD.INI文件,看到FBWF这行,这条命令就是用来设置X盘大小的,不需要懂原理,会用就可以了。
  命令参数如下: 
FBWF [P可用内存百分数] [L最小值] [H最大值] 
FBWF P20 L32 H64
 
  三个参数都可单独使用,如FBWF L64表示强制设置64M的FBWF;FBWF命令必须在MOUN命令之后,这样就可以设置X盘的大小了,把修改后的ISO保存,再用CAB压缩就OK。


三、WinPE启动内存计算 
  WinPE的启动内存和核心有关,大概为下面这个公式:
  a、用CAB压缩过的核心 
X*2+16(单位MB)(X为未压缩时的核心大小) 
  b、不用CAB压缩的核心 
X+32(单位MB)(X为未压缩时的核心大小) 
  这里就可以解释为什么NTFS IMG的核心一般不用CAB压缩,因为NTFS IMG格式的核心用CAB压缩效果很差,压缩率低,例如:50M的NTFS IMG用CAB压缩后才35M,而70M(里面有60M的文件)的FAT IMG用CAB压缩后,体积变成了26-29M左右。所以NTFS IMG不用CAB压缩,体积减小不多,而启动内存要加倍,因小失大。

 

四、关于安装配置文件txtsetup.sif的简单说明 
[WinntDirectories] 
这个字段是用代码表示文件拷贝的目标文件夹,其根目录为%WinDir%即安装指定的Windows文件夹。 
[SourceDiskFiles] 
根据前面设定的代码表示文件拷贝的具体细节,下面三段为集成SATA SCSI等驱动时所用 
[HardwareIdsDatebase]—硬件标识 
[SCSI.load]——SCSI驱动加载 
[SCSI]??——SCSI设备说明 
添加srs驱动实例:
  在WinPE中添加sata,raid驱动的方法(这里以Intel Matrix Storage Manager driver为例,以便于说明,以下描述的驱动文件名只基于本实例,实际操作中的具体的文件名称以需要添加的具体驱动为准) 
  1、准备材料:
  a、原版驱动文件 
  b、从WinPE中提取的txtsetup.sif文件 
  2、从WinPE中提取txtsetup.sif文件: 
  先将WinPE中的winpe.is_重命名为winpe.cab,然后用RAR解压出winpe.iso,用UltraISO打开它,将txtsetup.sif提取出来,并用记事本打开备用。
  3、修改txtsetup.sif文件 
  a、打开驱动包,里面有一个扩展名为“.inf”或“.oem”的小文件,如“oemsetup.inf”或者“txtsetup.oem”等(本例中为“txtsetup.oem”),用记事本打开备用; 
  b、在txtsetup.sif中查找[SourceDisksFiles]字段,在其下添加iaStor.sys=1,,,,,,4_,4,1,,,1,4 
  c、查找[SCSI.Load]字段,在其下添加iaStor=iaStor.sys,4 
  d、切换到刚才打开的txtsetup.oem,查找HardwareIds关键字,将该字段下的代码全部拷贝到txtsetup.sif文件的[HardwareIdsDatabase]字段末尾,但需要更改一下代码的格式,比如将id = "PCI\VEN_8086&DEV_27C3&CC_0104","iaStor"改为PCI\VEN_8086&DEV_27C3&CC_0104=iaStor 
  e、查找[SCSI]字段,在其下添加iaStor="Intel(R) 82801FBM SATA AHCI Controller (Mobile ICH6M)" 
至此,修改txtsetup.sif文件部分完成,将修改后的sif文件替换原来的文件。 
  4、复制驱动文件 
  将驱动文件iaStor.sys用makecab.exe压缩成iaStor.sy_并添加到PE的system32\DRIVERS目录下,然后将修改后的winpe.iso用makecab.exe重新压缩成winpe.is_替换原来的文件。至此整个添加驱动工作完成,重启动以测试成功与否。

 

五、修改WinPE注册表 
      要DIY核心,修改WinPE注册表是肯定要会的,先找到SYSTEM32目录下的setupreg.hi_,用WINRAR打开把里面的setupreg.hiv解压出来。打开开始菜单---运行----输入regedit,用鼠标选中HKEY_LOCAL_MACHINE项,然后单击文件---加载外部配置文件:

  然后找到刚刚的那个setupreg.hiv加载,然后提示项名称,这里随便填,方便区分。

  之后,你就可以修改1项里的注册表了,1项里的就是WinPE的注册表,修改完了后不要忘记卸载配置单元,选中1项,按文件—卸载配置单元。最后用CAB把修改好的setupreg.hiv文件压缩再替换原文件即可。