找回密码
 加入
搜索
查看: 18283|回复: 11

[系统综合] 如何将注册表REG_BINARY类型数据转换成字符串格式?

 火.. [复制链接]
发表于 2012-12-31 22:57:50 | 显示全部楼层 |阅读模式
最近在搞网络驱动这一块的东西,在网络连接右键属性里面的一些协议是在注册表HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network项下的Config键值中,而这个键值是REG_BINARY类型的,读取出来是十六进制的,使用_HexToSting函数转换后返回竟然是一个空的字符串。

因为我要适用不同系统,先读取这里面的信息在里面增加一个协议的配置信息,再写入到注册表中,但是这样读取出来以后无法转换,我也不知道里面都写了些什么东西、什么格式的,我应该如何写入进去?

请各位指点如何才能读取出来这个注册表项里面的信息修改后再导入进去。
发表于 2013-1-1 01:57:11 | 显示全部楼层
RegWrite('HKCU\Software\Functon', '', 'REG_BINARY', Binary('0x00000000000000000000000000000000600000006a790000f403000018a00000'))
 楼主| 发表于 2013-1-1 14:04:55 | 显示全部楼层
回复 2# ifana


    写入是没问题的,但是现在的情况是不知道该写入什么内容。比如开始网络连接里面没有文件与打印机共享这个协议,我把注册表内容读出来,然后再安装文件与打印机共享,此时注册表键值会变更,我不清楚里面到底变更了什么,想通过注册表直接写入的方式把内容写进去,手动安装无法批量完成。
发表于 2013-1-1 20:47:04 | 显示全部楼层
这有个方法大概可以试试,虽说有点投机取巧,看看inf文件里怎么加的注册表,可能有收获
 楼主| 发表于 2013-1-2 19:12:07 | 显示全部楼层
回复 4# netegg


    感谢指点,我去瞧瞧inf,估计inf里面没有指定。。
发表于 2013-1-3 07:21:09 | 显示全部楼层
回复 3# nmgwddj


    蛋蛋的思路不错,这确实是个好办法。
还有就是收集整理,用regsnap把所有你能用到的情况的注册表变动全部整理下来,用到哪个就写哪个。
发表于 2013-1-3 12:30:14 | 显示全部楼层
本帖最后由 netegg 于 2013-1-3 12:45 编辑

回复 6# haijie1223
regsnap注册表的方法不是不行,不过有局限性,有的binary实际是hex(7)[REG_MULTI_SZ],是返回不出来的
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\新项 #1]
"1"=""   (reg_sz)
"2"=hex:  (reg_binary)
"3"=dword:00000000 (reg_dword)
"4"=hex(b):00,00,00,00,00,00,00,00 (reg_qword)
"5"=hex(7):00,00 (reg_multi_sz)
"6"=hex(2):00,00 (reg_expand_sz)
 楼主| 发表于 2013-1-3 19:38:22 | 显示全部楼层
今晚看,还有更紧急的事情。
发表于 2013-1-4 15:47:10 | 显示全部楼层
本帖最后由 shqf 于 2013-1-4 15:50 编辑

楼主,你需要的Config键值,读取出来后用msgbox显示过吗?我试了好几次,才发现是要好几分钟才能显示出来呵。如果不显示其值,直接用_HexToSting来转换为字符串,再msgbox字符串,则程序是马上显示其为空值。好像程序代码没等读取好Config键值就在转换并接着显示字符串值了。如手工粘贴Config键值的一部分,再用_HexToSting来转换为字符串是能成功的。只是这样的字符串很难有进一步利用的价值了。建议改变实现此种功能的程序思路吧。
发表于 2013-1-4 17:55:07 | 显示全部楼层
本帖最后由 netegg 于 2013-1-4 18:23 编辑

导出来
[au3]Local $ret=''
While StringLen($value)  > 0
        $temp = StringLeft($value, 2)
        If Not (StringLeft($temp, 1) = '0' Or StringLeft($temp , 1) = '1') Then $ret &= Chr('0x' & $temp)
        $value= StringTrimLeft($value, 2)
WEnd

FileWrite('1.txt',StringStripWS ($ret,8))[/au3]
处理下,上面的不是很全,不过能看出点意思
大概限制下$temp值的范围就可以出来正常的文本了
不过说老实话,读出来用处好像也不大
 楼主| 发表于 2013-1-5 19:05:38 | 显示全部楼层
本帖最后由 nmgwddj 于 2013-1-5 19:06 编辑

回复 10# netegg


    貌似是一个变量储存不了这么长的字符串。
    另外在inf内看不到这个注册表相关信息,安装这个协议是调用微软的snetcfg.exe,应该是这个程序写的。
发表于 2013-1-5 22:19:29 | 显示全部楼层
回复 11# nmgwddj
试试看吧,忘了是导出读的还是直接读的了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-29 12:45 , Processed in 0.077755 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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