无忧启动论坛

标题: PECMD READ WRIT 命令应用示例 [打印本页]

作者: lxl1638    时间: 2010-6-13 12:10
标题: PECMD READ WRIT 命令应用示例
READ 和 WRIT 是 PECMD.EXE 近期新增的一对命令,本人先做一个应用示例
--- 将注册表中的有关路径传换成 INI 文件所在位置。

本人是拿论坛下载到的 DrWeb6.WIM 来试验的,DrWeb6.WIM 双击后固定挂到 C: 盘的固定目录来通过 CMD.EXE 控制运行,同时在 C: 留下一些垃圾(如扫描引擎、服务DLL),实在话 DrWeb6.WIM 应用 WimTool 组件的功能不十分好,也不到位。
本人的目的是想将 DrWeb6.WIM 应用到任意目录来运行,同时将 DrWeb6.WIM 的一些辅助目录(如扫描引擎、服务DLL)也移到 DrWeb6 的挂载目录。所以必须做到
1、修改 drweb32.ini 配置文件
2、修改 DrWeb.reg 注册表文件的相关路径;
3、修改复制、解压文件的相关路径。

其中第3点不难,用 CMD 批处理或 WimTool 组件中的 WinCMD.EXE 都容易实现;
第1点手工修改就可以了,当然可以参照第2点来修改,修改好的 drweb32.ini 要备一份在 WIM 内(如以 drweb32.ini.BAK 为名备份),
drweb32 更新时可能会将它恢复成默认设置,下次挂载后就用 drweb32.ini.BAK 恢复。

难点是第2点,修改 DrWeb.reg 中的相关路径,以下是 DrWeb.reg 的原内容,
蓝色部分就是要将其修改为 DrWeb6.WIM 的挂载路径(任意目录):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\DrWMenuHandlers]
@="{e7593602-124b-47c9-9f73-a69308edc973}"
[HKEY_CLASSES_ROOT\Folder\shellex\ContextMenuHandlers\DrWMenuHandlers]
@="{e7593602-124b-47c9-9f73-a69308edc973}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\DrWMenuHandlers]
@="{e7593602-124b-47c9-9f73-a69308edc973}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shellex\ContextMenuHandlers\DrWMenuHandlers]
@="{e7593602-124b-47c9-9f73-a69308edc973}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e7593602-124b-47c9-9f73-a69308edc973}\InProcServer32]
@="C:\\DrWeb\\drwsxtn.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e7593602-124b-47c9-9f73-a69308edc973}]
@="Shell Extension for DrWeb"
[HKEY_CLASSES_ROOT\CLSID\{e7593602-124b-47c9-9f73-a69308edc973}\InProcServer32]
@="C:\\DrWeb\\drwsxtn.dll"
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID\{e7593602-124b-47c9-9f73-a69308edc973}]
@="Shell Extension for DrWeb"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\DrWeb32W.Exe]
@="C:\\DrWeb"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\DrWeb32W.Exe]
"Path"="C:\\DrWeb"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\DrWeb Quarantine Files]
@="{B8140181-C6E4-49C2-95D4-F93FE8D2BD6E}"
"Priority"=dword:000000C8
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{e7593602-124b-47c9-9f73-a69308edc973}]
@="Shell Extension for DrWeb"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DrWebEngine\Parameters]
"SpamModuleName"="vrcpp.dll"
"VdbPath"="C:\\DrWeb\\Bases"
"SpamPath"="%CommonProgramFiles%\\Doctor Web\\Scanning Engine\\"


首先将 DrWeb.reg 修名为 DrWeb.TXT,并将其内容修改为:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\DrWMenuHandlers]
@="{e7593602-124b-47c9-9f73-a69308edc973}"
[HKEY_CLASSES_ROOT\Folder\shellex\ContextMenuHandlers\DrWMenuHandlers]
@="{e7593602-124b-47c9-9f73-a69308edc973}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\DrWMenuHandlers]
@="{e7593602-124b-47c9-9f73-a69308edc973}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shellex\ContextMenuHandlers\DrWMenuHandlers]
@="{e7593602-124b-47c9-9f73-a69308edc973}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e7593602-124b-47c9-9f73-a69308edc973}\InProcServer32]
@="%CurDir%\\drwsxtn.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e7593602-124b-47c9-9f73-a69308edc973}]
@="Shell Extension for DrWeb"
[HKEY_CLASSES_ROOT\CLSID\{e7593602-124b-47c9-9f73-a69308edc973}\InProcServer32]
@="%CurDir%\\drwsxtn.dll"
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID\{e7593602-124b-47c9-9f73-a69308edc973}]
@="Shell Extension for DrWeb"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\DrWeb32W.Exe]
@="%CurDir%"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\DrWeb32W.Exe]
"Path"="%CurDir%"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\DrWeb Quarantine Files]
@="{B8140181-C6E4-49C2-95D4-F93FE8D2BD6E}"
"Priority"=dword:000000C8
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{e7593602-124b-47c9-9f73-a69308edc973}]
@="Shell Extension for DrWeb"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DrWebEngine\Parameters]
"SpamModuleName"="vrcpp.dll"
"VdbPath"="%CurDir%\\Bases"
"SpamPath"="%CurDir%\\Scanning Engine\\"

接着用以下 PECMD/WinCMD 脚本将其转换成与当前目录匹配的注册表文件
_SUB DoLoop
   READ %CurDir%\DrWeb.TXT,%CurLine%,CurLineText //读取一行到 CurLineText 中
   WRIT %CurDir%\DrWeb.REG,$+0,%CurLineText% //将环境变量展开后写入 DrWeb.REG
   CALC #CurLine = %CurLine% + 1  //到下一行了
_END
ENVI CurLine=1  //从第1行开始
READ %CurDir%\DrWeb.TXT,-1,LastLine //读取行数
LOOP #%CurLine%<%LastLine%,CALL DoLoop //通过循环转换各行的路径


然后通过 PECMD/WinCMD 脚本完成文件解压、复制、导入注册表、启动 DrWeb;

[ 本帖最后由 lxl1638 于 2010-6-13 12:52 编辑 ]
作者: yamingw    时间: 2010-6-13 13:43
以后正常系统中的绿色软件也可以用PECMD/WinCMD 来做了。
作者: lxl1638    时间: 2010-6-13 13:57
原帖由 yamingw 于 2010-6-13 13:43 发表
以后正常系统中的绿色软件也可以用PECMD/WinCMD 来做了。


并非十分理想,如果遇到一些 REG_EXPAND_SZ 类的路径就难办了。

大多数情况下,可以将 REG_EXPAND_SZ 类字符串改为 REG_SZ 类字符串来达到目的,很多时候应用程式读取注册表的数据时,系统底层的函数会按键名读取指定的数据,再根据数据类型(REG_EXPAND_SZ/REG_SZ/REG_DWORD/REG_BINARY)等填入应用程式读取注册表的API指定的缓冲区中。本人测试过,将注册表中的 REG_EXPAND_SZ 数据删掉,建立与名称之相同的 REG_SZ 类数据,赋以它与 REG_EXPAND_SZ 相同的数据值,这样在Uincode版的应用程式大多数情况下读取的字符串是可靠的。
作者: yjd    时间: 2010-6-13 14:08
以后正常系统中的绿色软件也可以用PECMD/WinCMD 来做了。

我一看也联想到这个,看了3楼。。。。期待完善
作者: renchmin    时间: 2010-6-13 14:14
不错的啊,楼主解释的很详细的。
作者: fyqingshan    时间: 2010-6-13 21:12
学习了,就是就是操作文件吗?
作者: coolg    时间: 2010-6-19 23:06
WRIT 可以写入一个存在的文件

请教九帅:怎样直接用 writ 命令创建一个空文本文件

谢谢!!

[ 本帖最后由 coolg 于 2010-6-19 23:35 编辑 ]
作者: lxl1638    时间: 2010-6-21 12:04
原帖由 coolg 于 2010-6-19 23:06 发表
WRIT 可以写入一个存在的文件

请教九帅:怎样直接用 writ 命令创建一个空文本文件

谢谢!!


答案是可行的,你自己试验就知道了。
对于已存在的文件,Writ命令不会修改文件的编码,新建的文件,WRIT命令将以 Ansi 编码保存,
如果要转换成其它编码,只能用其它工具来完成。
作者: coolg    时间: 2010-6-21 12:39
谢谢九帅回复 !!!
我是在PE启动过程,把一些变量,用WRIT写在一个文本里,
待PE启动后,再用READ读出来应用。
试了好多次,没搞成,所以前来请教。
可能是便用环境问题。
我再试试。。
作者: lxl1638    时间: 2010-6-21 18:59
原帖由 coolg 于 2010-6-21 12:39 发表
谢谢九帅回复 !!!
我是在PE启动过程,把一些变量,用WRIT写在一个文本里,
待PE启动后,再用READ读出来应用。
试了好多次,没搞成,所以前来请教。
可能是便用环境问题。
我再试试。。


http://bbs.wuyou.net/forum.php?mod=viewthread&tid=91524&page=307#pid1973823

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=91524&page=308#pid1974059
作者: coolg    时间: 2010-6-21 20:14
九帅真神人也,就知道我要找一些论证。

谢谢九帅!

我想到问题可能出在写的内容里有非法字符,记得有这帖,翻了不少,也没翻到。
作者: canmao    时间: 2010-6-21 20:41
嘿嘿,前车之鉴!!!!




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3