社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 2714阅读
  • 3回复

深入浅出进入PE世界

楼层直达
级别: *
发帖
*
飞翔币
*
威望
*
飞扬币
0
信誉值
0
前言:本文只是以偶在研究是所看到的一个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换成中文的,如下表类拟的样

子。


★ MiniOS WinXPE ★

◆系统附


◆控制面板
◆系统配置

常用工具软件
数据恢复软件
磁盘工具软件
Ghost 8.3 备份/恢复

简单解释一下这个PEB中的XML格式,所有的东西都是以为开头为结尾的格式配对,我们修

改这个文件可以在Winpe中添加主菜单,子菜单,以及子菜单项和它们所对应的程序,基本格式都是固定

的。如下面这行
◆控制面板 ,这行前面指出MITEM为弹出式菜单

“POPUP”类型,子联项MenuID=” Control pan”是偶自定义添加的ID值,菜单中文显示名为“◆控制面

板”,最后以为结尾。效果如图所示:多比较一下里面相同部分和不同分部,你也会得到和偶一

样的结果,当然自己就可以随意的添加菜单项了。这条是显示一个分

格符。
(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聊天,论坛灌水的时候,他们在写程序;当你在节假日开心出去旅游的时候,他们

在写程序;当你和你女朋友花前月下、当你解开女朋友衣衫钮扣的时候,他们还是在写程序。。。。。。

。。。。最后,你还是你,程序员还是高手。。。。。。。
 
级别: 光盘中级
发帖
1140
飞翔币
335
威望
303
飞扬币
8460
信誉值
0
只看该作者 1 发表于: 2007-05-01
不错的一篇文章 学习了
级别: 光盘见习
发帖
11
飞翔币
335
威望
14
飞扬币
1459
信誉值
0
只看该作者 2 发表于: 2007-05-01
好贴啊,楼主辛苦了啊,学习了。
级别: 光盘初级
发帖
545
飞翔币
359
威望
34
飞扬币
1157
信誉值
0
只看该作者 3 发表于: 2007-05-01
好有难度。完全看不懂啊。再慢慢学习一下。能留下个印象也行。学习了。楼主辛苦