新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → 急!急!注册表二进制 读取问题 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 7212 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 急!急!注册表二进制 读取问题 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     rryr 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:0
      积分:52
      门派:XML.ORG.CN
      注册:2007/5/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给rryr发送一个短消息 把rryr加入好友 查看rryr的个人资料 搜索rryr在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看rryr的博客楼主
    发贴心情 急!急!注册表二进制 读取问题

    是对 代理服务器 键值的修改 "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" 下的 DefaultConnectionSettings,修改可以改IE代理,但就是读取显示"尝试读取或写入受保护的内存。这通常指示其他内存已损坏",求大大们帮帮
    本人菜鸟一个,没删注释! Text1.Text的内容为 DefaultConnectionSettings
    模块:
    Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByVal ulOptions As Integer, ByVal samDesired As Integer, ByRef phkResult As Integer) As Integer
        '读取注册表的函数  
      
        Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _
            ByVal hKey As Integer, _
            ByVal lpValueName As String, _
            ByVal lpReserved As Integer, _
            ByVal lpType As Integer, _
            ByRef lpData As String, _
        ByRef ByreflpcbData As Integer _
      ) As Integer
        '  Note  that  if  you  declare  the  lpData  parameter  as  String,  you  must  pass  it  By  Value.  
        '设置注册表的函数  
        Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As Integer, ByVal lpData As String, ByVal cbData As Integer) As Integer                  '  Note  that  if  you  declare  the  lpData  parameter  as  String,  you  must  pass  it  By  Value.  
        '关闭注册表的函数  
        Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer
        Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Integer, ByVal lpSubKey As String) As Integer
        Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Integer, ByVal lpValueName As String) As Integer
        Public Const HKEY_CURRENT_USER = &H80000001
        Public Const sKey = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections"

        '这句声明表示是以二进制方式打开注册表  
        Public Const REG_BINARY = 3
        Public Const REG_dword = 4&
        Public Const internet_option_proxy = 38
        Public Const INTERNET_OPTION_SETTINGS_CHANGED = 39
        '下面的这些声明是操作注册表的权限,最后一个声明  KEY_ALL_ACCESS  就是把所有的权限都打开了  
        Public Const STANDARD_RIGHTS_ALL = &H1F0000
        Public Const KEY_QUERY_VALUE = &H1
        Public Const KEY_SET_VALUE = &H2
        Public Const KEY_CREATE_SUB_KEY = &H4
        Public Const KEY_ENUMERATE_SUB_KEYS = &H8
        Public Const KEY_NOTIFY = &H10
        Public Const KEY_CREATE_LINK = &H20
        Public Const SYNCHRONIZE = &H100000
        Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or _
      KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _
      KEY_CREATE_LINK) And (Not SYNCHRONIZE))

    下面是具体写读注册表:问题在1111111111 标记处
        Public Sub setproxy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles setproxy.Click
            'hKey接受打开注册表项的句柄,lenData接受要获取的数据的长度  
            Dim hKey As Integer, lenData As Integer
            '以所有可操作的权限打开注册表,并把打开的注册表的句柄保存到  hKey  变量中  
            RegOpenKeyEx(HKEY_CURRENT_USER, sKey, 0, KEY_ALL_ACCESS, hKey)
            '获取指定连接的数据长度放到  lenData  中  
            RegQueryValueEx(hKey, Trim(Text1.Text), 0, 0, vbNullString, lenData)
            Debug.Write(lenData)
            '分配一个长度是  lenData  的字节型变量数组存放数据。存取注册表中二进制的数据必须用字节型变量,也就是  Byte  类型的变量  
            Dim bArr(lenData - 1) As Byte
            '以二进制的方式获取  lenData  长度的数据并保存到  bArr  数组中
    11111111111:  
            RegQueryValueEx(hKey, Trim(Text1.Text), 0, REG_BINARY, bArr(0), lenData)
            '如果使用代理服务器  
            bArr(8) = 3
            Dim i As Long, j As Long, s As String
            s = Trim(proxyT1.Text)                                        '变量等于去掉填写代理服务器地址和端口号的文本框中内容的空格的内容  
            i = Len(s)                                                            '获取去掉空格后的代理服务器地址和端口号的长度,以供后面写入注册表中使用  
            bArr(12) = i                                                        '第十三个数组存放代理服务器地址和端口号的长度  
            For j = 1 To i                                                    '循环范围是从1到代理服务器地址和端口号的长度  
                bArr(j + 15) = Asc(Mid(s, j, 1))        '依次取出代理服务器地址和端口号的单个字符并且把字符转换成字符的ASCII代码,并且依次放到从第17个数组开始的数组  
            Next j
            '把设置后的数组,也就是要设置的信息放到注册表中  
            RegSetValueEx(hKey, Trim(Text1.Text), 0, REG_BINARY, bArr(0), UBound(bArr) + 1)
            '关闭注册表  
            RegCloseKey(hKey)
        End Sub


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/5/22 23:03:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/29 6:27:45

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms