gpt4 book ai didi

c++ - 尝试将注册表写入 HKLM 改为写入 HKCR

转载 作者:可可西里 更新时间:2023-11-01 09:37:50 25 4
gpt4 key购买 nike

我的任务是更新旧的 Visual Studio C++ COM 可执行文件以使用 Visual Studio 2010 并在 64 位 Windows 7 上运行。(程序本身是 32 位。)

该过程的一部分涉及确保注册表读取/写入/创建仍然有效和/或更新它们以使用 HKEY_CURRENT_USER 而不是 HKEY_LOCAL_MACHINE。但是,在测试使用 RegCreateKeyExRegQueryValueRegSetValue 等注册表函数并使用 ProcessMonitor 观察注册表访问时,我注意到一些(可能?)奇怪的行为。

当根指定为 HKEY_CURRENT_USER 时,一切似乎都按预期工作。例如,在尝试创建 key 时

HKCU\Software\Classes\CLSID\[Guid]

ProcessMonitor 将显示正在创建的以下键,

HKCU\Software\Classes\Wow6432Node\CLSID\[Guid]

这是预期的(64 位机器上的 32 位应用程序)。

但是,如果在尝试创建 key 时根是 HKEY_LOCAL_MACHINE

HKLM\Software\Classes\CLSID\[Guid]

ProcessMonitor 将显示正在创建的以下键,

HKCR\Wow6432Node\CLSID\[Guid]

这是预期的行为吗?跟限制写入HKEY_LOCAL_MACHINE有关系吗?这是我第一次真正处理注册表访问,所以我不熟悉任何细节。通过一些研究,我了解到 HKEY_CLASSES_ROOTHKCUHKLM 的某种合并,但我不确定这是否相关.

程序以管理员身份运行,禁用了 UAC。第一次注册表访问看起来像这样,使用 pszRootKey = 'Software/Classes',其他一切都建立在 m_hk

之上
dwErr = RegCreateKeyEx(
HKEY_LOCAL_MACHINE, pszRootKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL,
&m_hk, NULL
);

编辑:

当单步执行代码时,上面对 RegCreateKeyEx() 的调用会在 ProcessMonitor 中产生以下结果:

 Operation     | Path | Result  | Detail
---------------------------------------------------------------------------------
RegQueryKey | HKLM | SUCCESS | Query: HandleTags, HandleTags: 0x0
RegCreateKey | HKCR | SUCCESS | Desired Access: All Access, Disposition:REG_OPENED_EXISTING_KEY
RegSetInfoKey | HKCR | SUCCESS | KeySetInformationClass: KeySetHandleTagsInformation, Length: 0

最佳答案

如果您在禁用 UAC 的情况下以管理员权限运行您的程序,这将表明您的问题与用户帐户控制无关。而不是这个,问题很可能是WOW64引起的。您可以在以下位置找到有关此内容的更多信息:

关于c++ - 尝试将注册表写入 HKLM 改为写入 HKCR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24633788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com