在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\CurrentVersion\Winlogon\Shell而不是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon任何帮助都是非常感谢的。
发布于 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部分。(我不明白为什么会这样。)
发布于 2011-01-14 02:37:53
您可以对x64版本的C:\Windows\System32\cscript.exe进行shell。
仅供参考: x86版本为C:\Windows\SysWOW64\cscript.exe
发布于 2011-01-14 14:31:18
首先,我将停止使用WScript.Shell并切换到这个注册表访问类:http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=70915&lngWId=1
它一开始使用起来有点混乱,但它很可靠,并且提供了对访问64位注册表项的内置支持,而不是重定向的Wow6432Node。只需在类的.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])然后,您可以为每个 variant 在objHKLMStartup中使用一个,以提取给定注册表路径中的任何/所有值。
https://stackoverflow.com/questions/4683710
复制相似问题