无忧启动论坛

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

PECMD READ WRIT 命令应用示例

[复制链接]
跳转到指定楼层
1#
发表于 2010-6-13 12:10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 编辑 ]
2#
发表于 2010-6-13 13:43:23 | 只看该作者
以后正常系统中的绿色软件也可以用PECMD/WinCMD 来做了。
回复

使用道具 举报

3#
 楼主| 发表于 2010-6-13 13:57:21 | 只看该作者
原帖由 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版的应用程式大多数情况下读取的字符串是可靠的。
回复

使用道具 举报

4#
发表于 2010-6-13 14:08:32 | 只看该作者
以后正常系统中的绿色软件也可以用PECMD/WinCMD 来做了。

我一看也联想到这个,看了3楼。。。。期待完善
回复

使用道具 举报

5#
发表于 2010-6-13 14:14:36 | 只看该作者
不错的啊,楼主解释的很详细的。
回复

使用道具 举报

6#
发表于 2010-6-13 21:12:45 | 只看该作者
学习了,就是就是操作文件吗?
回复

使用道具 举报

7#
发表于 2010-6-19 23:06:45 | 只看该作者
WRIT 可以写入一个存在的文件

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

谢谢!!

[ 本帖最后由 coolg 于 2010-6-19 23:35 编辑 ]
回复

使用道具 举报

8#
 楼主| 发表于 2010-6-21 12:04:42 | 只看该作者
原帖由 coolg 于 2010-6-19 23:06 发表
WRIT 可以写入一个存在的文件

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

谢谢!!


答案是可行的,你自己试验就知道了。
对于已存在的文件,Writ命令不会修改文件的编码,新建的文件,WRIT命令将以 Ansi 编码保存,
如果要转换成其它编码,只能用其它工具来完成。
回复

使用道具 举报

9#
发表于 2010-6-21 12:39:12 | 只看该作者
谢谢九帅回复 !!!
我是在PE启动过程,把一些变量,用WRIT写在一个文本里,
待PE启动后,再用READ读出来应用。
试了好多次,没搞成,所以前来请教。
可能是便用环境问题。
我再试试。。
回复

使用道具 举报

10#
 楼主| 发表于 2010-6-21 18:59:41 | 只看该作者
原帖由 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
回复

使用道具 举报

11#
发表于 2010-6-21 20:14:24 | 只看该作者
九帅真神人也,就知道我要找一些论证。

谢谢九帅!

我想到问题可能出在写的内容里有非法字符,记得有这帖,翻了不少,也没翻到。
回复

使用道具 举报

12#
发表于 2010-6-21 20:41:06 | 只看该作者
嘿嘿,前车之鉴!!!!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-1-11 07:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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