码迷,mamicode.com
首页 > 其他好文 > 详细

PE经典DIY案例1:全解开方案让量产PE也能

时间:2017-06-08 14:07:46      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:span   硬盘驱动   last   rom   针对   boot   sof   isod   研究   

更新说明:因未来的uefi似乎并不能识别并引导ud区,但能识别和引导量产和u+B+隐藏或高端隐藏区,故解决量产PE对u+B+隐藏区的支持,并增加对UEFI启动支持,已经成为PE制作的最主流技术。

 

PE的最迷人之处,就是DIY。通过DIY,新人才能慢慢提高水平。

假期研究了一下U+和B+隐藏。穿发奇想,大部分量产版专用PE,并不支持U+和B+隐藏。就想让大家简单改造一下,让手中的量产专用PE,都能来玩U+和B+隐藏。这里指的量产PE,一般都为内核解开的;多引导一般为grub,其它引导请自行研究解决。

一、U+V2高端隐藏和B+隐藏原理

1.隐藏PE技术:详见帖子

http://zds1210.blog.163.com/blog/static/2448124820131432936820/

2.内核解开利与蔽:内核解开后,PE特别是NT5 PE对新型电脑特别是本本有超强的兼容性;但似乎不支持隐藏区zip部署,也不支持U+深度隐藏和UD部署。

二、让纯grub4dos多引导的的PE U+写入U盘隐藏区保留grub多引导

最初,纯grub多引导的内核解开的ISO 格式 nt5 PE,写入U+隐藏区中,就发现变成只支持PE启动的单引导。原来以为最新版的U+不支持纯grub多引导写入U盘;后来发现PE内核打包了,U+后纯grub多引导又出现。反复测试,才大概知道一点规律:原来, U+引导时,U+先搜索自家的easyboot引导,然后再搜索nt5 PE的引导文件setupldr.bin,最后才搜索其它引导文件如grub;NT5 PE内核解开后,U+先搜索到nt5 PE的引导文件setupldr.bin,所以就直接引导nt5 P E了,而不会出现grub多引导。

知道原因后,解决问题就来就简单了。解决方法有如下两方案。

a.U+时保留纯grub引导:把nt5 PE引导文件从setupldr.bin改名为ntb之类的,把grub主引导文件放在根目录下,文件名保留默认的grldr,让U+直接搜索到grldr,启动多引导。这样处理后,光盘版和U+版都可以实现纯grub多引导 。也可以在U+后用bootice强制在PE隐藏分区写入grub分区引导。

当然,也可以给PE(特别是xp和03PE)内核打包成iso来用grub进行map,但这样子兼容性会下降。

 b.绕道easyboot引导:引入单引导的easyboot(保留引导时间一秒钟,菜单什么提示的全变为黑色不可见,一个菜单就引导grub主引导文件grldr)。这个方案可加快U+引导速度,增强U+隐藏时引导的兼容性。

同时,实测发现,在用mkisofs打包前,先用easyboot把eb引导文件如BOOTMENU.EZB打开并保存一次,再用mkisofs打包成纯grub引导的ISO——这时,光盘量产版引导为纯grub引导;U+后又变成easyboot+grub引导了。

三、怎么让PE识别U+和B+隐藏区

grub多引导U+技术解决后,接下为就是怎么把光盘版的ISO PE变成支持u+和B+隐藏的PE了?

全内置PE,一般不用考虑外置加载问题。外置外挂式PE,PE内核启动后,因PE并不认识U+和B+隐藏区,所以要特别处理。用showdirver等类似命令,虽可以显现隐藏区,但它是可读写的,安全性不佳,不推荐(最好关闭pecmd语句中的showdirver信命令,以免隐藏区可读写,影响隐藏区数据安全。硬盘上的隐藏区要显示方法很多)。用杏大的Hdload也可以建立隐藏区按需加载的快捷方式,但要固定隐藏区卷标,通用性不强。推荐大家用bootpart只读挂载B+隐藏区,又安全通用性又高。

说明白一点,就是在内核中加入bootpart(三文件,bootpart.exe、bootaprt.sys,64位pe加bootpt64.sys),然后把pecmd.ini调用外置winP.ini的脚本改用调用load.cmd脚本,EXEC =!%WinDir%\SYSTEM32\LOAD.CMd。再由load.cmd脚本智能调用winpe.in:PE内核启动后,如果可见区找得到外置配置文件winpe.ini,就用pecmd直接加载外置吧;找不到就用bootpart只读挂载U+或B+隐藏区,然后再加载外置。Load.cmd脚本如下,请大家慢慢改进:

@echo off

Rem 以下脚本由独剑制作,可以智能加载可见区及U+B+隐藏区外置;

Rem 在xp 03 win7 win8普通及极速PE中测试通过

Rem 加载03PE的配置文件名为win03PE.INI

for %%x in ( C D E F G H I J K L M N O P Q R S T U V W) DO if exist %%x:\TOOLS\win03PE.INI SET OPDrv=%%x:&goto cd

goto ULBI

rem 以下为部署到可见区,直接调用脚本

:cd

%WinDir%\SYSTEM32\pecmd.exe load %OPDrv%\TOOLS\win03PE.INI

goto end

rem 以下部署到U+B+隐藏区,用bootpart只读挂载隐藏区到T盘再来挂载外置

:ULBI

%windir%\system32\bootpart.exe -mount   -readonly  -driveletter T:

if not exist T:\TOOLS\win03PE.INI goto end2

%WinDir%\SYSTEM32\pecmd.exe load T:\TOOLS\win03PE.INI

goto end

:end2

%windir%\system32\bootpart.exe -eject

@echo on

exit

:end

@echo on

exit

有些朋友并不喜欢用cmd脚本,同时为了保持方案的通用性,这里提供pecmd脚本。也就是在在内核中加入bootpart(三文件,bootpart.exe、bootaprt.sys,64位pe加bootpt64.sys)后,大家把把pecmd.ini调用外置处(load  winpe.ini),改成如下脚本就可以:

//试着用bootpart只读挂载U+和B+隐藏区到T盘

EXEC =!%windir%\system32\bootpart.exe -mount   -readonly  -driveletter T:

//如果T盘存在配置文件,则说明挂载成功直接加载T盘外置;如无配置文件,则取消挂载,用pecmd load搜索加载可见区外置。

IFEX T:\TOOLS\win03PE.INI,TEAM TEXT 载入UI和BI隐藏区外置|LOAD T:\TOOLS\win03PE.INI!TEAM TEXT 载入可见区外置| EXEC =!%windir%\system32\bootpart.exe -eject|load \TOOLS\win03PE.INI   

 

 

grub引导文件改好,内核改好,,用mkisofs重新打包成PE纯grub多引导的iso文件,新PE就制作好了。

四、部署要点:

1.U+:推荐ultraiso部署到U+V2-hdd格式高端隐藏,不支持zip格式隐藏及深度隐藏;只支持zip的老机子可以U+Zip到可见区玩。

2.B+:推荐用bootice部署到usb-hdd隐藏区,并要把隐藏区激活,以免bootpart挂载不了隐藏盘。

 

这样子,就可以把论坛上大 部分流行的光盘量产版PE,变成支持U+V2高端隐藏和B+隐藏的PE了。请大家自己动手制作吧。

 

大家可以参考我的成品PE及部署要点:

作品一、我改的杏大PE量产版加U+B+功能,外置解开没有用wim整体打包,纯bios启动

http://zds1210.blog.163.com/blog/static/2448124820131412229428/ 

作品二、我设计的双三八方案,量产加U+B+隐藏,扬州PE风格,bios和uefi双启

http://zds1210.blog.163.com/blog/static/244812482013329013685/

作品三、我改的其它老大的作品,量产加U+B+,外置整体用wim打包

(HPY大侠测试比较成功,扬州风格,量产加U+B+隐藏,bios和uefi双启)

http://zds1210.blog.163.com/blog/static/2448124820132302332833/

 

制作好改进型量产PE后,你会发现,PE内核解开后,只支持U+V2-hdd格式高端隐藏,好像并不支持U+隐藏zip格式,也不支持U+深度隐藏。怎么让PE支持U+zip,支持U+深度隐藏,甚至支持UD呢?下次我们再来第二个diy案例吧,让一ISO PE支持刻录光盘量产UDU+深度和B+隐藏吧。。

 

 

 

 

 

PE经典DIY案例2:半解开方案让你的PE除了量产和U+B+高端隐藏外

也能玩UD和U+V2-hdd深度隐藏!

PE的最迷人之处,就是DIY。通过DIY,新人才能慢慢提高水平。

上一次,通过简单的DIY,就可以让量产用的PE,也能玩U+高端和B+隐藏。但你会发现,这种内核解开的PE,一U+到zip格式的隐藏区,很多机子启动PE就卡nt5和nt6引导上,更不要说U+深度隐藏和UD了。这一次我们再来一次DIY,让你的PE,还能玩UD和U+V2-hdd深度隐藏,成为可刻盘、量产、UD、U+深度隐藏和B+隐藏的大一统ISO PE吧。

UD和U+深度隐藏都是抹掉分区信息的windows/winPE下找不到隐藏分区,所以,相当安全可靠,可以防病毒、防误删除和误格式化。

一、PE内核打包

为了让你的PE支持部署 UD和U+深度隐藏,PE内核打包成ISO用grub4dos来进行map是必须的。因为即使grub能识别引导UD和U+深度隐藏这种抹掉分区信息的隐藏区,但nt5和nt6引导很可能不识别,就会卡在PE启动上了。内核解开到内核打包,其实也不复杂,如果你懒,建议你抄人家做得好的UD版改造吧,反正网上一大堆。

但内核打包后,又会引导兼容型问题,特别是对新型电脑特别是新型笔记本电脑的兼容,会出现内核打包map引起的非硬盘驱动的蓝屏问题,主要是nt5 PE,win7 win8 PE好像没这个问题。为解决这个问题,grub增加了一下参数来解决。我们在nt5 PE引导菜单中增加几个兼容模式就可以解决问题了。

map --e820cycles=n(不加参数默认为-1,从0-3试一下)

map --hook

二、使grub引导识别U+深度隐藏区

grub可以识别并引导UD区,但并不能识别并引导U+深度隐藏区,我们应对其内置菜单grldr作如下改进:

#由论坛P大和2011czmxbb52大提供,HHHWWW3333和不点改进。实测多个grub4.5版本,均成功通过。

#pxe detect
configfile
default 0
timeout 1

title find  /menu/menu.lst
 errorcheck off
 configfile /menu/menu.lst
 if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
 if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu/menu.lst && configfile /menu/menu.lst
 find --set-root --ignore-floppies --ignore-cd /menu/menu.lst && configfile /menu/menu.lst
 dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502
 set /a pe=*393216 && set /a ps=*393220
 write 393216 0
 write 393220 0
 map (hd0)%pe%+%ps% (fd3)
 map --hook
 set pe= && set ps=
 rootnoverify (fd3)
 #ls (fd3)/ > nul
 configfile (fd3)/menu/menu.lst
 if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu/menu.lst && configfile /menu/menu.lst
 find --set-root --ignore-floppies --ignore-cd /menu/menu.lst && configfile /menu/menu.lst
        errorcheck on
 commandline

title commandline
 commandline

title reboot
 reboot

title halt
 halt

 

4.6版的grub核心脚本应改成如下,改成fd3限制bios实际软驱为4个,dos实际只能有两个,一个是A盘,一是B盘。

dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502
set /a pe=*393216&4294967295 && set /a ps=*393220&4294967295
write 393216 0
write 393220 0
map (128)%pe%+%ps% (fd3)
map --hook
set pe= && set ps=
rootnoverify (fd3)
#ls (fd3)/ > nul
configfile (fd3)/MENU/MENU.LST

pause Error: menu.lst not found! && commandlineenu/menu.lst && configfile /menu/menu.lst

同时内核打包后,纯grub多引导的iso,U+时仍可以保留grub多引导,这点不用担心了。

三、PE内核改进

上次我们在PE内核加入了ultraiso的官方版bootpart驱动(bootpart.exe、bootaprt.sys,64位pe加bootpt64.sys)后,就原生态的支持U+V2高端隐藏区和B+隐藏区。事实上bootpart驱动也支持U+V2-hdd深度隐藏区挂载,暂不支持U+V2-zip深度隐藏区挂载。同时,UD区文件是不能直接使用的,现在都要导出到可见区下再使用——为了增加对UD隐藏区的数据读出,我们推荐大家在%windir%\system32\下加入百草霜老大的在原版fbinst基础上改进的fbinst plus,它可以完美支持ud的uft-8文件格式。bootpart和fbinst plus这两个软件在基本PE内核下都可以运行,实测对U+和B+隐藏及UD隐藏在xp 03 win7 和win8系统下支持都非常好。

(一)fbinst plus的基本用法

改进fbinst plus采用的是命令行模式,但功能很强大,我们可以在pecmd脚本下或cmd脚本下调用下。以下是在pecmd脚本上调用的常用用法:

//1.导出UD区文件

EXEC =!%WinDir%\SYSTEM32\fbinst (ud) output tools/ico.dll   %WinDir%\system32\%~nx

//2.系统自启动程序调用

/EXEC =!%WinDir%\SYSTEM32\fbinst --udload "tools/文字输入/FREEWB.exe" "%TEMP%"

//3.1建立UD区程序按需调用的快捷方式并加图标(是弹出黑窗口,,)

TEAM ENVI FBE=fbinst --link|ENVI FBU=fbinst.exe "—udload

//引用快捷图标,有时是#,是时候是,

exec =!%FBE% %Desktop%\手工运行ghost32" %FBU% petools/备份还原/ghost32.exe %TEMP%" ico.dll#22

exec =!%FBE% % Programs %\备份还原\手工运行ghost32" %FBU% petools/备份还原/ghost32.exe %TEMP%"  ico.dll#22

//3.2建立UD区程序按需调用的快捷方式(不弹出黑窗口)

TEAM ENVI SS=%windir%\system32|ENVI FBU=!%SS%\fbinst.exe --udload tools|ENVI PEC=%windir%\system32\pecmd.exe

//引用快捷图标,有时是#,是时候是,

link %Programs%\搜索自定义petools,%PEC%,exec %fbu%/文件工具/fbpetools.cmd %TEMP%,%SS%\ico.dll#2

link %Programs%\系统维护\远程编辑注册表,%PEC%,exec %fbu%/系统维护/远程编辑注册表.exe %TEMP%,%SS%\ico.dll#11

link %Desktop%\Aida64 环境检测,%PEC%,exec %fbu%/硬件检测/aida64.exe %TEMP%,%SS%\ico.dll#13

//4.搜索UD区指定文件夹并建立快捷方式

exec =!WinDir%\SYSTEM32\fbinst --onlylink "PEtools/*"  %TEMP%

 

//5全盘搜索可见区\Petools并建立快捷方式,win8PE不完善建议用其它pecmd脚本搞定

exec =!%windir%\system32\fbinst.exe --autoptlink

 

(二)智能判断PE部署环境脚本

我们在PE内核加这两个程序以后,就可以在PE内核启动后,由Pecmd.ini调用load.cmd,由load.cmd智能判断PE部署环境,可见区由pecmd load加载外置,U+和B+隐藏区由bootpart只读加载隐藏区,UD由fbinst plus建立外置的按需加载快捷方式。

load.cmd智能脚本如下,请大家慢慢改进吧。

@echo off

rem 以下脚本由独剑原创,可智能加载可见区UD区U+深隐藏区和B+区外置;实测在xp 03 win7 win8 PE下通过。

for %%x in (C D E F G H I J K L M N O P Q R S T U V W) DO if exist %%x:\TOOLS\CD03PE2013.INI  SET OPDrv=%%x:&goto cd

goto UD

rem 量产版U+和B+版的外置配置文件为CD03PE2013.INI

:cd

%WinDir%\SYSTEM32\pecmd.exe load %OPDrv%\TOOLS\CD03PE2013.INI

goto end

rem UD的外置配置文件为UD03PE2013.INI

:UD

%WinDir%\SYSTEM32\fbinst.exe (ud) output tools/ud03pe.ini   %WinDir%\%%~nx

if not exist %WinDir%\ud03pe.ini goto ULBI

%WinDir%\SYSTEM32\pecmd.exe load %WinDir%\ud03pe.ini

goto end

:ULBI

%windir%\system32\bootpart.exe -mount   -readonly  -driveletter T:

if not exist T:\TOOLS\CD03PE2013.INI goto end2

%WinDir%\SYSTEM32\pecmd.exe load T:\TOOLS\CD03PE2013.INI

goto end

:end2

%windir%\system32\bootpart.exe -eject

@echo on

exit

:end

@echo on

exit

有些朋友不喜欢用cmd脚本,同时为了保持方案的通用性,这里提供pecmd脚本。也就是在内核中加入fbinst plus和bootpart(三文件,bootpart.exe、bootaprt.sys,64位pe加bootpt64.sys)后,大家把把pecmd.ini调用外置处(load  winpe.ini),改成如下脚本就可以:

//UD和非UD(光盘量产U+B+版)通用外置挂载方案;ud 为ud03pe.ini ,非UD为cd03pe.ini

//试着导出UD区配置文件,成功为UD版,不成功则为非UD版

EXEC =!%windir%\system32\fbinst.exe (ud) output tools/ud03pe.ini   %WinDir%\%~nx

//非UD版,则试着只读挂载U+或B+隐藏区到T盘;

IFEX  %WinDir%\ud03pe.ini,! EXEC =!%windir%\system32\bootpart.exe -mount   -readonly  -driveletter T:

//如果挂载的是非U+或B+隐藏盘,则取消挂载,免浪费盘符

IFEX T:\TOOLS\cd03pe.ini,! EXEC =!%windir%\system32\bootpart.exe  -eject

 //UD版加载外置配置文件ud03pe.ini;非Ud版加载外置配置文件cd03pe.ini

IFEX  %WinDir%\ud03pe.ini,load %WinDir%\ud03pe.ini!load \cd03pe.ini 

 

 也可以试着由以下有子过程的pecmd脚本解决(以下脚本实机测试通过)

//UD和非UD(光盘量产U+B+版)通用外置挂载方案;ud 为ud03pe.ini ,非UD为cd03pe.ini

//试着导出UD区配置文件,成功为UD版,不成功则为非UD版

EXEC =!%windir%\system32\fbinst.exe (ud) output "tools/ud03pe.ini"   x:\tools\%~nx

//UD则加载配置文件ud03pe.ini,非UD调用子过程,智能处理

IFEX  x:\tools\ud03pe.ini,CALL UD_LOAD ! CALL CD_LOAD

_SUB UD_ LOAD

TEAM TEXT 载入UD隐藏区外置|load x:\tools\ud03pe.ini

_END

_SUB CD_ LOAD

//试着用bootpart只读挂载U+和B+隐藏区到T盘

EXEC =!%windir%\system32\bootpart.exe -mount   -readonly  -driveletter T:

//如果T盘存在配置文件,则说明挂载成功直接加载T盘外置;如无配置文件,则取消挂载,用pecmd load加载可见区外置。

IFEX T:\TOOLS\cd03pe.ini,TEAM TEXT 载入UI和BI隐藏区外置|LOAD T:\TOOLS\cd03pe.ini!TEAM TEXT 载入可见区外置| EXEC =!%windir%\system32\bootpart.exe -eject|load \TOOLS\ cd03pe.ini   

_END

 

 

如果外置整体打包成wim,可以试着由以下pecmd脚本解决,Pecmd关键代码为:
//UD和非UD(光盘量产U+B+版)通用外置WIM打包挂载方案
//exec =!cmd.exe  /C  "md x:\tools\"
EXEC =!%windir%\system32\fbinst.exe (ud) output "tools/WIN03PE2013.INI"   x:\tools\%~nx
IFEX  x:\tools\WIN03PE2013.INI,CALL UD_LOAD!CALL CD_LOAD
_SUB UD_LOAD
//EXEC =!%windir%\system32\fbinst.exe (ud) output tools/tools.wim z:\tools\%~nx
TEAM TEXT 载入UD隐藏区外置|load x:\tools\WIN03PE2013.INI
_END
_SUB CD_LOAD
EXEC =!%windir%\system32\bootpart.exe -mount   -readonly  -driveletter T:
IFEX T:\TOOLS\WIN03PE2013.INI,TEAM TEXT 载入UIBI隐藏区外置|load t:\tools\WIN03PE2013.INI!TEAM TEXT 载入可见区外置|EXEC =!%windir%\system32\bootpart.exe -eject|load \tools\WIN03PE2013.INI
_END
这个时候外置加载脚本可以统一为一个,win03pe2013.ini关键脚本如下:
//以下为moun外置wim,分UD和非UD(光盘量产和U+B+版)
IFEX  x:\tools\WIN03PE2013.INI,CALL UD_moun!CALL CD_moun
_SUB UD_moun
EXEC =!%windir%\system32\fbinst.exe (ud) output tools/tools.wim Z:\tools\%~nx
MOUN Z:\tools\tools.WIM,Y:,1
_END
_SUB CD_moun
MOUN %CurDrv%\tools\tools.WIM,Y:,1
_END
//并定义外置目录
FIND Explorer.EXE,CALL Outer_Reload
ENVI TYDir=Y:\tools
//以下定义快捷方式图标文件
envi icpt=%TYDir%\ico.dll#
file %TYDir%\dll.7z=>x:\wxpe\system32\dll.7z
file %TYDir%\basic.7z=>x:\wxpe\system32\basic.7z
//以下为自定义桌面,分UD和非UD(光盘量产和U+B+版)
IFEX  x:\tools\WIN03PE2013.INI,CALL UD_desk!CALL CD_desk
_SUB UD_desk
EXEC =!%WinDir%\SYSTEM32\fbinst (ud) output desk/logo.jpg   %WinDir%\system32\%~nx
EXEC =!%WinDir%\SYSTEM32\fbinst (ud) output desk/desk.jpg   %WinDir%\system32\%~nx
_END
_SUB CD_desk
file x:\wxpe\system32\logo.jpg
file x:\wxpe\system32\desk.jpg
file %CurDrv%\desk\logo.jpg=>x:\wxpe\system32\logo.jpg 
file %CurDrv%\desk\desk.jpg=>x:\wxpe\system32\desk.jpg
_END
wAIT 300
//系统安装
link %programs%\系统安装\Windows安装助手,%TYDir%\系统安装\setupxp.exe,,%icpt%40

 

 

(三)最简单的大统一方案——支持光盘、量产、UD和U+V2-hdd深度隐藏

如果大家感觉上面的大麻烦,就给大家一下最简单的统一加载外置\petool方案吧。

本方案中利用百大的fbinst plus(fbinst.exe)和ultraiso自带的bootpart驱动(bootpart.exe,bootpart.sys,bootpt64.sys)来实现可见区、UD区和U+隐藏区(低端隐藏、高端隐藏和深度隐藏-hdd格式,不支持深度隐藏U+V2-zip格式)和B+隐藏区的\petools\外置的自动建立快捷方式。PE系统支持32位或64位的xp 03 win7和win8 PE。

首先要求外置软件单个打包成能单独运行,分目录放置于\petools\下。然后PE内核%windir%\system3\下内置四文件fbinst,bootpart.exe, bootpart.sys,bootpt64.sys,并编写cmd脚本在pecmd.ini的适合位置调用。cmd脚本如下,你也可以改成pecmd脚本。

@echo off

rem 以下代码可以搜索可见区、UD区和U+ B+隐藏区petools文件夹,并建立快捷方式

Rem U+隐藏区不支持深度隐藏U+V2-zip格式。

rem 在win8PE中可见区搜索不完善,建议大家用pecmd脚本代替

%windir%\system32\fbinst --onlylink "PEtools/*"  %TEMP%

%windir%\system32\bootpart.exe -mount   -readonly  -driveletter U:

%windir%\system32\fbinst.exe --autoptlink

四、部署要点:

1.U+:支持ultraiso部署到U+V2-hdd深度隐藏,因bootpart所限,并不支持U+V2-zip深度隐藏后外挂的加载。

2.B+:推荐用bootice部署到usb-hdd隐藏区,并要把隐藏区激活,以免bootpart挂载不了隐藏盘。

 

大家可以参加我制作的半解开统一成品PE:

一、在杏大PE2013元旦UD版基础上改进成统一版,外置解开整体没有用wim打包

我的博客上的帖子:

http://zds1210.blog.163.com/blog/static/24481248201303001531628/

无忧论坛上的帖子:

http://bbs.wuyou.com/viewthread.php?tid=274893

二、其它大侠的UD版改进成统一版,外置整体用wim打包,HPY大侠的作品改进已经完工

http://zds1210.blog.163.com/blog/static/2448124820133895550491/

 

 

制作好以后,你会发现,这种全外置的统一PE,并不支持U+V2-zip深度隐藏下加载外置,这只能怪官方的bootpart了。难道一定要全内置PE才行吧?下次,我再出一个绝招,用很另类的方法,不用什么bootpart,也不用什么fbinst了,不要说什么U+V2-zip深度隐藏,就是以后出来很牛的隐藏区,只要grub能识别,我们就能加载实现统一部署。

 

 

PE经典DIY案例3:全打包方案,小样的U+V2-zip深度隐藏,

我就不信搞不定你——对付各种PE隐藏区的最后绝招

 

PE的最迷人之处,就是DIY。通过DIY,新人才能慢慢提高水平。

上一次,通过DIY,在PE内核中加入了fbinst plus并打包,可以让你的PE,也能玩UD和U+V2-hdd深度隐藏。但你会发现,这种全外置的统一PE,因目前官方的bootpart所限,并不支持U+V2-zip深度隐藏下加载外置。这一次我们再来一次DIY,给你一个绝招,让你的PE,搞定U+V2-zip深度隐藏,甚至以后更牛的隐藏。

这时,大家也许会想到全内置的极速PE,一二级内核分离来map,外置和二级内核一起打包,就可以实现U+V2-zip深度隐藏区外置的加载。我们可以借这个原理,普通PE中外置也打包成ISO来map,就能搞定各种隐藏。

一、基本原理

全打包统一PE,也叫真正统一PE,借鉴了一二级内核分离的全内置极速PE方案,PE内核和外置都分别打包成ISO来用grub4dos进行map。首先要求PE内核中内置wvblock驱动 (运行外置式的饭大的srs驱动也行),PE内核启动后,部署在U盘可读写介质中(如U+ B+可见区和隐藏区)中就可以看到外置ISO的直接map的wvblock虚拟盘,从而实现外置加载。内核中不需要专门针对隐藏的工具,如fbinst plus,udload和bootpart。

因为在光盘量产版(只读介质中)并不支持外置程序的直接map,所以特设计了智能脚本,用wblock、vdm或imgburn虚拟光驱只读挂载只读介质可见区中的外置ISO文件,再实现外置的挂载。

这种全打包统一方案,是相当创新的一种统一部署方案,是 相当的另类的。最大的优势,就是专门对付各种隐藏PE区的全外置加载,只要grub能识别引导隐藏区,它就能加载隐藏区的外置,而不用改变原来的PE内核。比如,U+刚开始才有低度隐藏,因grub能识别低度隐藏,它就支持低度隐藏;U+高端隐藏后,因grub能识别高端隐藏,它就支持高端隐藏; U+V2深度隐藏出来后,改进grub使它支持深度隐藏,它就支持深度隐藏,也是目前唯一支持U+V2-zip深度隐藏后外置加载PE方案。再后来我测试B+隐藏,发现它可以不用激活分区就完全支持B+隐藏。未来有什么更牛的隐藏PE,只要grub能识别这种隐藏区,这个PE就不用改变内核的支持这种隐藏区的外置加载。无愧为真正统一PE的称号。

当然,它的缺点也是很多,一二级内核分离的极速PE有什么缺点,它就有什么缺点。一是对U口读写质量要求高,U盘质量不好,U盘插口不好或没有插好,就可能加载不了外置,特别是win7PE。二是内核和外置打包,兼容性下降,有些问题不可预知:在一些主板中,死活加不了外置,特别是win7PE,要map –mem外置才行。三是对win7win8PE制作技术要求特别高。WIN7PE,目前解决的比较好的是饭大极速win7PE中还原的普通win7PE,在U盘可读写介部署,实现了外置的ISO直接map,在PE启动后可以看到外置直接map的虚拟盘。一直梦想能找到一种通用的方法,在其它win7PE和win8PE中集成wvblock驱动,按饭大或smine的方案调整好USB、wvblock、cdrom驱动顺序,打开其它win7Pe或win8的任督二脉,实现外置或极速版二级内核的直接map。但试了其它几个PE,都是在U盘版中能看到直接map外置ISO的虚拟盘驱,就是打不开。看来还有一些注册项和文件要攻关,请大家多多努力。

二、grub脚本和菜单改进

前提还是要改进grub的内置菜单grldr(方法如前),使它识别U+V2深度隐藏区。甚至更牛的隐藏区,也可增加代码,让grub能识别能引导。然后,PE和外置都要打包成ISO来map,外置ISO是直接map,所以,部署在隐藏U盘可读写区中,外置包再大,加载速度也可以很快。

三、内核改进

全打包统一方案,内核中不需要专门针对隐藏的工具,如fbinst plus,udload和bootpart。首先要在PE内核中内置wvblock驱动,PE内核启动后,部署在U盘可读写介质中(如U+ B+可见区和隐藏区)中就可以看到外置ISO的直接map的wvblock虚拟盘,从而实现外置加载。

因为在光盘量产版(只读介质中)并不支持外置程序ISO的直接map,所以特设计了智能脚本,用wblock、vdm或imgburn虚拟光驱只读挂载光盘量产可见区中的外置ISO文件,来实现外置的挂载。

pecmd.ini中关键语句如下:

//建立外置程序的扩展菜单,包括桌面和开始菜单

//以下语句直接调用UD或U+或B+隐藏区的外置

LOAD \外置程序\WinPE.INI

//新增加几行用于调入光盘版和量产版的PEtools.iso

LINK %StartMenu%\加载外部配置,%WS%\peiso.cmd

TEAM TEXT|exec =%WS%\peiso.cmd

 

peiso.cmd脚本如下:

1.vdm加载ISO

@echo off

set ff=winpefiles

for %%x in (A B C D E F G H I J K L M N O P Q R S T U V W) DO if exist %%x:\外置程序\winpe.ini goto end

for %%x in (A B C D E F G H I J K L M N O P Q R S T U V) DO (if exist %%x:\iso\petools.iso set fn=%%x:\iso\petools.iso

if exist %%x:\iso\petools.iso GOTO iso

)

goto end

:iso

REG ADD "HKCU\Software\Towodo Software\Virtual Drive Manager\Settings" /f /v MountPrevious /t REG_DWORD /d 1 >nul

REG ADD "HKCU\Software\Towodo Software\Virtual Drive Manager\Settings" /f /v XbtnQuit /t REG_DWORD /d 0 >nul

REG ADD "HKCU\Software\Towodo Software\Virtual Drive Manager\Settings" /f /v LastMounts /t REG_MULTI_SZ /s ! /d W:!自动侦测!%fn%!1 >nul

REG ADD "HKCU\Software\Towodo Software\虚拟驱动器\Settings" /f /v MountPrevious /t REG_DWORD /d 1 >nul

REG ADD "HKCU\Software\Towodo Software\虚拟驱动器\Settings" /f /v XbtnQuit /t REG_DWORD /d 0 >nul

REG ADD "HKCU\Software\Towodo Software\虚拟驱动器\Settings" /f /v LastMounts /t REG_MULTI_SZ /s ! /d W:!自动侦测!%fn%!1 >nul

goto vdm

:vdm

start vdm1.exe /i

echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

echo 稍等片刻......

echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:Wait

pecmd wait 1000

IF NOT EXIST W: GOTO Wait

if exist W:\外置程序\winpe.ini pecmd load W:\外置程序\winpe.ini

:end

 

2.imburn加载ISO

@echo off

for %%x in (A B C D E F G H I J K L M N O P Q R S T U V W) DO if exist %%x:\外置程序\winpe.ini goto end

for %%x in (A B C D E F G H I J K L M N O P Q R S T U V) DO (if exist %%x:\iso\petools.iso set fn=%%x:\iso\petools.iso

if exist %%x:\iso\petools.iso GOTO iso

)

goto end

:iso

imdisk  -a -f %fn% -m Y:

echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

echo 稍等片刻......

echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:Wait

pecmd wait 1000

IF NOT EXIST Y: GOTO Wait

if exist Y:\外置程序\winpe.ini pecmd load Y:\外置程序\winpe.ini

:end

 

3.isocmd加载ISO或压缩ISZ方案:最好用,PE内核system32中加入isocmd.exe及ISODrive.sys和ISODrv64.sys

@echo off
isocmd.exe -number 1
isocmd.exe -i
isocmd.exe -change 1 t:
for %%i in (D: E: X: C: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: Y: Z:) DO (
  if exist %%i\iso\NVXPPE.ISO (SET OPDrv=%%i&SET OPExt=iso&goto :mount_iso)
)
:mount_iso
isocmd -mount t: %OPDrv%\iso\NVXPPE.%OPExt% >nul
SET OPExt=
pecmd load T:\tools\winpe.ini

语句用法 如下:

ISOCMD -NUMBER 1 (设定光盘数量)
ISOCMD -i (开始安装驱动)
ISOCMD -MOUNT 0: ISO路径 (加载ISO文件到最后一个可用盘符)
ISOCMD -EJECT 0: (卸载最后加载的光驱,不管是否有文件打开)
ISOCMD -r (卸载驱动)
ISOCMD -v (或p,显示信息)
ISOCMD -s (启用驱动)
ISOCMD -1 (停止驱动)

isocmd.exe -change 1 y:(固定挂载光盘为Y盘)

三、配角fbinst和bootpart的作用

这种方案中,fbinst plus 和bootpart已经起不到作用了,我们主要还是利用了wvblock驱动。但把它们外置,可以搜索可见区、UD区和U+B+隐藏区自定义\Petools下的软件;把它们内置,当wvblock驱动加载外置失败,我们可以用它们再一次来尝试加载外置,从而起到双保险作用。

 

大家可以参加我制作的全打包统一成品PE:(也叫真正统一PE大合盘)

我的博客上的帖子:

http://zds1210.blog.163.com/blog/static/244812482012101023635183/

 

无忧论坛上的帖子:

http://bbs.wuyou.com/viewthread.PHP?tid=274893

 

 

 补充:

关于极速PE三个统一方案的说明

本人设计了三个普通PE统一方案,一是全解开方案,二是半解开方案,三是全打包方案(又叫真正统一PE),制作了三个成品PE大合盘,经测试都达到了预期的统一目标。

但在研究极速PE的各种部署的统一中,却遇到了比较大的困难。首先,极速PE,一定要采用一二级内核分离,一级内核用grub以仿真内存方式map(map --mem),才能实现新老机子极速启动。因部署在隐藏U盘区(UD、U+和B+隐藏),无法直接mount隐藏区解开的二级内核,需要把二级内核打包成ISO用grub直接map(用wvblock驱动把二级内核映射到虚拟光驱中,从而实现mount二级内核);而在只读介质中(光盘、U盘量产为usb-cdrom)中,又无法直接map打包的二级内核ISO,只能直接mout解开的二级内核。因而很难实现极速PE在各种部署中的统一,很难同时达到极速启动的效果。

本方案首创了双二级内核的方法,以空间换时间的方法,实现极速PE在光盘、量产为usb-cdrom、UD、U+和B+各种部署中的都能极速启动,让极速PE实现真正统一。考虑到xp和03极速 PE二级内核一般为20—30M左右,所浪费空间并不多。

一、全解开方案:可用于刻录光盘、量产、U+V2-hdd高端隐藏和B+隐藏

一级内核解开,二级内核解开的wim和打包成无碎片的ISO均保留。部署在可见区(光盘量产)时,一级内核启动后,直接mount解开的二级内核wim;部署在可写隐藏区(U+和B+隐藏区)时,就利用打包成ISO的二级内核(把二级内核用grub直接map,用wvblock驱动把打包的二级内核ISO映射到虚拟光驱中来mount)。内核启动后,智能加载可见区(用pecmd load)、U+B+隐藏区(利用bootpart驱动)外置。部署在U+B+可见区时,可以利用解开的二级内核,也可以利用打包的二级内核,推荐用解开的二级内核,以免打包的二级内核在读写中产生碎片而mount失败。

关键pecmd脚本如下:(补充)

关键grub脚本如下:(补充)

PE成品地址:

http://zds1210.blog.163.com/blog/static/244812482013329013685/

二、半解开方案:可用于刻录光盘、量产、UD、U+V2-hdd深度隐藏和B+隐藏

一级内核打包成ISO来map,二级内核解开的WIM和打包成无碎片的ISO均保留。

部署在可见区(光盘量产)时,一级内核启动后,直接mount解开的二级内核wim;部署在可写隐藏区(U+和B+隐藏区)时,就利用打包成ISO的二级内核(把二级内核用grub直接map,用wvblock驱动把打包的二级内核ISO映射到虚拟光驱中来mount)。内核启动后,智能加载可见区(用pecmd load)、UD区(用fbinst plus)和U+B+隐藏区(利用bootpart驱动)外置。部署在U+B+可见区时,可以利用解开的二级内核,也可以利用打包的二级内核,推荐用解开的二级内核,以免打包的二级内核在读写中产生碎片而mount失败。

关键pecmd脚本如下如方案一。关键grub脚本如下:(补充)

PE成品地址:

http://zds1210.blog.163.com/blog/static/24481248201303001531628/

三、全打包方案:可用于刻录光盘、量产、UD、U+V2-zip深度隐藏和B+隐藏,对付可写隐藏区的利器

一级内核打包成ISO来map,解开二级内核的WIM和与外置一起打包成无碎片的ISO均保留。部署在可见区时,一级内核启动后,直接加载解开的二级内核,再用isocmd或vdm等挂载打包的二级内核和外置ISO到虚拟光驱中,然后实现外置加载;部署于U盘隐藏区(UD、U+和B+隐藏)时,一级内核启动后,然后mount打包的二级内核从而实现外置加载(用grub直接map二级内核和外置包,用wvblock驱动把二级内核和外置映射到虚拟光驱中)。关键grub脚本如下:(补充)

本方案中,可与全打包普通统一PE共享外置,可实现U+V2-zip深度隐藏时外置加载,是专门对付各种可写隐藏区的好方案,全打包统一极速PE,不愧为真正统一极速PE。

PE成品地址:

 

同时在三个方案中,都改进了native.ini脚本,native.ini不到二级内核时,转换到wait.ini脚本,wait.ini脚本找不到二级内核时,再转换到native.ini脚本…… 这样子增强了加载二级内核的可靠性,解决了一部分量产区在后面的U盘量产时加载不了极速版二级内核的问题。

PE经典DIY案例1:全解开方案让量产PE也能

标签:span   硬盘驱动   last   rom   针对   boot   sof   isod   研究   

原文地址:http://www.cnblogs.com/accumulater/p/6962249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!