无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2331|回复: 3
打印 上一主题 下一主题

PECMD里有几句代码不太明白,希望有人可以解释一下

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-5 22:03:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在学pecmd的命令,在研究“月光森林”的PE的时候有几句代码不是很理解,希望大家能和我解释一下。
首先先把代码抛上来。
/////////月光森林///////////
/配置文件开始(注意,文件的开始和结束必须是空行或注释,行首注释可以用"/"或"`",但行后的注释必须是"`")
`开始日志记录
_SUB Open_LOGS
     LOGS %SystemRoot%\PECMD.LOG
_END
`判断外置程序
_SUB Set_SOFTLOAD
     EXEC =!%SystemRoot%\SYSTEM32\ShowDrive.EXE
     FORX !\PESOFT\PESOFT.INI,MyInI2,1,TEAM LOAD %MyInI2%|ENVI LOADINI2=YES
     FIND $%LOADINI2%=YES,!LINK %Desktop%\启用外部软件,PECMD.EXE,LOAD \PESOFT\PESOFT.INI,shell32.dll#180  
_END
`设定系统
_SUB Fix_System
     TEXT 正在设定系统……#0xFFFFFF
     ENVI V0=HKLM\Software\Microsoft\Windows\CurrentVersion
     ENVI V1=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace     
     REGI %V0%\ShellServiceObjectDelayLoad\PostBootReminder=
     REGI %V1%\{7007ACC7-3202-11D1-AAD2-00805FC1270E}\!
     REGI %V1%\{D20EA4E1-3957-11d2-A40B-0C5020524153}\!
     TEAM REGI HKCR\lnkfile\IsShortcut|ENVI V0=|ENVI V1=
     REGI HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\!
     REGI HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoNetConnectDisconnect=#0x1
     //不显示我的文档。
     REGI HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu\{450D8FBA-AD25-11D0-98A8-0800361B1103}=#1
     `添加ImDisk的快捷方式
     REGI HKCR\Drive\shell\ImDiskSaveImage\=保存ImDisk虚拟磁盘
     REGI HKCR\Drive\shell\ImDiskSaveImage\command\=rundll32.exe imdisk.cpl,RunDLL_SaveImageFile %L
     REGI HKCR\Drive\shell\ImDiskUnmount\=卸载ImDisk虚拟磁盘
     REGI HKCR\Drive\shell\ImDiskUnmount\command\=rundll32.exe imdisk.cpl,RunDLL_RemoveDevice %L
     REGI HKLM\SOFTWARE\Classes\Ultraiso\shell\ImDiskMountFile\=加载ImDisk虚拟磁盘
     REGI HKLM\SOFTWARE\Classes\Ultraiso\shell\ImDiskMountFile\command\=rundll32.exe imdisk.cpl,RunDLL_MountFile %L
     REGI HKLM\SOFTWARE\Classes\Winimage\shell\ImDiskMountFile\=加载ImDisk虚拟磁盘
     REGI HKLM\SOFTWARE\Classes\Winimage\shell\ImDiskMountFile\command\=rundll32.exe imdisk.cpl,RunDLL_MountFile %L
     `在设备管理器中显示中文
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}\=DVD/CD-ROM 驱动器
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}\=磁盘驱动器
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\=显示卡
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E969-E325-11CE-BFC1-08002BE10318}\=软盘控制器
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\=IDE ATA/ATAPI 控制器
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}\=键盘
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\=声音、视频和游戏控制器
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96F-E325-11CE-BFC1-08002BE10318}\=鼠标和其它指针设备
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\=网络适配器
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E97D-E325-11CE-BFC1-08002BE10318}\=系统设备
     REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{71A27CDD-812A-11D0-BEC7-08002BE2092F}\=存储卷
     `修改注册表和相关文件名以支持 Vista 安装
     REGI HKLM\SYSTEM\CurrentControlSet\Control\MiniNT\!
     EXEC !CMD.EXE /C "REN %SystemRoot%\SYSTEM32\HALACPI.DLL HAL.DLL"
_END
`列表框选择结果检测
_SUB CheckMod
     KILL \%Windows1%
     TEXT 正在设定虚拟内存……#0xFFFFFF
     FIND $%List1%=%P1%,TEAM FILE C:\PAGEFILE.SYS|PAGE C:\PAGEFILE.SYS 256 384
     FIND $%List1%=%P2%,TEAM FILE D:\PAGEFILE.SYS|PAGE D:\PAGEFILE.SYS 256 384
     FIND $%List1%=%P3%,TEAM FILE E:\PAGEFILE.SYS|PAGE E:\PAGEFILE.SYS 256 384
     FIND $%List1%=%P4%,TEAM FILE F:\PAGEFILE.SYS|PAGE F:\PAGEFILE.SYS 256 384
     FIND $%List1%=%P5%,TEAM FILE G:\PAGEFILE.SYS|PAGE G:\PAGEFILE.SYS 256 384
     FIND $%List1%=%P6%,TEAM FILE H:\PAGEFILE.SYS|PAGE H:\PAGEFILE.SYS 256 384
     FIND $%List1%=%P7%
_END
`配置选择窗口
_SUB Windows1,W305H185,设置虚拟内存,,,1
     ENVI P1=C 盘 (C:\PAGEFILE.SYS)
     ENVI P2=D 盘 (D:\PAGEFILE.SYS)
     ENVI P3=E 盘 (E:\PAGEFILE.SYS)
     ENVI P4=F 盘 (F:\PAGEFILE.SYS)
     ENVI P5=G 盘 (G:\PAGEFILE.SYS)
     ENVI P6=H 盘 (H:\PAGEFILE.SYS)
     ENVI P7=不设置虚拟内存(不推荐)
     LABE Label1,L48T10W282H20,温馨提示:检测到系统的物理内存较小
     LABE Label2,L48T30W282H20,强烈建议设置虚拟内存提高系统稳定性
     GROU Group1,L8T50W282H115,请选择虚拟内存位置
     LIST List1,L28T80W172H20,%P1%|%P2%|%P3%|%P4%|%P5%|%P6%|%P7%,,%P2%
     ITEM Button1,L213T79W56H24,确定,CALL CheckMod
     LABE Label3,L20T118W258H20,注意:设置虚拟内存所在的驱动器不能被格式化!
     LABE Label4,L18T138W258H20,设置虚拟内存所在的驱动器也不能用于数据恢复!
_END
`用户登录界面设置子过程
_SUB Start_LOGO
     FIND MEM>159,TEAM LOGO %SystemRoot%\SYSTEM32\WINLOGON.JPG|TEXT 初始化系统……#0xFFFFFF L438 T250 R680 B272!TEXT 初始化系统……#0xFFFFFF L438 T250 R680 B272
     TEAM EXEC =!%SystemRoot%\SYSTEM32\ShowDrive.EXE|EXEC =!%SystemRoot%\SYSTEM32\regorderdrv.cmd
     TEAM FILE %SystemRoot%\*.??_|FILE *.??_|FILE %SystemRoot%\SYSTEM32\DRIVERS\*.SY_
     TEAM FILE %SystemRoot%\SYSTEM32\MbrFix.exe|FILE %SystemRoot%\SYSTEM32\mountvol.exe|FILE %SystemRoot%\SYSTEM32\regorderdrv.cmd
     TEAM PATH %TEMP%|FBWF P40 H96|INIT I
     FIND MEM>159,!CALL @Windows1
_END
`用户设置
_SUB User_Setting
     USER 月光森林,雨季太阳
_END
`创建系统菜单子过程
_SUB Created_SYS_Menu
     TEXT 正在创建系统附件菜单……#0xFFFFFF
     EXEC @PECMD.EXE CALL $SHELL32.DLL,DllInstall,#1,U `建立快速启动栏中的显示桌面
     LINK %Programs%\附件\记事本,NOTEPAD.EXE
     LINK %Programs%\附件\命令提示符,CMD.EXE
     LINK %Programs%\附件\注册表编辑器,REGEDIT.EXE
     LINK %Programs%\附件\资源管理器,EXPLORER.EXE,,EXPLORER.EXE,1        
_END
` 注册热键
_SUB Set_HotKey
     TEXT 注册系统热键……#0xFFFFFF
     HOTK #95,PECMD.EXE SHUT R ` 休眠键重启
     HOTK #255,PECMD.EXE SHUT  ` 电源键关机
     HOTK #112,PECMD.EXE       ` F1呼出帮助
_END
`创建工具菜单子过程
_SUB Created_Tools_Menu
     FORX !\PESOFT\PESOFT.INI,MyInI,1,TEAM LOAD %MyInI%|ENVI LOADINI=YES   
_END
`设置 Windows 启动项子过程
_SUB Set_Windiws_Run
     RUNS %SystemRoot%\SYSTEM32\internat.exe,输入法指示器
_END
`加载SHELL子过程及清理无用文件
_SUB Start_Shell
     TEAM TEXT 正在载入桌面!……#0xFFFFFF|LOGO|SHEL %SystemRoot%\EXPLORER.EXE|WAIT 6000
_END
_SUB Last_Clear
     TEAM KILL SMSS|KILL WINLOGON|KILL REG|WAIT 2000
     TEAM FILE %SystemRoot%\SYSTEM32\SMSS.EXE|FILE %SystemRoot%\SYSTEM32\WINLOGON.EXE|FILE %SystemRoot%\SYSTEM32\WINLOGON.JPG|WAIT 1000      
     FIND $%LOADINI%=YES,!CALL Set_SOFTLOAD
_END
`保存日志记录
_SUB Save_LOGS
     LOGS
_END
`主体执行流程
/CALL Open_LOGS              `开始日志记录
DISP B32
CALL Start_LOGO             `用户登录界面设置
/CALL User_Setting           `用户设置
CALL Fix_System             `设定系统
CALL Created_SYS_Menu       `创建系统菜单
CALL Created_Tools_Menu     `创建工具菜单     
CALL Set_Windiws_Run        `设置Windows启动项
/CALL Set_HotKey             `注册热键
CALL Start_Shell            `启动 SHELL
CALL Last_Clear             `最后的清理及判断外置的情况
/CALL Save_LOGS              `执行完毕,并保存日志
//////////

其中最后“主体执行流程的那几句我看不太明白
不理解代码:
/CALL Open_LOGS              `开始日志记录
DISP B32
CALL Start_LOGO             `用户登录界面设置
/CALL User_Setting           `用户设置
CALL Fix_System             `设定系统
CALL Created_SYS_Menu       `创建系统菜单
CALL Created_Tools_Menu     `创建工具菜单     
CALL Set_Windiws_Run        `设置Windows启动项
/CALL Set_HotKey             `注册热键
CALL Start_Shell            `启动 SHELL
CALL Last_Clear             `最后的清理及判断外置的情况
/CALL Save_LOGS              `执行完毕,并保存日志

那几行代码用的是Call语句,PECMD里看了一下,是用来调用子过程的,但它调用的都是上面已经执行过了的,这有什么用?为什么我把他们注释了PE启动完就不加载桌面了?
2#
 楼主| 发表于 2012-8-5 23:03:27 | 只看该作者
怎么没人回复啊
回复

使用道具 举报

3#
发表于 2012-8-5 23:27:23 | 只看该作者
Sub必须要Call才会执行的,位置不重要。
回复

使用道具 举报

4#
 楼主| 发表于 2012-8-6 19:36:04 | 只看该作者
谢谢,我在好几个论坛都问过,全部答非所问,有的还扯到批处理去了,还是无忧能人多。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 18:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表