深入浅出进入PE世界[网络转载]
前言:本文只是以偶在研究是所看到的一个PE产生的简单过程,带领您进入这个神秘的世界,偶并不打算
教你如何生成像老毛桃先生这么小的PE光盘作品,因为其研究过程很漫长,引用老毛桃的话来说,“老九
用了一年的时间才产生得到一个近120多MB的WinPE系统,自己又花了近半年的时间对它进行精简优化,最
后才得到解压后为51MB左右的WINPE”,这里不是指压缩后的21.XXMB的体积,偶认为会误导某些人,认为
Windows的内核最小是21MB,我们要以实事求是的态度来了解这个操作系统,了解它的产生过程,当然,
偶研究的时间很短,也许了解得不大全面或是有误,见谅了,PE高手请略过本文。OK,下面开始:
一、了解什么是PE。
PE英文为Windows Preinstallation Environment的缩写,意为Windows预安装环境,用MS帮助上的说明来
说,是带有有限服务的最小 Win32 子系统,它基于以受保护模式运行的 Windows?XP Professional 内核
。它包括运行 Windows 安装程序、从网络共享安装操作系统、自动化基本过程,以及执行硬件验证所需
的最基本功能。。某些人可能会对这些所谓的名词感到疑惑,不妨换个思考的角度,PE是什么?偶说,它
是一个操作系统,类似于DOS,只不过内核是NT的内核,支持NTFS文件系统,可在光盘上运行的一个操作
系统。
二、PE的历史背景。
PE最早是微软发布的一种光盘预安装系统,当时的出现让人很振奋,因为在它出现之前,DOS只能借第三
方软件的支持下才能访问NTFS格式的磁盘文件,而且还不全兼容。不过好境不长,当人们从微软的网站上
下载这个PE系统,并使用后,因为这个微软的WinPE启动后只有一个黑框框——CMD命令行窗口,什么桌面
啊,开始菜单啊,任务条什么的全都没有,我要运行任务管理器,怎么办?输入Taskmgr回车,这下出来
了,我要运行注册表编辑器怎么办?输入Regedit,出来了,我要分区?输入Diskpart,又是一大堆命令
,这下难到了一大批尝鲜者,都鼠标一统天下的时代了,但会玩命令行的只有以前的DOS高手了,所以PE
渐渐被人们所遗忘。还好,这个时候,总会有技术强人出来继续PE的研究,沉默一段时间后,终于以Bart
(巴特)这样的技术先锋为首的人,突破性研究出为PE添加各种系统文件,为PE穿上XP的漂亮外衣的办法
,才让PE从死谷里走出来,走入我们的日常生活中。让我们记住他——Bart和他的——Bart’s PE
Builder软件!
备注:用Bart的原话来讲,用PeB生成的Winpe已不是MS的那个PE了,两者不同,请要不要搞混了,更不要
向MS寻求技术支持,PEB本身是免费的。MS的有版权,而且每用24小时会自动关闭系统,既所谓的资源限
制。
三、当今国内、国外PE研究发展的情况。
国内研究PE的前锋当属无忧论坛无疑,(有兴趣的可以去那里看看)大家熟知的深山红叶PE系统工具箱和
老九、老毛的迷你WinPE系统均出自那里,当然,从一些资深人士来说,PE在国内也向这些系统制作人一
样,分成了两派,一派为深山红叶那种无桌面派的简洁派,一派为老九、老毛那种有XP桌面的桌面派。他
们都是成功的PE系统制作者,还有无忧上新进的一批VC++高手等,因为有了他们,才会有今天PE的实用价
值的存在。在国外,PE研究非常热,有很多的著名坛子,当然有Bart’s的坛子,还有LiveCD,911CD,以
及MSFN的坛子等,无数的老外制作了数不胜数的PE插件丰富资源,如Shell壳插件有GeoShell,Windows
Explorer(一个类拟于98菜单的壳,好像是俄罗斯人写的),XPE,Xbox等著名插件等,网络类的PPPOE拨
号插件,硬件类的USB即插即用接口插件,还有各种各样的软件类插件,大大丰富了PE的应用价值,很多
老外都在做自己的光盘Live系统,人家大多不是追求光盘有多小,而是比这个光盘用了多少外部插件,能
提供什么功能,偶看到老外做出来基本上都有300多MB之巨,当然功能更全,在上面打DX游戏的都有,人
家完全是在玩光盘Live系统。
四、无桌面派PE的制作方法。
为什么把深山红叶的那种光盘称为无桌面派,这个说法有点免强,必竞只是Shell壳的不同,只是不能在
桌面上或是任务栏上点右键而矣,偶觉得除了这点外,和有桌面的PE操作起来差不多吧。准备好我们的工
具:PE Builder 3.0.4或是3.1.0版软件(以后简称PEB),母盘用WinXP SP2完整版(切记不要用精简版
XP,包括D大的光盘也不行,会报错的,影响制作时查错),一些绿色的小软件,WinRAR压缩包制作软件
,同时下载偶提供的这个从国外的坛子里下载到的PE插件——GeoShell V2.0和偶修改过的PE中文插件,
当然,必要的测试装备,虚拟机也要准备好,本次提供VPC家族中最快的 5.2全版下载。另外,偶也向国
外的坛子学习,不提供PE成品盘,只提供PE插件和制作方法。
(1).将下载的PEB安装或是解压到一个目录下。
(2).将偶提供的这两个插件解压放入PEB目录下的Plugins目录中。
(3).将XP原光盘插入虚拟光驱,或是用UltraIso一类的软件提取到硬盘某目录下。
(4).编辑PEB目录下nu2menu目录中的nu2menu.xml文件,将里面的部分DD换成中文的,如下表类拟的样
子。
<NU2MENU>
<MENU ID="Startmenu">
<MITEM TYPE="ITEM">★ MiniOS WinXPE ★</MITEM>
<MITEM TYPE="SEPARATOR"></MITEM>
<MITEM TYPE="POPUP" DISABLED="@SetMenuPos( 'L','B' )0" MENUID="System program">◆系统附
件</MITEM>
<MITEM TYPE="POPUP" MENUID="Control pan">◆控制面板</MITEM>
<MITEM TYPE="POPUP" MENUID="System config">◆系统配置</MITEM>
<MITEM TYPE="SEPARATOR"></MITEM>
<MITEM TYPE="POPUP" MENUID="Software Tools">常用工具软件</MITEM>
<MITEM TYPE="POPUP" MENUID="Software Recover">数据恢复软件</MITEM>
<MITEM TYPE="POPUP" MENUID="Software Disk">磁盘工具软件</MITEM>
<MITEM TYPE="POPUP" MENUID="Software Ghost">Ghost 8.3 备份/恢复</MITEM>
<MITEM TYPE="SEPARATOR"></MITEM>
简单解释一下这个PEB中的XML格式,所有的东西都是以<XXXX>为开头</XXXX>为结尾的格式配对,我们修
改这个文件可以在Winpe中添加主菜单,子菜单,以及子菜单项和它们所对应的程序,基本格式都是固定
的。如下面这行
<MITEM TYPE="POPUP" MENUID="Control pan">◆控制面板</MITEM> ,这行前面指出MITEM为弹出式菜单
“POPUP”类型,子联项MenuID=” Control pan”是偶自定义添加的ID值,菜单中文显示名为“◆控制面
板”,最后以</MITEM>为结尾。效果如图所示:多比较一下里面相同部分和不同分部,你也会得到和偶一
样的结果,当然自己就可以随意的添加菜单项了。<MITEM TYPE="SEPARATOR"></MITEM>这条是显示一个分
格符。
(5).编写Ghost插件为PE添加Ghost功能。
; ghost.inf
; PE Builder v3 plug-in INF file for Symantec Ghost32
; Created by Bart Lagerweij
[Version]
Signature= "$Windows NT$"
[PEBuilder]
Name="Symantec Ghost 8.3"
Enable=1
[WinntDirectories]
a="Programs/ghost",2
[SourceDisksFiles]
files/ghost32.exe=a,,3
files/ghostexp.exe=a,,3
[Software.AddReg]
0x0, "Classes/.gho"
0x1, "Classes/.gho", "", "Ghost"
0x0, "Classes/Ghost"
0x1, "Classes/Ghost", "", "Ghost image file"
0x0, "Classes/Ghost/DefaultIcon"
0x2, "Classes/Ghost/DefaultIcon", "", "%SystemDrive%/Programs/ghost/ghostexp.exe,0"
0x0, "Classes/Ghost/shell"
0x0, "Classes/Ghost/shell/open"
0x0, "Classes/Ghost/shell/open/command"
0x2, "Classes/Ghost/shell/open/command", "", "%SystemDrive%/Programs/ghost8/ghostexp.exe "%
1""
将上面这段码复制到一个文本文件中,并改名为INF为后辍。在PEB的Plugins目录下创建Ghost83文件夹,
然后在这个文件夹下面再建立一个Files目录,同时把你的Ghost32.exe和GhostExp.exe文件放Files目录
中,并将刚才那个INF放Ghost83目录中。
五、有桌面派PE的制作方法。(此过程稍有点长,也是本文的重点)
六、PE的减肥方法
PE如果是用PEB或是MS本身的光盘,体积都有点大,MS的有300MB之巨,如果你想让PE的体积变得小一些,
那么就需要对它进行减肥,有些PE上面的文件并不是系统必需的东西,或是PE软件不会用到的DLL相关文
件。偶在阅读MS PE帮助的时候看到这么一条相关说明,就是如何制作最小化的PE,MS给出了相关的说明
和可删除的文件列表,并出示了一段批处理的代码,偶觉得非常兴奋,不过有趣的是,这段代码居然有错
,根本无法执行。偶对For循环并不在行,好在偶耐下性子,边看MS的帮助,边调试这个批处理,几改几
改的,终于把这个批处理搞得正常运作了,呵呵,成功的删除了MS给出的列表文件中的可删除文件,不过
后来测试,这个列表中的文件也不见得真正可删,有部分文件在测试中还需要用到,如Diskcopy.dll实际
上是格式化驱动器的支持文件,需要用这个功能的最好不要删,这里提供出来仅做参考。
fonts/AHRONBD.TTF
fonts/ANDLSO.TTF
fonts/ANGSA.TTF
fonts/ANGSAB.TTF
fonts/ANGSAI.TTF
fonts/ANGSAU.TTF
fonts/ANGSAUB.TTF
fonts/ANGSAUI.TTF
fonts/ANGSAUZ.TTF
fonts/ANGSAZ.TTF
fonts/ARIAL.TTF
fonts/ARIALBD.TTF
fonts/ARIALBI.TTF
fonts/ARIALI.TTF
fonts/ARIBLK.TTF
fonts/ARTRBDO.TTF
fonts/ARTRO.TTF
fonts/BROWA.TTF
fonts/BROWAB.TTF
fonts/BROWAI.TTF
fonts/BROWAU.TTF
fonts/BROWAUB.TTF
fonts/BROWAUI.TTF
fonts/BROWAUZ.TTF
fonts/BROWAZ.TTF
fonts/CGA40850.FON
fonts/CGA40WOA.FON
fonts/CGA80850.FON
fonts/CGA80WOA.FON
fonts/COMIC.TTF
fonts/COMICBD.TTF
fonts/CORDIA.TTF
fonts/CORDIAB.TTF
fonts/CORDIAI.TTF
fonts/CORDIAU.TTF
fonts/CORDIAUB.TTF
fonts/CORDIAUI.TTF
fonts/CORDIAUZ.TTF
fonts/CORDIAZ.TTF
fonts/COUR.TTF
fonts/COURBD.TTF
fonts/COURBI.TTF
fonts/COURE.FON
fonts/COURF.FON
fonts/COURI.TTF
fonts/DAVID.TTF
fonts/DAVIDBD.TTF
fonts/DAVIDTR.TTF
fonts/DOSAPP.FON
fonts/EGA40850.FON
fonts/EGA40WOA.FON
fonts/EGA80850.FON
fonts/EGA80WOA.FON
fonts/ESTRE.TTF
fonts/FRAMD.TTF
fonts/FRAMDIT.TTF
fonts/FRANK.TTF
fonts/GAUTAMI.TTF
fonts/GEORGIA.TTF
fonts/GEORGIAB.TTF
fonts/GEORGIAI.TTF
fonts/GEORGIAZ.TTF
fonts/IMPACT.TTF
fonts/KARTIKA.TTF
fonts/L_10646.TTF
fonts/LATHA.TTF
fonts/LSANS.TTF
fonts/LSANSD.TTF
fonts/LSANSDI.TTF
fonts/LSANSI.TTF
fonts/LUCON.TTF
fonts/LVNM.TTF
fonts/LVNMBD.TTF
fonts/MANGAL.TTF
fonts/MODERN.FON
fonts/MRIAM.TTF
fonts/MRIAMC.TTF
fonts/MRIAMFX.TTF
fonts/MRIAMTR.TTF
fonts/MVBOLI.TTF
fonts/NRKIS.TTF
fonts/PALA.TTF
fonts/PALAB.TTF
fonts/PALABI.TTF
fonts/PALAI.TTF
fonts/RAAVI.TTF
fonts/ROD.TTF
fonts/RODTR.TTF
fonts/ROMAN.FON
fonts/SCRIPT.FON
fonts/SERIFE.FON
fonts/SERIFF.FON
fonts/SHRUTI.TTF
fonts/SIMPBDO.TTF
fonts/SIMPFXO.TTF
fonts/SIMPO.TTF
fonts/SMALLE.FON
fonts/SSERIFF.FON
fonts/SYLFAEN.TTF
fonts/SYMBOL.TTF
fonts/TAHOMABD.TTF
fonts/TIMES.TTF
fonts/TIMESBD.TTF
fonts/TIMESBI.TTF
fonts/TIMESI.TTF
fonts/TRADBDO.TTF
fonts/TRADO.TTF
fonts/TREBUC.TTF
fonts/TREBUCBD.TTF
fonts/TREBUCBI.TTF
fonts/TREBUCIT.TTF
fonts/TUNGA.TTF
fonts/UPCDB.TTF
fonts/UPCDBI.TTF
fonts/UPCDI.TTF
fonts/UPCDL.TTF
fonts/UPCEB.TTF
fonts/UPCEBI.TTF
fonts/UPCEI.TTF
fonts/UPCEL.TTF
fonts/UPCFB.TTF
fonts/UPCFBI.TTF
fonts/UPCFI.TTF
fonts/UPCFL.TTF
fonts/UPCIB.TTF
fonts/UPCIBI.TTF
fonts/UPCII.TTF
fonts/UPCIL.TTF
fonts/UPCJB.TTF
fonts/UPCJBI.TTF
fonts/UPCJI.TTF
fonts/UPCJL.TTF
fonts/UPCKB.TTF
fonts/UPCKBI.TTF
fonts/UPCKI.TTF
fonts/UPCKL.TTF
fonts/UPCLB.TTF
fonts/UPCLBI.TTF
fonts/UPCLI.TTF
fonts/UPCLL.TTF
fonts/VERDANA.TTF
fonts/VERDANAB.TTF
fonts/VERDANAI.TTF
fonts/VERDANAZ.TTF
fonts/VGA850.FON
fonts/VGA860.FON
fonts/VGA861.FON
fonts/VGA863.FON
fonts/VGA865.FON
fonts/VGAFIX.FON
fonts/VGAOEM.FON
fonts/VGASYS.FON
fonts/VRINDA.TTF
fonts/WEBDINGS.TTF
fonts/WINGDING.TTF
spcmdcon.sys
bootfix.bin
System32/Drivers/te_protu.qm
System32/Drivers/gm.dls
System32/Drivers/te_protu.sm
System32/Drivers/*.bin
System32/Drivers/*.usa
System32/Drivers/*.t4
System32/Drivers/te_protm.pm2
System32/Drivers/el656ct5.sys
System32/Drivers/fusbbase.sys
System32/Drivers/fxusbase.sys
System32/Drivers/fpcibase.sys
System32/Drivers/fpcmbase.sys
System32/Drivers/atmuni.sys
System32/Drivers/stlnata.sys
System32/Drivers/EMU10K1M.SYS
System32/Drivers/cinemst2.sys
System32/Drivers/el656se5.sys
System32/Drivers/digirlpt.sys
inf/net10.inf
System32/DRIVERS/tdkcd31.sys
inf/net1394.inf
inf/net3c556.inf
System32/DRIVERS/EL556ND5.sys
inf/net3c589.inf
System32/DRIVERS/el589nd5.sys
inf/net3c985.inf
System32/DRIVERS/el985n51.sys
inf/net3sr.inf
System32/DRIVERS/srwlnd5.sys
inf/net5515n.inf
System32/DRIVERS/ip5515.sys
inf/net557.inf
System32/DRIVERS/e100b325.sys
inf/net559ib.inf
System32/DRIVERS/D100IB5.SYS
inf/net575nt.inf
System32/DRIVERS/el575ND5.sys
inf/net650d.inf
System32/DRIVERS/dfe650d.sys
inf/net656c5.inf
System32/DRIVERS/el656CD5.sys
inf/net656n5.inf
System32/DRIVERS/el656ND5.sys
inf/net713.inf
System32/DRIVERS/mxnic.sys
inf/net83820.inf
System32/DRIVERS/DP83820.sys
inf/net8511.inf
System32/DRIVERS/ADM8511.SYS
inf/netac300.inf
System32/DRIVERS/ac300nd5.sys
inf/netali.inf
System32/DRIVERS/ALI5261.SYS
inf/netambi.inf
System32/DRIVERS/AMB8002.SYS
inf/netamd.inf
System32/DRIVERS/pcntn5m.sys
inf/netamd2.inf
System32/DRIVERS/pcntpci5.sys
inf/netamdhl.inf
System32/DRIVERS/pcntn5hl.sys
inf/netan983.inf
System32/DRIVERS/an983.sys
inf/netana.inf
System32/DRIVERS/adptsf50.sys
inf/netasp2k.inf
System32/DRIVERS/aspndis3.sys
inf/netb57xp.inf
System32/DRIVERS/b57xp32.sys
inf/netbcm4e.inf
System32/DRIVERS/BCM4E5.SYS
inf/netbcm4p.inf
System32/DRIVERS/bcm42xx5.sys
inf/netbcm4u.inf
System32/DRIVERS/bcm42u.sys
inf/netbrzw.inf
System32/DRIVERS/BRZWLAN.sys
inf/netcb102.inf
System32/DRIVERS/cb102.sys
inf/netcb325.inf
System32/DRIVERS/CB325.SYS
inf/netcbe.inf
System32/DRIVERS/cben5.sys
inf/netce2.inf
System32/DRIVERS/ce2n5.sys
inf/netce3.inf
System32/DRIVERS/CE3N5.SYS
inf/netcem28.inf
System32/DRIVERS/cem28n5.sys
inf/netcem33.inf
System32/DRIVERS/cem33n5.sys
inf/netcem56.inf
System32/DRIVERS/cem56n5.sys
inf/netcicap.inf
inf/netclass.inf
inf/netcpqc.inf
System32/DRIVERS/cnxt1803.sys
inf/netcpqg.inf
System32/DRIVERS/n1000nt5.sys
inf/netcpqi.inf
System32/DRIVERS/n100325.sys
inf/netcpqmt.inf
System32/DRIVERS/cpqtrnd5.sys
System32/ctmasetp.dll
System32/DRIVERS/rocket.sys
inf/netdefxa.inf
System32/DRIVERS/DEFPA.sys
inf/netdf650.inf
System32/DRIVERS/dfe650.sys
inf/netdgdxb.inf
System32/DRIVERS/bioprime.bin
inf/netdlh5x.inf
System32/DRIVERS/DLH5XND5.sys
inf/netdm.inf
System32/DRIVERS/DM9PCI5.SYS
inf/nete1000.inf
System32/DRIVERS/e1000nt5.sys
inf/nete100i.inf
System32/DRIVERS/E100ISA4.sys
inf/netejxmp.inf
System32/DRIVERS/IBMEXMP.sys
inf/netel515.inf
System32/DRIVERS/EL515.sys
inf/netel574.inf
System32/DRIVERS/el574nd4.sys
inf/netel5x9.inf
inf/netel90a.inf
System32/DRIVERS/el90xnd5.sys
inf/netel90b.inf
System32/DRIVERS/el90xbc5.sys
inf/netel980.inf
System32/DRIVERS/el98xn5.sys
inf/netel99x.inf
System32/DRIVERS/EL99XN51.SYS
System32/DRIVERS/EL99XRUN.OUT
inf/netepicn.inf
System32/DRIVERS/lanepic5.sys
inf/netepro.inf
System32/DRIVERS/epro4.sys
inf/netex10.inf
System32/DRIVERS/ex10.sys
inf/netf56n5.inf
inf/netfa312.inf
System32/DRIVERS/FA312nd5.sys
inf/netfa410.inf
System32/DRIVERS/fa410nd5.sys
inf/netfjvi.inf
System32/DRIVERS/f3ab18xi.sys
inf/netfjvj.inf
System32/DRIVERS/f3ab18xj.sys
inf/netfore.inf
System32/DRIVERS/PCA200E.BIN
System32/DRIVERS/PCA200E.SYS
inf/netforeh.inf
System32/DRIVERS/FOREHE.SYS
inf/netibm.inf
System32/DRIVERS/IBMTOK.sys
inf/netibm2.inf
System32/DRIVERS/IBMTRP.SYS
inf/netklsi.inf
System32/DRIVERS/usb101et.sys
inf/netktc.inf
System32/DRIVERS/KTC111.SYS
inf/netlm.inf
System32/DRIVERS/lmndis3.sys
inf/netlm56.inf
inf/netlnev2.inf
System32/DRIVERS/LNE100.SYS
inf/netmadge.inf
System32/DRIVERS/mdgndis5.sys
inf/netmhzn5.inf
System32/DRIVERS/xem336n5.sys
inf/netnf3.inf
System32/DRIVERS/NetFlx3.sys
inf/netngr.inf
System32/DRIVERS/Ngrpci.sys
inf/netnovel.inf
System32/DRIVERS/ne2000.sys
inf/netosi2c.inf
System32/DRIVERS/otc06x5.sys
inf/netosi5.inf
System32/DRIVERS/otceth5.SYS
inf/netpc100.inf
System32/DRIVERS/pc100nds.sys
inf/netpnic.inf
System32/DRIVERS/lne100tx.sys
inf/netpwr2.inf
System32/DRIVERS/smcpwr2n.sys
inf/netrlw2k.inf
System32/DRIVERS/rlnet5.sys
inf/netsis.inf
System32/DRIVERS/sisnic.sys
inf/netsk98.inf
System32/DRIVERS/sk98xwin.SYS
inf/netsk_fp.inf
System32/DRIVERS/SkFpWin.SYS
inf/netsla30.inf
System32/DRIVERS/Sla30nd5.sys
inf/netsmc.inf
System32/DRIVERS/smc8000n.sys
inf/netsnip.inf
inf/nettb155.inf
System32/DRIVERS/tbatm155.sys
inf/nettdkb.inf
System32/DRIVERS/tdk100b.sys
inf/nettiger.inf
System32/DRIVERS/tjisdn.sys
inf/nettpro.inf
System32/DRIVERS/tpro4.sys
inf/netvt86.inf
System32/DRIVERS/fetnd5.sys
inf/netw840.inf
System32/DRIVERS/W840ND.sys
inf/netw926.inf
System32/DRIVERS/w926nd.sys
inf/netw940.inf
System32/DRIVERS/w940nd.sys
inf/netwlan.inf
System32/DRIVERS/NetWlan5.img
System32/DRIVERS/NetWlan5.sys
inf/netwlan2.inf
System32/DRIVERS/wlandrv2.sys
inf/netwv48.inf
System32/DRIVERS/wlluc48.sys
inf/netx500.inf
System32/DRIVERS/pcx500.sys
inf/netx56n5.inf
inf/netxcpq.inf
System32/DRIVERS/cpqndis5.sys
WinSxS/x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.0.0_x-ww_8d353f13/gdiplus.dll
system32/kbdbe.dll
system32/kbdbr.dll
system32/kbdca.dll
system32/kbdda.dll
system32/kbddv.dll
system32/kbdes.dll
system32/kbdfc.dll
system32/kbdfi.dll
system32/kbdfr.dll
system32/kbdgae.dll
system32/kbdgr.dll
system32/kbdgr1.dll
system32/kbdic.dll
system32/kbdir.dll
system32/kbdit.dll
system32/kbdit142.dll
system32/kbdla.dll
system32/kbdmac.dll
system32/kbdne.dll
system32/kbdnec.dll
system32/kbdno.dll
system32/kbdpo.dll
system32/kbdsf.dll
system32/kbdsg.dll
system32/kbdsp.dll
system32/kbdsw.dll
system32/kbduk.dll
system32/kbdusl.dll
system32/kbdusr.dll
system32/kbdusx.dll
System32/ALRSVC.DLL
System32/AVMC20.DLL
System32/AVMCAPI.DLL
System32/AVMENUM.DLL
System32/BROWSER.DLL
System32/C218TNT.COD
System32/C320TNT.COD
System32/CERTCLI.DLL
System32/CNBJMON.DLL
System32/CRYPTNET.DLL
System32/CSCDLL.DLL
System32/CTMASETP.DLL
System32/CTMRCLAS.DLL
System32/DCIMAN32.DLL
System32/DDRAW.DLL
System32/DGCLASS.DLL
System32/DGNET.DLL
System32/DGRPSETU.DLL
System32/DIAPI2.DLL
System32/DIAPI232.DLL
System32/DIAPI2NT.DLL
System32/DISRVPP.DLL
System32/DISRVSU.DLL
System32/DITRACE.EXE
System32/DIVAPROP.DLL
System32/DIVASU.DLL
System32/DNSRSLVR.DLL
System32/DUSER.DLL
System32/EQNCLASS.DLL
System32/EQNDIAG.EXE
System32/EQNLOGR.EXE
System32/EQNLOOP.EXE
System32/EXTMGR.DLL
System32/FPNPBASE.SYS
System32/FPNPBASE.USA
System32/FUS2BASE.SYS
System32/GPTEXT.DLL
System32/HALSP.DLL
System32/HCCOIN.DLL
System32/ICMP.DLL
System32/IMGUTIL.DLL
System32/INITPKI.DLL
System32/IO8PORTS.DLL
System32/IOLOGMSG.DLL
System32/KBDMAC.DLL
System32/LINKINFO.DLL
System32/LOADPERF.DLL
System32/LOCALSPL.DLL
System32/LZ32.DLL
System32/MOBSYNC.DLL
System32/MPRUI.DLL
System32/MSAFD.DLL
System32/MSCAT32.DLL
System32/MSCMS.DLL
System32/MSFTEDIT.DLL
System32/MSGSVC.DLL
System32/MSJET40.DLL
System32/MSLS31.DLL
System32/MSSIGN32.DLL
System32/MSSIP32.DLL
System32/MSVCIRT.DLL
System32/MSWSTR10.DLL
System32/NET.HLP
System32/NETEVENT.DLL
System32/NETUI2.DLL
System32/NWAPI32.DLL
System32/NWCFG.DLL
System32/NWEVENT.DLL
System32/NWPROVAU.DLL
System32/NWWKS.DLL
System32/OAKLEY.DLL
System32/ODBC16GT.DLL
System32/ODBC32GT.DLL
System32/ODBCBCP.DLL
System32/ODBCCONF.DLL
System32/ODBCCP32.CPL
System32/ODBCCP32.DLL
System32/ODBCCR32.DLL
System32/ODBCCU32.DLL
System32/ODBCJI32.DLL
System32/ODBCJT32.DLL
System32/ODBCP32R.DLL
System32/ODBCTRAC.DLL
System32/OLECLI32.DLL
System32/OLECNV32.DLL
System32/OLESVR.DLL
System32/OLESVR32.DLL
System32/OLETHK32.DLL
System32/PEER.EXE
System32/PERFCTRS.DLL
System32/PERFNW.DLL
System32/PORTMON.EXE
System32/PSTOREC.DLL
System32/QUERY.DLL
System32/RASDLG.DLL
System32/RNR20.DLL
System32/RSVP.EXE
System32/RSVPMSG.DLL
System32/RSVPPERF.DLL
System32/RTIPXMIB.DLL
System32/SCECLI.DLL
System32/SECURITY.DLL
System32/SNMPAPI.DLL
System32/SOFTPUB.DLL
System32/SPDPORTS.DLL
System32/SPOOLSS.DLL
System32/SPXCOINS.DLL
System32/SPXPORTS.DLL
System32/STLNPROP.DLL
System32/SXPORTS.DLL
System32/UFAT.DLL
System32/UREG.DLL
System32/URL.DLL
System32/UTILDLL.DLL
System32/W32TOPL.DLL
System32/WDIGEST.DLL
System32/WIN32SPL.DLL
System32/WINHTTP.DLL
System32/WINIPSEC.DLL
System32/WINSCARD.DLL
System32/WSHISN.DLL
System32/WZCSAPI.DLL
System32/XLOG.EXE
System32/XMLPROV.DLL
System32/XMLPROVI.DLL
system32/lang/default.lng
system32/lang/master.lng
system32/lang
system32/ntsd.exe
system32/regedt32.exe
system32/convert.exe
system32/nslookup.exe
system32/odbcad32.exe
system32/odbcconf.exe
system32/print.exe
system32/replace.exe
system32/sort.exe
system32/wordpad.exe
system32/diskcopy.dll
改好的批处理如下:
for /f "usebackq delims==" %%i in ("swinpe.txt") do del /q /f %%i
存为一个CMD文件,将上面的文件列表存为swinpe.txt,放PE的I386目录中,然后就可以用这个批处理直
接删除PE多余文件了。当然,可以删除的文件不止这么少,要不老毛的也不会减到只有500多个文件了,
自己多研究吧,找到新的可删除的文件就添加在这个列表文件中了。减肥第二法,就是把一些可执行文件
以及DLL用PE压缩软件再压缩一下,如Explorer.exe,msvbvm60.dll,Regedit.exe,一些CPL控制面板程
序等等,有一些系统级的DLL请不要压缩,如Shell32.dll之类的,压缩后直接导致PE内存占用量猛升,另
一些如CMD.exe压缩后,显示字体有点怪怪的,反正多测试,发现不对就还原,不要压缩了。减肥第三法
,优化注册表,用一些清理注册表的软件,对PE的注册表进行无效键值的删除,有利于注册表文件的减少
,更利于PE的快速运作。
七、PE注册表修改法
因为PE是在光盘上运行的系统,而PE本来就和我们的XP一样,也需要使用注册表来保存系统重要设置和软
件相关信息,光盘又是只读不能写入的东西,那么PE系统是如何在只读光盘上写入注册表信息的呢?呵呵
,这个问题也是偶最初在研究PE的时候想要知道的事。通过查阅PEB插件和MS-WinPE光盘上的注册表信息
,偶发现PE是这样解决注册表写入问题的:使用的是那个Ramdisk内存盘驱动程序或是MS自己专为PE开发
的VDM虚拟磁盘驱动,在内存中开辟磁盘缓冲使注册表进入这个空间,当然就可以写入了,换句话说,PE
占用内存与注册表大小以及开辟的Ramdisk大小相关,内部基本服务只要不上网,占得并不是很多。第二
、当我们需要对这个PE进行部分注册表优化以及添加一些软件注册信息一类的操作时,由于PE独有的特性
,注册表在运行时修改有效,而重启后修改项目将会丢失,(当然,这也有好处,对某些爱往注册表里写
东西的病毒天生免疫),怎么操作呢?深山红叶作者余刘琅先生曾在一个帖子里提到了这个如何操作问题
,那就是用软件加载PE注册表单元进行修改的方法,使用工具即为MS自己的Regedit.exe或是Register
workshop V3这个软件,偶推荐后者,因为比MS自带的要强大得多,而且搜索注册表的速度也快得多。PE
注册表对应的文件有三个,两个位于I386目录下的System32/config中,,Default和Software,另一个位
于I386目录下,名为Setupldr.hiv,先这些文件拷到硬盘上,各对于应于系统哪个主键呢?这个偶就不在
这里多说了,自己用下面的方法打开看看就知道了,偶都说完了,您自己连研究的机会都没有了。运行
Register wrokshop,用菜单文件下面的“加载注册表单元”,在打开的对话框中选择偶说的这三个注册
表文件,然后给加载单元起个名字,例如取名WinPE,软件会自动加载到当前系统注册表第三个主键HKLM
下面,然后就展开WinPE下面的子键,如同我们平时修改注册表一样对这个注册表进行修改,修改完成后
,右点刚才的单元名,选卸载注册表单元,最后替换光盘上的相同文件,启动PE看看是否有效。
八、研究PE中某软件无法运行的方法
PE减肥后,我们无法确定系统是否还缺少一些文件,所以需要测试所有加入PE中的软件,如果加入软件太
多了,这个测试量还是蛮大的。如果发现某软件不能在PE中运行,出现一些运行错误,有一些情况我们还
是可以自行解决的,如某软件提示磁盘为只读,不能写入某数据文件,那么就说明这个软件需要写盘,我
们可以将其用Winrar软件打包成EXE文件,将其在运行时释放到临时的B盘上进行运行。如果有某软件双击
后,无法运行,有些软件会提示缺少什么文件,按提示添加既可,有些软件什么提示都没有,那么这里提
供一个微软的小工具,Depend.exe,查找DLL之间依赖关系的,最好将其内置于PE中,文件本身不大,才
14KB,使用方法是Depend /l /f:xxx.xxx,XXX可以是可执行文件,也可是DLL文件,不过只能查32位的
,16位的程序查不到。例如,XnView这个看图软件,偶放在PE中不能运行,经用这个小工具后,查到显示
Miss了三个DLL:Avifil32.dll,msacm32.dll,msvfw32.dll,于是从XP中拷了这三个DLL加入PE中,再运
行XnView,成功,再如Acdsee 3.1,运行也不成功,偶一查,得知缺少Shlfold.dll系统文件,加入,
ACDSEE也能运行了。当然,这只是一个简单的办法,如果某软件文件也不少,还是不能运行,多半是注册
表里少什么东西,可以用RegMon之类的程序进行监视,看看有什么动静,总之想办法解决,不能解决的只
有换其它的绿色软件了,也许您还有更好的办法,研究出来了告诉偶一声哈,呵呵。
九、引用老毛关于制作Winpe.IS_压缩文件的相关说明和个人认为的优缺点。
老毛的这篇相关说明很有一定的技术要点在里面,一时找不到原文在哪里了,大意是以Ramdisk方式启动
PE,用的是修改过后的Win2003的一个启动文件,以及修改过后的光盘引导扇区,然后用Wincab对做好的
PE光盘ISO文件进行再压缩,格式是CAB格式的,用CABARC命令行工具也可以进行这个操作,所以光盘上那
个Winpe.is_文件可以被Winrar解压得到原光盘文件。这种Ramdisk引导方式利用Win2003这种特殊引导功
能,开辟内存空间,直接将Winpe.is_解压到内存中,然后再从内存中引导PE启动,因而光盘启动会占用
更多的内存空间,所以老毛的PE非128MB内存不能启动。不过老毛也说过,也可以把这个Winpe.is_解压出
来刻盘启动,所需的启动内存也会大大减少,偶没有时间来验证老毛的这个说法,有兴趣的可以试试。个
人认为这就是空间和体积之间的矛盾之处吧,想要占内存少就可以启动PE,那么只有牺牲光盘空间,想要
占光盘最小,只有用大内存来换取,鱼与熊掌。。呵呵。。
十、PE研究与精简技术之间的关系
精简技术简单的说就是在做减法,把XP盘文件减到最小又实用。PE呢,正好相反,在一个光胴胴的内核上
添加壳,硬件支持,应用软件,使PE变得方便易用,做的是加法。两者之间看来互为对立,其实是可以相
互支持的东西,说穿了就是在研究Windows系统文件的作用,这也是精简研究的最终方向,并不是某些人
理解的狭义精简,认为精简得太小没多大用处,实际上正是这些精简得过小的系统,在使用中使我们更能
深入体会和研究到Windows各系统文件的作用,可以这么说,没有系统文件的研究,也就没有Nlite这个软
件的诞生,从Nlite的新版本中你也可以看到,组件中添加了以前没有的组件,如DX之类,表示Nlite的作
者又新找到了与DX相关的文件,再如以前NT备份组件没有被标红,在新版中却被标红了,说明有人发现了
这个组件的重要性。研究精简的如果错过PE的研究,一般不会有多大的进展,如从本文第五点所述的PE制
作关键插件与技术分析中,例如DX插件中的文件列表,如果你精简的系统DX有问题的话,那么换句话来讲
,是不是缺少DX插件中相关的文件呢?又如,你想精简Nlite1.21版以前不存在的DX组件,是不是可以用
这个DX插件中文件列表来做尝试呢?这就是偶所说的互补性,实际上插件的作者开发过程中也在向Nlite
中学习,如注册表条项的缺失问题,就是通过Nlite找到了。PE中的一些技术,我们同样也可以拿来用在
精简技术上,如偶这次在HOME笔记本上添加的右键功能就是从PE中借荐过来的,相互补充,相互学习是最
好的研究办法。
PE进行深入研究还有很大的空间,利用PE为我们日常生活中服好务,一切新生事物源于对功能的需求,本
文所探讨的只是PE制作技术中的一些牛毛,更多的是您在实际应用中的研究发现的新东西,不要一切只为
获取而获取,用网友的一句话来说:不要老是以自己是“菜鸟”为由做小白鼠,等“高手”来完成这一切
,好给你一个果果吃。偶想起不久前和坛子里的天山大哥的一场技术争论,如果论说菜鸟之定义,那么在
今年2007年1月份的时候,那个时候偶还不会制作PE,这个时候偶就是PE菜鸟,但十多天后,通过自己的
努力,打造了两个属于自己的PE,那么这个时候呢?也许在您的眼中,偶还是不是PE菜鸟呢?系统文件之
间的复杂关系并不是一个人短时间内都可以吃透的,也许一年以前,在研究精简之前,偶也许会提出和天
山的理想XP差不多的梦想,因为那个时候偶并没有对系统进行过深入的研究,但随着几个精简版的制作和
一些系统文件分析研究后,偶发现事实上和想法是有差别的,偶认为以前的那些想法有点天真。偶希望本
文能改变包括天山大哥这样的网友的一些想法,如果没有所谓的“高手”来完成您心目中理想XP的想法,
那么您自己呢?为这个理想做了些什么努力?再想想,当偶还是菜鸟的时候,偶又干了些什么?(偶这里
多说一句,偶家里没有网络,国内所有能找到收集到这些PE中文资料很少,其它的全靠自己在网下面独自
摸索才得到这些经验)不错,Deepin的XP是做得好,可是偶的机器还是没有用D大的系统,最终还是用的
自己的精简版,难道偶自己的精简版比Deepin的做得好?偶自己说,不见得,至少偶没有D大一样的网络
测试条件,没有笔记本测试条件,也许您有这样的条件,如果您自己做精简版,那么可能比偶做得更好!
一切源于个性追求,偶做出来的PE也是同样的道理,偶努力了,既使做出来的这个PE比老毛的差一些,但
必竞是自己动手完成的东西,自己用自己的劳动成果才是最舒心的,而且今天写下这篇研究回忆录来引导
您制作自己的PE系统,偶想,这就是一个菜鸟成为高手的成长之路。引用偶以前曾说过的话:做程序员是
辛苦的,因为当你在QQ聊天,论坛灌水的时候,他们在写程序;当你在节假日开心出去旅游的时候,他们
在写程序;当你和你女朋友花前月下、当你解开女朋友衣衫钮扣的时候,他们还是在写程序。。。。。。
。。。。最后,你还是你,程序员还是高手。。。。。。。