首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB6注册表项值问题

VB6注册表项值问题
EN

Stack Overflow用户
提问于 2011-01-14 02:23:58
回答 3查看 4.1K关注 0票数 2

在VB6中,我使用以下代码添加到注册表中。

代码语言:javascript
复制
Dim x As Object
x = CreateObject("WScript.Shell")
x.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "MADNESS"

它会在以下位置创建一个密钥:

代码语言:javascript
复制
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell

而不是:

代码语言:javascript
复制
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

发布于 2011-01-14 02:32:54

这看起来像是因为你有一个64位的操作系统,你运行的是一个32位的(x86)应用程序,它是由Windows的“Windows On Windows”(WOW)功能处理的。基本上,它允许您在x64 Windows OS上运行x86程序。x86程序通常具有自己的注册表项结构(即Wow6432Node)和他们自己的程序文件文件夹(即Program Files (x86))。您可以尝试使用使用WinAPI挂钩的this之类的工具。这可能会让你绕过这个问题,直接写入你想要的密钥。不过,我不确定Windows是否采取了安全措施来防止x86应用程序写入注册表的x64部分。(我不明白为什么会这样。)

票数 0
EN

Stack Overflow用户

发布于 2011-01-14 02:37:53

您可以对x64版本的C:\Windows\System32\cscript.exe进行shell。

仅供参考: x86版本为C:\Windows\SysWOW64\cscript.exe

票数 0
EN

Stack Overflow用户

发布于 2011-01-14 14:31:18

首先,我将停止使用WScript.Shell并切换到这个注册表访问类:http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=70915&lngWId=1

它一开始使用起来有点混乱,但它很可靠,并且提供了对访问64位注册表项的内置支持,而不是重定向的Wow6432Node。只需在类的.Path方法中设置所需的访问权限即可。下面是一个未经测试的示例:

代码语言:javascript
复制
Dim objRegistry as New UniRegistry
Dim objHKLMStartup as New UniRegistry

Set objHKLMStartup = objRegistry.Path([hKey Local Machine], "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", [Registry: Read] + [Registry: WOW64 64-bit])

然后,您可以为每个 variant 在objHKLMStartup中使用一个,以提取给定注册表路径中的任何/所有值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4683710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档