|
本人将学习制作PE插件过程对PE插件语法星星点点的理解连缀起来,集成一篇,希望能对学习制作PE的朋友有所帮助。
____________________________________________________________________________
本篇目录
一、文件头
(一)注释段
(二)版本段
(三)PEBuilder段
二、文件复制
(一)目标文件夹ID
(二)复制文件到目标文件夹
(三)复制整个文件夹到目标文件夹
三、注册表操作
(一)添加注册表键值
(二)删除注册表键值
四、其它文件操作
(一)添加行
(二)删除行
(三)修改行
(四)追加文件
五、变量
(一)自定义变量
(二)系统变量
六、附录
附录一 完整的目标文件夹ID的列表
附录二 PE制作相关网址
____________________________________________________________________________
一、文件头
定义PE插件的特征和状态,以便PEBuilder程序识别使用。分:注释段、版本段和PEBuilder段等三段。
(一)注释段
; PE Builder v3 plug-in INF file
; Created by Bart Lagerweij
; http://www.nu2.nu/pebuilder/
;
; Short description of what the plugin does...
这一段以分号起始,为插件注释,第一行为插件名,第二行为制作者,第三行为网站,最后一行为插件的简短描述。
在PEBuilder插件中以分号起始的行为注释行,只起到注解的作用,PEBuilder运行时不会理会这些行。
(二)版本段
[Version]
Signature= "$Windows NT$"
这两行信息必须添加到新建文件中,否则inf文件就不可用
(三)PEBuilder段
[PEBuilder]
Name=";Plugin_Name"
Enable=1
Help=";Plugin_Help.htm"
C" src="images/smilies/titter.gif" border=0 smilieid="9">rogramfile"
每个PEBuilder插件的inf文件都必须包含这一部分,此部分可以说是PE插件的标识,有4个参数:
Name是插件名称,即在PE Builder中显示的名称。
Enable是插件的默认初始状态,0表示插件在PE Builder中非激活,1则表示插件在PE Builder中默认激活。
Help是这个插件的帮助文件,这个可以省略。
Config是定义配置插件的程序文件,除非必要,一般省略。
实例1:
; PE Builder v3 plug-in INF file
; wb5.inf WindowBlinds v5.xx plugin v1.2.0.4
;
; Created by Gez
; Web: http://www.llanelly.com
[Version]
Signature= "$Windows NT$"
[PEBuilder]
Name="200 WindowBlinds 5.xx [Press 'Config' to setup plugin]"
Enable=0
Config=windowblinds5.exe
[SourceDisksFiles]
"please press 'Config' to setup your plugin"=a,,1
由于使用Config的比较少见,所以举了一个完整的例子,这个例子是911CD论坛上Gez制作的WindowBlinds 5.xx插件,引用时删除了关于版本历史的注释。使用这个插件时,首先要将插件放入PE Builder插件目录,然后运行该插件的配置程序windowblinds5.exe,生成最终使用的插件。
实例2:
; wps2005.inf
; PE Builder v3 plug-in INF file for WPS Office 2005 Professional
; Created by liuhj
[Version]
Signature= "$Windows NT$"
[PEBuilder]
Name="WPS Office 2005 Professional"
Enable=1
这是以前我写的WPS Office 2005 Professional插件的文件头,此插件的[PEBuilder]段省略了Help、Config。
____________________________________________________________________________
二、文件复制
从安装源(WinXP或Win2003安装盘或文件夹)、各插件目录复制文件到输出目录的目标文件夹。
(一)目标文件夹ID
1. 自定义目标文件夹ID
[WinntDirectories]
此部分使用固定语句格式:
directoryID=dirname[,attribute]
其中:
directoryID是要建立的目录ID,可以用字母a到z表示。
dirname是要建立的目录名称,如果目录名称中含有空格,需要在前后使用双引号。
attribute一般可以用这么几个值 (1,2,3):
1 - 表示在i386\下建立目录,而无论该目录是否为空;
2 - 表示在光盘根目录下建立目录,但如果该目录是空的话,则不会建立;
3 - 表示在光盘根目录下建立目录,而无论目录是否为空;
如果没有使用上面这3个值的话,默认的值是0,表示在i386\下建立目录,但如果该目录是空的话,则不会建立。
实例:
[WinntDirectories]
; 从光盘根目录创建“Bart”文件夹
a="Bart",3
; 从光盘根目录创建“Project\Bart\Source”文件夹
b="Project\Bart\Source",3
; 从I386目录创建“extra\files”文件夹
c="extra\files",1
对于一个插件来说,这一部分不是必须有的,这是因为系统内置了一些常用目标文件夹ID,当你制作的插件不需要拷贝文件,或者只向常用目录文件夹拷贝文件时,可以不使用[WinntDirectories]。
2. 系统内置的目标文件夹ID
PE Builder系统中内置一部分数字格式的DirectoryID表示常用的文件夹。如:
[DirectoriesID] = 文件夹
3000 = [root] ;注:输出根目录
1 = i386
2 = i386\system32
3 = i386\system32\config
4 = i386\system32\drivers
5 = i386\system
17 = i386\system32\drivers\etc
20 = i386\inf
21 = i386\Help
22 = i386\Fonts
24 = i386\msagent\intl
52 = i386\msagent
124 = i386\WinSxS
125 = i386\WinSxS\Manifests
252 = i386\WinSxS\Policies
这些目标文件ID比较常用,PE Builder帮助文档中也提到这些目标文件夹ID,比较完整的目标文件夹ID参见附录。
实例:
[SourceDisksFiles]
;从安装源复制文件至输出目录下I386目录
system.ini=1
win.ini=1
;从安装源复制文件至输出目录下i386\system32目录
ftp.exe=2
;从插件根目录下files文件夹复制文件至输出目录下i386\system32目录
files\bartpe.exe=2,,1
files\nv4_disp.dll=2,,1
;从插件根目录下files文件夹复制文件至输出目录下i386\system32\drivers目录
files\nv4_mini.sys=4,,1
;从安装源复制文件至输出目录下i386\system目录
avicap.dll=5
avifile.dll=5
;从插件根目录下files文件夹复制文件至输出目录下i386\inf目录
files\nv4_disp.inf=20,,1
;从插件根目录下复制文件至输出目录下i386\Help目录
winxpe.htm=21,,1
;支持通配符“*”,如从插件根目录下files文件夹中的所有CMD文件复制到输出目录下i386\system32目录
files\*.cmd=2,,1
;从安装源复制文件至输出目录下i386\Fonts目录
simsun.ttc=22
这里提到“安装源”,指制作PE的安装光盘的位置。
(二)复制文件到目标文件夹
[SourceDisksFiles][.Build]
此部分的作用是复制文件,如果你添加了一个构建版本号在节之后,那么只从构建版本复制文件。
以下是构建版本号与对应的操作系统之间的关系:
Build Version
2600 Windows XP
3790 Windows Server 2003
格式为:
filename=directoryID[,filenameRenamed][,attribute]
其中:
filename表示要复制的文件名称;
directoryID表示目标目录ID;
filenameRenamed表示目标文件名称,如果和源文件相同的话可以省略;
attribute可以用这么几个值 (1,2,4,8),默认值是1。
关于attribute的几个值:
1--表示使用pluginCheck(),检查该文件是否存在;
2——表示不要解压文件;
4--表示不检查该文件是否存在;
8——表示重命名文件到大写。
attribute一般取值为1或4,较少使用2和8。另外从安装源复制文件一般可以省略attribute,除非指定不检查该文件是否存在或者复制文件时重命名文件。
例如:
[SourceDisksFiles]
;将插件根目录下wbjj文件夹中的复制到输出目录下I386\System32中,并检查文件是否存在
wbjj\wbjju.ime=2,,1
wbjj\wbcodeu.dll=2,,1
;从安装源复制文件至输出目录下I386\System32目录,省略attribute
winabc.cwd=2
winabc.ime=2
winabc.ovl=2
winabc.cnt=2
winabc.hlp=2
;不检查文件是否存在
jschs.dll=2,,4
;不检查文件是否存在,并且如果存在将文件mfc40chs.dll重新命名为mfc40loc.dll
mfc40chs.dll=2,mfc40loc.dll,4
(三)复制整个文件夹到目标文件夹
[SourceDisksFolders]
此部分的作用是复制整个文件夹,格式是:
sourcepath=directoryID
其中:
sourcepath表示源文件夹的路径;
directoryID表示目标目录ID。
实例:
[WinntDirectories]
a="Programs\openoffice",2
[SourceDisksFolders]
; 当 openoffice 文件夹在插件目录时,使用相对路径
openoffice=a
[SourceDisksFolders]
; 当 openoffice 文件夹在 c:\ 根目录时,使用绝对路径
c:\openoffice=a
此例中,将插件目录中或C:\根目录下的OPENOFFICE文件夹下的所有文件(包括子文件夹)全部复制至输出目录下Programs\OPENOFFICE文件夹中。这种方法不用例举文件夹中每个文件,省时省力,是一种非常高效的方法,我特别喜欢用。
____________________________________________________________________________
三、注册表操作
注册表操作有两项:添加注册表键值和删除注册表键值。
(一)添加注册表键值
[Default.AddReg][.build] -对应HKCR\.DEFAULT---default
[Software.AddReg][.build] -对应HKLM\SOFTWARE---software
[SetupReg.AddReg][.build] -对应HKLM\SYSTEM---setupreg.hiv
这3项的作用是添加相应的注册表内容,格式都是:
regType, regKey, regvalue, regData
其中regType的值及其含义如下:
类型 含义
0x0 REG_NONE
0x1 REG_SZ
0x2 REG_EXPAND_SZ
0x3 REG_BINARY
0x4 REG_DWORD
0x7 REG_MULTI_SZ
实例:
[Software.AddReg]
0x0, "Microsoft\Windows NT\CurrentVersion\Fonts"
0x1, "Microsoft\Windows NT\CurrentVersion\Fonts", "Tahoma (TrueType)","TAHOMA.TTF"
0x2, "Control Panel\desktop", "WallPaper", "%systemroot%\system32\nu2.bmp"
0x3, "ControlSet001\Control\TimeZoneInformation", "DaylightStart",\
00,00,04,00,00,01,00,02,00,00,00,00,00,00,00,00
0x4, "ControlSet001\Control\GraphicsDrivers\DCI", "Timeout", 0x7
0x7, "ControlSet001\Services\VgaSave\Device0", "InstalledDisplayDrivers","vga", "framebuf", "vga256", "vga64k"
添加注册表键值是制作PE插件过程中使用最多、操作最繁琐的工作,好在PE制作高手们早就制作了将注册表文件转换为PE插件INF文件的工具,比较好的有:Reg2PE、ConvRegToInf。
(二)删除注册表键值
[Software.DelReg][.build]、[Default.DelReg][.build]和[SetupReg.DelReg][.build]
这两项是删除相关的注册表键值。格式是:
regKey[.regvalue]
实例:
[SetupReg.DelReg.2600]
"ControlSet001\Services\vds"
[SetupReg.DelReg]
"ControlSet001\Services\Messenger"
说实话,使用上面的方法删除注册表键值我还没有成功过,并不是语句有什么问题,上面例子中第一个是XPE插件中的语句,也一样没有删除vds服务。对于需要删除的注册表键值,我是在制作后期处理的时候,使用批处理删除:
1. 使用REG LOAD命令加载PE注册表配置单元。
2. 使用REG DELETE命令删除PE注册表键值,或者使用REG IMPORT导入注册表文件。
3. 使用REG UNLOAD命令卸载PE注册表配置单元。
当然除了使用批处理之外,也可以使用注册表编辑器加载配置单元、卸载配置单元来处理。
____________________________________________________________________________
四、其它文件操作
主要操作PEBuilder从安装源拷贝至输出目录的INF文件和txtSetup.sif文件,以及NU2MENU作Shell时的开始菜单配置文件NU2MENU.XML。
操作方法有:添加行、删除行、修改行和追加文件等四种。
(一)添加行
[AddLine][.build]
这一项的作用是在指定的windows系统的inf文件中添加内容。格式是:
Filename,Section,StringToAdd
实例:
[AddLine.2600]
"netmscli.inf", "MSClient.DelReg", "HKLM, Software\Microsoft\Rpc\SecurityService, 9"
(二)删除行
[DelLine][.build]
这一项的作用是在指定的windows系统的inf文件中删除内容。格式是:
Filename,Section,StringToDel,MaintainServerList
实例:
[DelLine.3790]
"netmscli.inf", "MSClient.Browser.AddReg", "HKR, Parameters, MaintainServerList,"
(三)修改行
[Setvalue][.build]
这一项的作用是改变指定的windows系统中的inf文件的某一项内容。格式是:
Filename,Section,Key,value
实例:
[SetValue.2600]
"netmscli.inf", "Alerter_Service_Inst", "StartType", "3"
使用 Filename,Sectiion,Key删除一个键值
使用 Filename,Section删除一个完整节
(四)追加文件
Append[.build]
这一项的作用是向一个文件追加文件。格式是:
Filename,FilenameToAppend
实例:
[Append]
nu2menu.xml, ultravnc_nu2menu.xml
从实例可以看出,这一项主要是操作Nu2Menu的配置文件Nu2Menu.xml的。现在大多制作XPE,上面实例中的语句没有用处,而且报错,应该注释掉它,如下面:
[Append]
; nu2menu.xml, ultravnc_nu2menu.xml
____________________________________________________________________________
五、变量
PEBuilder支持自定义变量和系统变量两种变量,合理使用变量会使PE插件更加便于维护。
(一)自定义变量
[Strings]
定义INF文件中的字符串变量,然后依以下格式引用:%变量名%。
实例:
[Strings]
RamDiskDriveLetter="B:"
[SetupReg.AddReg]
0x2, "ControlSet001\Control\Session Manager\Environment", "temp", "%RamDiskDriveLetter%"
0x2, "ControlSet001\Control\Session Manager\Environment", "tmp", "%RamDiskDriveLetter%"
在Strings段中定义字符串变量RamDiskDriveLetter为B:,然后以%RamdiskdriveLetter%引用。
(二)系统变量
PE Builder内置的系统变量:
Program——制作程序名,默认为PE-Builder
Version制作程序版本
IsoFile——ISO镜像的完整路径和文件名
OutDir——输出文件夹的完整路径
SourcePath——源文件夹的完整路径
PluginDir——当前插件文件夹的完整路径
PluginFile——当前插件文件的完整路径和文件名
Language——当前语言
Verbose——Verbose 模式 (0 means off, 1 means on)
Build——Windows构建版本 (2600 表示 XP, 3790 表示 server 2003)
系统变量引用方法为:@变量名@
注意系统变量的引用方法与自定义变量的引用方法不同。
实例:
[SourceDisksFiles]
program.exe=2,,3
lang\@language@.lng=2,,3
@SourcePath@I386\input.inf=20
还有一种特殊的变量引用:
[SourceDisksFiles]
%11%\emptyregdb.dat=2,,4
%11%表示本地硬盘系统的%SystemRoot%\System32目录。XPE 1.05及其以后版本的XPE.INF文件中有此语句,而且运行完全正确。
大家知道在微软安装配置文件(INF文件)中%11%表示本地硬盘系统的%SystemRoot%\System32目录,PEBuilder的插件(INF文件)与微软安装配置文件(INF文件)有些类似,不知微软安装配置文件(INF文件)中的其它变量也可以这样引用?
____________________________________________________________________________
六、附录
附录一 完整的目标文件夹ID的列表:
[DirectoriesID] = 文件夹
3000 = [root] ;注:输出根目录
1 = i386
2 = i386\system32
3 = i386\system32\config
4 = i386\system32\drivers
5 = i386\system
7 = i386\system32\ras
9 = i386\system32\spool
10 = i386\system32\spool\drivers
11 = i386\system32\spool\drivers\w32x86\3
12 = i386\system32\spool\prtprocs
13 = i386\system32\spool\prtprocs\w32x86
14 = i386\system32\wins
15 = i386\system32\dhcp
16 = i386\repair
17 = i386\system32\drivers\etc
18 = i386\system32\spool\drivers\w32x86
19 = i386\system32\drivers\disdn
20 = i386\inf
21 = i386\Help
22 = i386\Fonts
23 = i386\Config
24 = i386\msagent\intl
25 = i386\Cursors
26 = i386\Media
27 = i386\java
28 = i386\java\classes
29 = i386\java\trustlib
30 = i386\system32\ShellExt
31 = i386\Web
32 = i386\system32\Setup
33 = i386\Web\printers
34 = i386\system32\spool\drivers\color
35 = i386\system32\wbem
36 = i386\system32\wbem\Repository
37 = i386\addins
38 = i386\Connection Wizard
39 = i386\Driver Cache\i386
40 = i386\security
41 = i386\security\templates
42 = i386\system32\npp
43 = i386\system32\ias
44 = i386\system32\dllcache
45 = i386\Temp
46 = i386\Web\printers\images
47 = i386\system32\export
48 = i386\system32\wbem\mof\good
49 = i386\system32\wbem\mof\bad
50 = i386\twain_32
51 = i386\msapps\msinfo
52 = i386\msagent
53 = i386\msagent\chars
54 = i386\security\logs
55 = i386\system32\icsxml
57 = i386\system32\mui
58 = %MUI_PRIMARY_LANG_ID_DIR% ;注:对于简体中文系统即指i386\system32\mui\0804
59 = i386\system32\mui\dispspec
60 = i386\AppPatch
61 = i386\Debug
62 = i386\Debug\UserMode
63 = i386\system32\oobe
67 = i386\Help\Tours
68 = i386\Resources\Themes\Luna
69 = i386\Resources\Themes\Luna\Shell\NormalColor
70 = i386\system32\oobe\html\ispsgnup
71 = i386\system32\oobe\html\mouse
72 = i386\system32\oobe\html\oemcust
73 = i386\system32\oobe\html\oemhw
74 = i386\system32\oobe\html\oemreg
75 = i386\system32\oobe\images
76 = i386\system32\oobe\setup
77 = i386\system32\oobe\sample
78 = i386\Resources\Themes\Luna\Shell\Metallic
79 = i386\Resources\Themes\Luna\Shell\Homestead
91 = i386\Help\Tours\mmTour
92 = i386\Help\Tours\htmlTour
93 = i386\Provisioning\Schemas
100 = i386\system32\1025
101 = i386\system32\1028
102 = i386\system32\1031
103 = i386\system32\1033
104 = i386\system32\1037
105 = i386\system32\1041
106 = i386\system32\1042
107 = i386\system32\1054
108 = i386\system32\2052
109 = i386\system32\3076
110 = i386\system32\wbem\xml
111 = i386\system32\usmt
112 = i386\system32\inetsrv
123 = i386\mui
124 = i386\WinSxS
125 = i386\WinSxS\Manifests
126 = i386\WinSxS\InstallTemp
127 = i386\ime
129 = i386\Resources\Themes
130 = i386\ime
132 = i386\ime\imejp
133 = i386\System32\IME\PINTLGNT
134 = i386\System32\IME\CINTLGNT
135 = i386\System32\IME\TINTLGNT
136 = i386\IME\CHTIME\Applets
137 = i386\ime\imejp98
138 = i386\ime\imejp\applets
139 = i386\pchealth\helpctr\binaries
180 = i386\system32\3com_dmi
181 = i386\PeerNet
239 = i386\system32\wbem\Logs
240 = i386\ehome
252 = i386\WinSxS\Policies
这段目标文件夹ID列表是从网上找的,其中127和130均表示I386\IME,这没有错。这些ID我没有一一测试,但由于这两个ID指向一个目录,所以进行了测试,我建了127.txt、130.txt两个空文本文件,分别拷贝到127、130两个ID,结果都拷贝到了I386\IME目录中。
实际使用中比较多的,还是使用比较常用的目标文件夹ID,再加上自定义目标文件夹ID的方法来编写插件。
实例:
[SourceDisksFiles]
hhctrlui.dll=58
此语句将从安装源复制hhctrlui.dll文件至输出目录下i386\system32\mui\0804目录。
xpe-help.inf插件中此语句为:hhctrlui.dll=2,表示从安装源复制hhctrlui.dll文件至输出目录下i386\system32目录。
这两者是有区别的,使用前者hhctrlui.dll=58,在生成的XPE中打开帮助,帮助菜单是中文的,而使用后者时帮助菜单是英文的。
为什么会这样呢?原因是Sherpya的XPE插件是针对英文环境的,因此在中文环境使用XPE插件与英文环境中使用XPE插件有所不同也在情理之中。
从这个例子看,不要迷信别人制作的插件,要自己分析,勇于实践,不断修改制作才成。
附录二 PE制作相关网址:
911CD论坛云集了世界各地的PE制作的精英,有使用OPK/AIK的、有使用PEBuilder的,也有使用WinBuilder的。
911CD论坛:http://www.911cd.net/forums/
下面列出的是与PEBuilder相关的四个主要官方网站:
Bart PE Builder官方网站: http://www.nu2.nu/pebuilder/
Sherpya XPE官方网站:http://winpe.sourceforge.net/
Reatogo-X-PE官方网站:http://www.reatogo.de/
UBCD4WIN官方网站:http://www.ubcd4win.com/
注:Reatogo-X-PE和UBCD4Win两家PE制作工具使用OEM版的PEBuilder,各具特色,值得关注。
____________________________________________________________________________
[ 本帖最后由 liuhj 于 2007-8-27 07:49 PM 编辑 ] |
|