VB6注册表项值问题
在VB6中,我使用以下代码添加到注册表VB6注册表项值问题,vb6,registry,key,edit,Vb6,Registry,Key,Edit,在VB6中,我使用以下代码添加到注册表 Dim x As Object x = CreateObject("WScript.Shell") x.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "MADNESS" 但是,它会在以下位置创建密钥: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT
Dim x As Object
x = CreateObject("WScript.Shell")
x.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "MADNESS"
但是,它会在以下位置创建密钥:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
而不是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
感谢您的帮助。这似乎是因为您有一个64位操作系统,并且您正在运行一个32位(x86)应用程序,该应用程序由Windows的“Windows On Windows”(WOW)功能处理。基本上,它允许您在x64 Windows操作系统上运行x86程序。x86程序通常有自己的注册表项结构(即
Wow6432Node
)和自己的程序文件文件夹(即程序文件(x86)
)。您可以尝试使用类似使用WinAPI钩子的东西。这可能允许您绕过该问题,直接写入所需的密钥。不过,我不确定Windows是否有防止x86应用程序写入注册表x64部分的安全措施。(我不明白为什么会这样。)看起来这是因为您有一个64位操作系统,并且您正在运行一个32位(x86)应用程序,该应用程序由Windows的“Windows On Windows”(WOW)功能处理。基本上,它允许您在x64 Windows操作系统上运行x86程序。x86程序通常有自己的注册表项结构(即Wow6432Node
)和自己的程序文件文件夹(即程序文件(x86)
)。您可以尝试使用类似使用WinAPI钩子的东西。这可能允许您绕过该问题,直接写入所需的密钥。不过,我不确定Windows是否有防止x86应用程序写入注册表x64部分的安全措施。(我不明白为什么会这样。)您可以使用shellC:\Windows\System32\cscript.exe
这是x64版本
仅供参考:x86版本是
C:\Windows\SysWOW64\cscript.exe
您可以shellC:\Windows\System32\cscript.exe
,这是x64版本
仅供参考:x86版本是
C:\Windows\SysWOW64\cscript.exe
首先,我将停止使用WScript.Shell并切换到此注册表访问类:
一开始使用它有点混乱,但它是可靠的,并且提供了访问64位注册表项的内置支持,而不是重新定向的WOW6432节点。只需在类的.Path方法中设置所需的访问权限即可。以下是一个未经测试的示例:
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])
然后,您可以对objHKLMStartup中的每个变量使用,以提取给定注册表路径中的任何/所有值。首先,我将停止使用WScript.Shell并切换到此注册表访问类: 一开始使用它有点混乱,但它是可靠的,并且提供了访问64位注册表项的内置支持,而不是重新定向的WOW6432节点。只需在类的.Path方法中设置所需的访问权限即可。以下是一个未经测试的示例:
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])
然后,可以对objHKLMStartup中的每个变量使用,以提取给定注册表路径中的任何/所有值