此处内容隐藏,回复后可见!立即回复 回复后请刷新页面!刷新
感谢分享!
我近日在尝试检索Win10系统驱动库中的第三方驱动时,遇到了一个困难,请 5 大出手解救一下。具体需求: 解读驱动相关的注册表值“Version”的数据,转换成可读的字符串,拆分出该数据包含的驱动类名、版本号和日期。
有网友说过读取改注册表值的数据后,用 OLE32.DLL 的某个 API 可以处理。
注册表值“Version”的位置举例如下图:
anson4 我近日在尝试检索Win10系统驱动库中的第三方驱动时,遇到了一个困难,请 5 大出手解救一下。具体需求: 解读驱动相关的注册表值“Version”的数据,转换成 ...
具体哪个api能问出来吗?不然那么多怎么找
问到了,是 StringFromCLSID
感谢分享
我不会操作,但了解到以下信息:
注册表值 Version 的数据读取出来的 16 进制数据,拆分成 6 段,每段 8 个字节。
第 5 段是版本,第 4 段是日期,第 2 第 3 段是类名,类名可以用 OLE32.DLL 的 StringFromCLSID 转换,第 2 第 6 段不知道是什么。
驱动的类名比如是 HIDClass
API不会用,直接PECMD硬干,最后剩下日期没转换成功。
anson4 驱动的类名比如是 HIDClass
set^ EnviMode=1 set^ ForceLocal=1 set$ nl=0d 0a regi --init @HKEY_LOCAL_MACHINE\SYSTEM\DriverDatabase\DriverPackages\usbstor.inf_amd64_a7a83e505860ff91\\Version,a set$# b=%a% getf# -bin b,8#16,c set$# d=*8 0 call $--qd --ret:ret Ole32.dll,StringFromCLSID,*c,*d set?ptr d=e set-make f=%e% set?longlong b=g:(3*8) date *utc:%g% h mess. \ %ret% \%nl%%f% \%nl%%h%
anson4 API不会用,直接PECMD硬干,最后剩下日期没转换成功。
再来个版本号:
set^ EnviMode=1 set^ ForceLocal=1 set$ nl=0d 0a regi --init @HKEY_LOCAL_MACHINE\SYSTEM\DriverDatabase\DriverPackages\usbstor.inf_amd64_a7a83e505860ff91\\Version,a set$# b=%a% getf# -bin b,8#16,c set$# d=*8 0 call $--qd --ret:ret Ole32.dll,StringFromCLSID,*c,*d set?ptr d=e set-make f=%e% set?longlong b=g:(3*8) date *utc:%g% h set?wchar b=i:(4*8+6) set?wchar b=j:(4*8+4) set?wchar b=k:(4*8+2) set?wchar b=l:(4*8+0) calc i=%i% calc j=%j% calc k=%k% calc l=%l% mess. \ %ret% \%nl%%f% \%nl%%h% \%nl%%i%.%j%.%k%.%l%
谢谢 5 大!
ENVI 的用法真是变化多端,套好了蛙要看看能不能弄明白。
anson4 谢谢 5 大! ENVI 的用法真是变化多端,套好了蛙要看看能不能弄明白。
这个没人带一下真不好学。我也是研究了好久,积累的知识多了,一下子就通了。
是啊,尤其是调用API最难,还经常涉及到ENVI的各种用法,比如各种数据类型的用法等,PECMD的帮助文档又不好理解。
我很喜欢这个板块,希望能从中多学一些东西,可每次都是停留在套娃上,跨越不了-_-。
527104427 再来个版本号: set^ EnviMode=1 set^ ForceLocal=1 set$ nl=0d 0a ...
set$# d=*8 0是什么意思,设置的指针变量吗
set?longlong b=g:(3*8)是从第25字节开始读8个字节吗
5大要不然加个注释
在我电脑运行不知道为什么只有日期和版本的信息,前两行信息为空
123 set$# d=*8 0是什么意思,设置的指针变量吗 set?longlong b=g:(3*8)是从第25字节开始读8个字节吗 5大要不然加个注释 在我电脑运行不知道为什么只有日期和版本的信息 ...
你这两个解读都对。一般翻看PECMD说明+微软文档,都能明白。
调用api,要不就返回成功 (0),要不就返回失败 (其它数字)。不可能空的吧,除非你是没有这个DLL。系统阉割太厉害了吧?
527104427 你这两个解读都对。一般翻看PECMD说明+微软文档,都能明白。 调用api,要不就返回成功 (0),要不就返回失败 (其它数字)。不可能空的吧,除非你是没有这个DLL。系统阉割太厉害了吧?
破案了pecmd的bug,换成最新版可以了
*8 0是人为分配的地址吗,还是什么,看pecmd帮助没明白
那getf也是从第9个字节开始读16个字节吗
123 破案了pecmd的bug,换成最新版可以了 *8 0是人为分配的地址吗,还是什么,看pecmd帮助没明白 那getf也是从第9个字节开始读16个字节吗
用vc跑一下就知道了
定义为常量不放心的话,就用PECMD内置的变量%ptrlen%
getf解读正确。
527104427 用vc跑一下就知道了 定义为常量不放心的话,就用PECMD内置的变量%ptrlen% & ...
明白了,谢谢
谢谢解读!
请教5大一个问题,关于CALC,下面两种写法等效吗?
CALC &&DisplaySel=%&DisplaySel%+1
CALC &&DisplaySel=%&DisplaySel% + 1
第二种写法,在PECMD的示例中似乎不少见,但实际使用中我发现这种写法偶尔失效,改成第一种就正常了,感觉很奇怪。
anson4 请教5大一个问题,关于CALC,下面两种写法等效吗? CALC &&DisplaySel=%&DisplaySel%+1 CALC &&DisplaySel ...
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=205402&pid=4608098&fromuid=378114
第二种写法才是正确的。运算符前后要有空格,不然可能会出问题。
好的,谢谢!
dos时代的菜鸟贡献了很牛B的分区脚本。
这个代买可以,收藏了