PECMD.EXE SHOW 命令详解。
.近期从论坛上下载了几个 WinPE 来学习,也无意搜索到一些网页关于 PECMD SHOW
命令的使用方法。发现不少人对 PECMD SHOW 命令了解不够或有误解(多数不带参数),
所以有必要将 SHOW 命令的说明更新一下,同时也细化了 PECMD SHOW 命令的功能。
PECMD SHOW 命令设计的本意是加载没有被资源管理器自动分配盘符的硬盘分区,
在设计当初本人就有一条原则----不主动加载隐藏分区,因为用户隐藏一个分区必然有自己
的目的,主动加载隐藏分区不符合系统维护和保护数据的目的,所以省略参数的 SHOW
命令是无法加载隐藏分区的,要加载隐藏分区必须设置合理的参数。
以下是最新版 PECMD SHOW 命令的说明:
┣━━━┿━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ │格式│SHOW [磁盘分区],[盘符字母],[等待时间] ┃
┃ ├──┼──────────────────────────────────────────────┨
┃ │功能│显示系统存在的移动硬盘、固定硬盘的隐藏分区或沒有加载的分区,并给这些分区分配盘符。 ┃
┃ ├──┼──────────────────────────────────────────────┨
┃ │参数│■磁盘分区: 由 [硬盘号或标识符:分区号] 组成,"硬盘号"与"标识符"只取其一。 ┃
┃ │ │ ◆硬盘号: 用数值表示,小于"0"表示所有的硬盘、U盘和移动硬盘,"0"表示"hd0","1"表示┃
┃ │ │ "hd1","2"表示"hd2","3"表示"hd3",依次类推; ┃
┃ │ │ ◆标识符: 用"F"或"U"表示,"F"表示固定硬盘,"U"表示U盘或USB移动硬盘; ┃
┃ │ │ ◆分区号: 用数值表示,小于"0"表示全部还没有盘符的分区,"0"表示全部还没有盘符的可┃
┃ │ │ 见分区,"1"表示第1分区,"2"表示第2分区,"3"表示第3分区,依次类推; ┃
┃'SHOW'│ │■盘符字母: 用字母"C~Z"表示,省略"盘符字母"或设置盘符不合理时由 PECMD.EXE 自动分配盘符。 ┃
┃ │ │■等待时间: 数字,表示为设备就绪等待若干时间(毫秒)后才执行分配盘符的功能。 ┃
┃ ├──┼──────────────────────────────────────────────┨
┃ │示例│SHOW 0:1,H 或 SHOW U:1,U 或 SHOW F:0 或 SHOW U:0,,3000 或 SHOW U:-1 或 SHOW ┃
┃ ├──┼──────────────────────────────────────────────┨
┃ │备注│※某些机型在WinPE启动后已经可以识别移动硬盘,但没有为移动硬盘指派盘符,可以通过 SHOW 命令的 ┃
┃ │ │"U"标识符为移动硬盘分配盘符,示例2表示给"移动硬盘的第1分区"指派为盘符"U:"; ┃
┃ │ │※示例1表示"硬盘0分区1"指派为盘符"H:",示例3表示自动为"固定硬盘的所有可见分区"指派盘符; ┃
┃ │ │※通常"等待时间"可以省略,"等待时间"是驻留内存的PECMD在检测到移动硬盘插入时内部使用的变量; ┃
┃ │ │※省略所有参数的SHOW命令不会主动载入隐藏分区,要载入隐藏分区,"分区号"必须设置为数值"-1";┃
┃ │ │※删除盘符可用SUBJ命令,该命令与SUBJ命令配合,可载入隐藏分区的外置程序并保持原分区隐藏属性。┃
┣━━━┿━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
PECMD 将硬盘介质分为两种类型,即传统的固定硬盘和USB介质硬盘(含U盘)。要操作那种类型磁盘可由参数中的标识符或硬盘号来
决定,如要操作硬盘则应使用标识符 F,操作USB移动硬盘或U盘则应使用标识符 U;也可使用数字来操作指定ID的硬盘(见说明)。
PECMD 将无盘符的分区类型分为两类,即可见分区和隐藏分区。要操作那种类型分区可由参数分区号来决定,"0"表示没有分配符盘
的可见分区(分区表中的属性是可见分区,但资源管理器还没有指派盘符),小于"0"表示全部没有分配盘符的分区(含可见分区和隐藏分)。
所以要加载隐藏分区,关键是要设置好分区号,现举几个例子来说明。
加载无盘符的可见分区:
加载第2硬盘无盘符的分区: SHOW 1:0
加载第2硬盘的第4分区: SHOW 1:4
加载所有固定硬盘无盘符的分区:SHOW F:0
加载USB磁盘无盘符的分区: SHOW U:0
加载所有磁盘(含USB设备)无盘符的分区: SHOW -1:0
加载无盘符的磁盘分区(含可见分区和隐藏分区):
加载第2硬盘的隐藏分区: SHOW 1:-1
加载所有硬盘的隐藏分区:SHOW F:-1
加载USB磁盘的隐藏分区: SHOW U:-1
加载所有磁盘(含USB设备)的隐藏分区: SHOW -1:-1
[ 本帖最后由 lxl1638 于 2010-5-31 11:55 编辑 ] 原帖由 zxw 于 2010-5-30 22:54 发表 http://bbs.wuyou.net/images/common/back.gif
比如说,pesudo的0PE采用多级扩展结构,一级内核需要首先用cmd.exe来引导,然后才加载二级内核启动PE.似乎新版pecmd好象限制了第一控制权。只能由它启动cmd.exe,不能由cmd.exe启动它。
忽又想起0PE的结构特点 ...
这样啊?你先试试能不能将PECMD放入一级内核作为第一个程来使用,当然在二级内核没有加载之前,PECMD.INI要尽可能使用更少的命令,或者只执行 EXEC 命令启动加载二级内核的 CMD。
PECMD只有执行到相应的命令才加载那些不常用的DLL的,并没有使用很多DLL的说法,
新版PECMD和旧版的PECMD一样可以在只有10多M的骨头版PE使用,你说会使用到很多DLL么。 一直在找这方面的资料的,楼主提供的很详尽啊 老九能修改一下支持二级内核的PE就好了。 原帖由 zxw 于 2010-5-30 21:59 发表 http://bbs.wuyou.net/images/common/back.gif
老九能修改一下支持二级内核的PE就好了。
什么意思?什么要求?详细说明一下。
回复 #4 lxl1638 的帖子
比如说,pesudo的0PE采用多级扩展结构,一级内核需要首先用cmd.exe来引导,然后才加载二级内核启动PE.似乎新版pecmd好象限制了第一控制权。只能由它启动cmd.exe,不能由cmd.exe启动它。忽又想起0PE的结构特点,算了当我没说。
0PE是先用cmdpe.gz进入windows命令行窗口,然后加载desktop.wim进入pe桌面的。
新版PECMD也许支持中文。但它不能直接用于0PE。因为:
1. 新版的PECMD要求把PECMD作为第一个程序来运行,以便获得控制权。否则就不符合其版权限制,会拒绝进入桌面。
2. 新版的PECMD用到很多体积较大的dll动态库,而这些打包在desktop.wim。加载desktop.wim之前无法运行pecmd。
3. 如果运行cmd.exe来加载desktop.wim,pecmd就不是第一个程序了。...
[ 本帖最后由 zxw 于 2010-5-30 22:56 编辑 ] llxl1638
i wanted to ask you again , is it too hard to port PECMD to use english based PE's . or is there any special old version of PECMD which worksOK with english based PE's ?
the only script that we use in winbuilder for enabling themes support in xp based PE , uses PECMD for only shut down related problems ,
below i am pasting only the code of the script for PECMD which he used ,.,
// Use PECMD rather than PELoader 32-Bit only
If,%SourceArch%,EQUAL,X86,Begin
RegWrite,HKLM,0x1,WB-Setup\Setup,CmdLine,"PECMD.EXE MAIN %SystemRoot%\SYSTEM32\PECMD.INI"
If,%LogonType%,Equal,True,RegWrite,HKLM,0x4,"WB-Software\Microsoft\Windows NT\CurrentVersion\Winlogon",LogonType,1
FileCopy,%ProjectTemp%\XPThemes\PECMD\PECMD.exe,%target_sys%,NOWARN
FileCopy,%ProjectTemp%\XPThemes\PECMD\PECMD.ini,%target_sys%,NOWARN
End
here is PECMD.INI content
FIND Explorer.EXE,!TEAM SHEL %WinDir%\EXPLORER.EXE|LOGO|TEXT
this way , PECMD works very well for shutdown ONLY , but for other functions , like making shortcuts etc , PECMD does not work .
anyone can explain why does it happen ? i am really confused .
(sorry if i am off topic)
Regards,
Maanu from Pakistan 好强大,有这个强大的功能,又可以衍生出很多工具。
收藏起来了,好好学习下,说不定又有新的想法。
谢谢lxl1638 大侠。
顺便问下
谁测试过是否可以加载 fbinst的隐藏分区?
[ 本帖最后由 Plantsoot 于 2010-5-31 09:02 编辑 ]
回复 #6 lxl1638 的帖子
没有成功,进入桌面之前就重启了,因最近较忙,未及详细查看细节。 好东东深入浅出!!!!! 原帖由 lxl1638 于 2010-5-30 23:16 发表 http://bbs.wuyou.net/images/common/back.gif这样啊?你先试试能不能将PECMD放入一级内核作为第一个程来使用,当然在二级内核没有加载之前,PECMD.INI要尽可能使用更少的命令,或者只执行 EXEC 命令启动加载二级内核的 CMD。
PECMD只有执行到相应的命令才加载那些不常用的DLL的,并没有使用很多DLL的说法,
新版PECMD和旧版的PECMD一样可以在只有10多M的骨头版PE使用,你说会使用到很多DLL么。
0pe先启动到cmdpe(一级内核),然后再加载desktop.wim(二级内核)。
这样做的原因之一是u盘在启动之初,不一定能达到usb 2.0高速。那么分解内核,尽量减少u盘启动初期读取文件总体积,也就是一级内核的体积,是有意义的。
许多dll放在二级内核,这部分是在进入windows cmd后读取的,这时已经是usb2.0高速,体积大小,是否骨头已经无所谓。
一级内核基本上相当于cmdpe,比骨头版PE少dll,或者差不多。这时可以运行某些程序,不能运行pecmd:
要加较大体积的dll才行,那样会明显增加cmdpe体积。
所用的pecmd版本为:
这个已经比07年的版本需要的dll多。
即使后来dll有了,更新的版本也用不成,因为这个可能是支持pelogon的最后版本了。
还有,在做英文版(中英混杂,部分英文)时,不能启动shel,提示pecmd不能改名之类,但我没改名。
试过用pecmd作为第一程序调用cmd.exe,结果会重启。zxw在#9楼也遇到了。
有网友做过simple pecmd,需要dll少,可以作为第一启动程序运行,但后面启动shel还得用旧版pecmd。
楼主能否让新版继续支持pelogon这种不以pecmd为第一程序的用法,或者提供需要动态库少的pecmd(功能减少点也可以),
以便在cmdpe环境下能作为第一启动程序,后面再与需要动态库多的功能强的新版pecmd衔接,启动shel。
我理解并支持楼主限制pecmd为第一程序、取消pelogon的做法。不过这样在0pe中无法应用新版pecmd强大功能,令人遗憾。
最后,感谢楼主提供这么好的作品。 原帖由 pseudo 于 2010-5-31 14:45 发表 http://bbs.wuyou.net/images/common/back.gif
0pe先启动到cmdpe(一级内核),然后再加载desktop.wim(二级内核)。
这样做的原因之一是u盘在启动之初,不一定能达到usb 2.0高速。那么分解内核,尽量减少u盘启动初期读取文件总体积,也就是一级内核的体积 ...
你将一级内核打包放到某个地方,本下来试试。 原帖由 lxl1638 于 2010-5-31 15:05 发表 http://bbs.wuyou.net/images/common/back.gif
你将一级内核打包放到某个地方,本下来试试。
我的完美者U盘维护pe也不能直接使用最新版PECMD。
一个是不支持在cmd下运行新pecmd。一个是对dll的需要比较大。
如果能够像SIMPCMD.EXE那样只需要部分dll就可以启动执行就好了。
[ 本帖最后由 yidawpf 于 2010-5-31 15:12 编辑 ]
回复 #12 lxl1638 的帖子
见此帖6楼:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158364 原帖由 yidawpf 于 2010-5-31 15:09 发表 http://bbs.wuyou.net/images/common/back.gif我的完美者U盘维护pe也不能直接使用最新版PECMD。
一个是不支持在cmd下运行新pecmd。一个是对dll的需要比较大。
如果能够像SIMPCMD.EXE那样只需要部分dll就可以启动执行就好了。
我的PE内核也算是骨头了,从昨晚开始一直在测试新版PECMD.EXE,还没发现少DLL的问题,能否详细说下,大家一起测试。 原帖由 zxw 于 2010-5-31 15:44 发表 http://bbs.wuyou.net/images/common/back.gif
见此帖6楼:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158364
一大堆,不知道那个才是。
回复 #16 lxl1638 的帖子
可以下载这个http://www.brsbox.com/filebox/down/fc/1969dc1a8ece99e367ea1945696a7af3 原帖由 lxl1638 于 2010-5-31 15:05 发表 http://bbs.wuyou.net/images/common/back.gif
你将一级内核打包放到某个地方,本下来试试。
谢谢楼主关注。
0PE_To_lxl1638.rar(33.3MB)
内有说明。 原帖由 pseudo 于 2010-5-31 18:17 发表 http://bbs.wuyou.net/images/common/back.gif
谢谢楼主关注。
0PE_To_lxl1638.rar(33.3MB)
内有说明。
先下来看看再说,尽本人的能力。
可能搞不定,也可能要假期以后才能开搞。 让楼主费心了。
chenall的pe,yidawpf的pe都是类似结构,如果能用上新版pecmd就太好了。 原帖由 pseudo 于 2010-6-1 00:41 发表 http://bbs.wuyou.net/images/common/back.gif
让楼主费心了。
chenall的pe,yidawpf的pe都是类似结构,如果能用上新版pecmd就太好了。
可能很快可以帮你搞定,基本框架已编译好,工作原理是按顺序执行一个INI文件中列出的(CMD和EXE)命令,如这个INI文件的命令列表可以是:
AutoRun_1.CMD(或CMD.EXE) 参数
WIMX.EXE 参数
AutoRun_2.CMD(或CMD.EXE) 参数
PECMD.EXE 参数
目前(56K)只需一个DLL(KERNEL32.DLL),现在打算将代码移到VC6中编译以减小体积,同时补充完善一些功能。
另,本人要了解一级内核中有没有 WinLogon.EXE 和 CMD.EXE 这两个文件,如果没有这两个文件就麻烦了。
你将一级内核的系统文件列一下,主要是 DLL 和 EXE 文件。
[ 本帖最后由 lxl1638 于 2010-6-1 14:48 编辑 ] 我的:
驱动器 F 中的卷没有标签。
卷的序列号是 6CE2-4EF4
F:\王老师\SYSTEM32 的目录
2010-06-0116:41 <DIR> .
2010-06-0116:41 <DIR> ..
2009-01-0108:00 685,056 ADVAPI32.DLL
2009-01-0108:00 70,656 AUTHZ.DLL
2008-08-0816:00 52,736 BASESRV.DLL
2009-01-0108:00 1,777 BIOSINFO.IN_
2009-01-0108:00 6,348 BOOTVID.DL_
2009-01-0108:00 329,728 CMD.EXE
2010-06-0116:41 <DIR> CONFIG
2009-01-0108:00 586,752 CRYPT32.DLL
2009-01-0108:00 33,792 CSRSRV.DLL
2009-01-0108:00 4,096 CSRSS.EXE
2009-01-0108:00 8,386 CTYPE.NLS
2009-01-0108:00 66,082 C_1252.NLS
2009-01-0108:00 90,722 C_936.NL_
2010-06-0116:41 <DIR> DRIVERS
2008-08-0816:00 10,240 FIND.EXE
2009-01-0116:00 10,752 FRAMEBUF.DLL
2008-10-2404:19 284,672 GDI32.DLL
2009-01-0108:00 55,064 HAL.DL_
2009-01-0108:00 50,243 HALAACPI.DL_
2009-01-0108:00 41,836 HALACPI.DL_
2009-01-0108:00 147,968 IMAGEHLP.DLL
2008-05-2505:09 13,312 ISOCMD.EXE
2009-01-0108:00 4,194 KDCOM.DL_
2009-01-0108:00 771,584 KERNEL32.DLL
2009-01-0116:00 262,846 LOCALE.NLS
2009-01-0108:00 847 L_INTL.NL_
2009-01-0116:00 57,856 MPR.DLL
2009-01-0108:00 57,344 MSASN1.DLL
2009-01-0116:00 348,672 MSVCRT.DLL
2009-01-0108:00 17,408 NDDEAPI.DLL
2009-01-0108:00 345,088 NETAPI32.DLL
2009-01-0108:00 643,072 NTDLL.DLL
2009-03-2704:00 1,120,299 NTOSKRNL.EX_
2009-01-0108:00 83,748 PRCP.NLS
2009-01-0108:00 22,528 PROFMAP.DLL
2009-01-0108:00 20,480 PSAPI.DLL
2009-01-0108:00 69,120 REG.EXE
2009-01-0108:00 56,320 REGAPI.DLL
2009-01-0108:00 642,048 RPCRT4.DLL
2009-01-0108:00 65,024 SECUR32.DLL
2008-08-2903:09 25,761 SETPAGEFILE.EXE
2009-01-0108:00 1,012,224 SETUPAPI.DLL
2009-10-1720:09 61,163 SETUPREG.HI_
2009-08-0205:44 19,456 SIMPCMD.EXE
2009-09-0300:36 101 SIMPCMD.INI
2009-01-0108:00 53,760 SMSS.EXE
2009-01-0108:00 262,148 SORTKEY.NLS
2009-01-0108:00 23,550 SORTTBLS.NLS
2009-09-2820:50 1,804 STARTPE.CMD
2009-01-0108:00 724,480 SXS.DLL
2009-01-0108:00 89,588 UNICODE.NLS
2009-01-0108:00 579,072 USER32.DLL
2009-01-0108:00 760,320 USERENV.DLL
2009-01-0108:00 18,432 VERSION.DLL
2009-01-0108:00 10,752 VGA.DLL
2009-01-0108:00 25,343 VGA256.DL_
2009-01-0108:00 9,419 VGA64K.DL_
2009-01-0108:00 2,437 VGAOEM.FO_
2009-01-0108:00 1,848,832 WIN32K.SYS
2009-03-2704:00 511,488 WINLOGON.EXE
2009-01-0108:00 300,032 WINSRV.DLL
2009-01-0108:00 56,320 WINSTA.DLL
2009-01-0108:00 164,864 WINTRUST.DLL
2009-01-0108:00 19,456 WS2HELP.DLL
2009-01-0108:00 83,456 WS2_32.DLL
63 个文件 13,802,954 字节
4 个目录 46,705,160,192 可用字节 原帖由 yidawpf 于 2010-6-1 16:49 发表 http://bbs.wuyou.net/images/common/back.gif
我的:
驱动器 F 中的卷没有标签。
卷的序列号是 6CE2-4EF4
F:\王老师\SYSTEM32 的目录
2010-06-0116:41 .
2010-06-0116:41 ..
2009-01-0108:00 685,0 ...
本人要的不是你这个,是要P大的一级内核。
你这个完全可以启动PECMD的。
@echo off
PUSHD %~dp0
SET TP=%CD%
CD %TP%\SYSTEM32
START /D%WinDir%\system32 LSASS.EXE
START /D%WinDir%\system32 SERVICES.EXE
SimpCMD.EXE TEXT 检查是否需要设置虚拟内存... #0xFFFFFF L20 T550 R500 B580 $20
start /wait PECMD.EXE SHOW -1:-1
isocmd /f 98 >nul
if ERRORLEVEL 1(
SimpCMD.EXE TEXT 内存不足,请设置虚拟内存... #0xFFFFFF L20 T550 R500 B580 $20
pecmd.exe forx \pagefile.sys,pf,0,file %pf%
start /wait z:\system\system32\SETPAGEFILE.EXE
ISOCMD /F 98 >nul
if NOT ERRORLEVEL 1 (GOTO SET_FBWF) ELSE (echo 内存不足!&& Goto end)
)
:SET_FBWF
SimpCMD.EXE TEXT 设置FBWF空间... #0xFFFFFF L20 T550 R500 B580 $20
start /wait PECMD.EXE FBWF P40 L64 H300
SimpCMD.EXE TEXT 清理系统盘无效的文件... #0xFFFFFF L20 T550 R500 B580 $20
DEL %WinDir%\TXTSETUP.SI* /Q /F >NUL
DEL %WINDIR%\SYSTEM32\WIN32K.SYS /Q /F >NUL
DEL %WINDIR%\SYSTEM32\*.*_ /Q /F >NUL
DEL %WINDIR%\SYSTEM32\DRIVERS\*.SY_ /Q /F >NUL
RD%WINDIR%\SYSTEM32\config /Q /S >NUL
SimpCMD.EXE TEXT 复制系统文件... #0xFFFFFF L20 T550 R500 B580 $20
copy /y %TP%\*.exe %WinDir%\ >nul
if exist %TP%\fonts copy /y %TP%\fonts\*.* %WinDir%\fonts >nul
copy /y %TP%\system32\*.* %WinDir%\system32 >nul
SimpCMD.EXE TEXT 调用系统脚本... #0xFFFFFF L20 T550 R500 B580 $20
cd /d %WinDir%\system32
start PECMD.EXE main %TP%\type.ini 关键的是pecmd不支持在cmd状态下运行。 有些数据丢失了。。。。。。。。。。
老九说的我试过了。好像没有用。不能直接用pecmd加载。 原帖由 lxl1638 于 2010-6-1 14:46 发表 http://bbs.wuyou.net/images/common/back.gif
可能很快可以帮你搞定,基本框架已编译好,工作原理是按顺序执行一个INI文件中列出的(CMD和EXE)命令,如这个INI文件的命令列表可以是:
目前(56K)只需一个DLL(KERNEL32.DLL),现在打算将代码移到VC6中编 ...
论坛变动,先前回帖丢失。
列表如下
ADVAPI32 DLL
AUTHZ DLL
BASESRVDLL
BIOSINFO IN_
BOOTVIDDL_
CMD EXE
CRYPT32DLL
CSRSRV DLL
CSRSS EXE
CTYPE NLS
C_1252 NLS
C_936 NLS
FBINST EXE
FLTLIB DLL
FRAMEBUF DLL
GDI32 DLL
HAL DL_
HALAACPI DL_
HALACPIDLL
IMAGEHLP DLL
KDCOM DL_
KERNEL32 DLL
LOCALE NLS
L_INTL NLS
MSASN1 DLL
MSVCRT DLL
NDDEAPIDLL
NETAPI32 DLL
NTDLL DLL
NTOSKRNL EX_
PROFMAPDLL
PSAPI DLL
REGAPI DLL
RPCRT4 DLL
SECUR32DLL
SETUPAPI DLL
SETUPREG HI_
SMSS EXE
SORTKEYNLS
SORTTBLS NLS
SXS DLL
UNICODENLS
USER32 DLL
USERENVDLL
VERSIONDLL
VGAOEM FO_
WIMGAPIDLL
WIN32K SYS
WINLOGON EXE
WINSRV DLL
WINSTA DLL
WINTRUST DLL
WS2HELPDLL
WS2_32 DLL 原帖由 pseudo 于 2010-6-4 14:45 发表 http://bbs.wuyou.net/images/common/back.gif
论坛变动,先前回帖丢失。
列表如下
ADVAPI32 DLL
AUTHZ DLL
BASESRVDLL
BIOSINFO IN_
BOOTVIDDL_
CMD EXE
CRYPT32DLL
CSRSRV DLL
CSRSS EXE
CTYPE NLS
C_1252 NLS
C_9 ...
你这个是一级内核的文件列表?那么多?不会吧。
这样的文件足以启动 PECMD 了。
回复 #28 lxl1638 的帖子
是一级内核的文件列表。启动pecmd不成功,见#11楼图。
[ 本帖最后由 pseudo 于 2010-6-4 20:34 编辑 ] 原帖由 pseudo 于 2010-6-4 20:33 发表 http://bbs.wuyou.net/images/common/back.gif
是一级内核的文件列表。
启动pecmd不成功,见#11楼图。
你试试这组文件,本人按 NT6.x 系列 PE 的登录原理做了一个 WinPEShl.EXE 。
使用方法是:
1、注册表 CmdLine 为WinPEShl.EXEXXXX.INI
这个 XXXX.INI 文件可以自己取名,如果省略 WinPEShl.EXE 的参数(XXXX.INI 文件名),
则自动加载 SYSTEM32 目录中的 WinPEShl.INI 文件。
2、WinPEShl.INI 文件的写法与 NT6.x 系列 WinPE 的基本相同,有个两节:
节定义了系统外壳,这里应是 PECMD.EXE MAIN PECMD.INI
节定义了加载外壳前要启动的一些命令,如 CMD.EXE 等。
你的PE可以这样写 WinPEShl.INI 文件
AppPath="PECMD.EXE MAIN PECMD.INI"
=CMD.EXE,"/K AutoRun.CMD"本人制作的这个 WinPEShl.EXE 与 NT6.x 系列 WinPE 中的有所不同:
1、不能用它代替 NT6.x 系列 WinPE 中的 WinPEShl.EXE,只能在 NT5.x 系列 WinPE 中使用
2、不会自动加载 %SYSTEMDRIVE%\sources\setup.exe 和 %SYSTEMROOT%\system32\startnet.cmd
3、节定义的命令可以使用 [=][@][[!]||[&]] 等前导符,其作用与 PECMD EXEC 命令定义的一样
注意:
1、节定义的外壳命令只能是一个,并是阻塞方式执行,
WinPEShl.EXE 加载外壳命令后将停止执行 WinPEShl.INI 文件中的其它命令,
并驻留内存,要到加载桌面后用 PECMD KILL 结束它
2、如果 节定义的命令加上了前导 "=" ,这个命令必须能自动结束,否则不会加载其后的命令和外壳。
本人提供的 WinPEShl.EXE 是 Win32GUI 程序,只链接引用 NTDLL.DLL 和 kernel32.dll 两个DLL,你可以先这样调试:
WinPEShl.INI 中只启动 CMD.EXE,看看能否启动成功,如果能,说明 WinPEShl.EXE 可以在你的 0PE 中工作,再按正规方法
写 WinPEShl.INI 文件。
以下是本人从网上找到的关于 WinPEShl.EXE 和 WinPEShl.INI 的说明
Winpeshl.exe 会执行%SYSTEMDRIVE%\sources\setup.exe,
如果文件不存在,Winpeshl.exe会从%SYSTEMROOT%\system32\winpeshl.ini中读取信息并执行相应的程序,
如果没有指定,则执行cmd /k %SYSTEMROOT%\system32\startnet.cmd命令。
默认环境下WinPE会原带Startnet.cmd文件指向Wpeinit.exe,Wpeinit.exe加载并运行网络配置信息。
(startnet.cmd 中加载了 Wpeinit.exe,所以老外的 Win7PE 都很慢)
Winpeshl.ini Files
更新时间: 2009年5月
应用到: Windows 7
Winpeshl.ini 可控制是将自定义外壳程序加载到 Windows(R) PE,还是加载到默认的“命令提示符”窗口。
若要加载自定义外壳程序,请创建一个名为 Winpeshl.ini 的文件,然后将它放在自定义 Windows PE 映像
的 %SYSTEMROOT%\System32 中。该 .ini 文件必须包含以下部分和项。
AppPath = %SYSTEMDRIVE%\myshell.exe
%SYSTEMDRIVE%\mydir\application1.exe, {option}
将 AppPath 项设置为外壳应用程序的路径。可以使用完全限定路径,也可以使用环境变量(例如 %SYSTEMROOT%\System32\Myshell.exe)。
AppPath 项不支持命令行选项。
使用 部分运行带命令行选项的应用程序。应用程序按照列出的顺序运行。应用程序的名称与其选项之间以逗号分隔。
当退出“命令提示符”窗口或自定义外壳应用程序时,Windows PE 将重新启动。
或
Winpeshl.ini的格式
AppPath = %SYSTEMDRIVE%\myshell.exe
%SYSTEMDRIVE%\mydir\application1.exe, -option1 -option2
application2.exe, -option1 -option2
可以有上面两节中的一节或者两节。
第一节不一定是shell,但是不管是什么,不能带参数
(微软这里的说明有错,本人试过是可以带参数的,就是将命令和参数一起用双引号包围,如
AppPath = "%SYSTEMDRIVE%\myshell.exe -option1 -option2")
第二节可以是任何命令或者其他的应用程序,但是要注意的是如果是命令的话,参数必须用引号包起来,譬如
bcdedit.exe," -set path \windows\system32\winload.exe"
imagex.exe,"-capture c:\1.wim 1 c:"
[ 本帖最后由 lxl1638 于 2010-6-5 01:28 编辑 ]
页:
[1]
2