gpt4 book ai didi

c++ - RegOpenKeyEx 返回 ERROR_SUCCESS 但它不应该(Windows 7)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:14 26 4
gpt4 key购买 nike

我有一个关于 RegOpenKeyEx 的问题,代码:

#include <tchar.h>
#include <stdio.h>
#include <windows.h>

#pragma comment (lib, "Advapi32.lib")


int main () {
TCHAR *keyName = _T("SOFTWARE\\foobar2000\\capabilities");
HKEY key = NULL;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyName, 0, KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) {
printf("open key failed!\n");
return -1;
} else {
printf("open key success!\n");
}

TCHAR *value = _T("123");
if (RegSetValueEx(key, _T("xxx"), 0, REG_SZ,
(const BYTE *)value, sizeof(TCHAR) * (_tcslen(value) + 1)) != ERROR_SUCCESS) {
printf("set value failed!\n");
}
RegCloseKey(key);
return 0;
}

将代码保存在reg.cpp等命令模式下:

cl reg.cpp

我得到了 reg.exe,运行它:

D:\tmp>reg.exe

开钥成功!

但该值尚未写入注册表。

另一个奇怪的是,如果我使用 visual studio 创建一个 CLI 项目,并将代码粘贴到 main() 中,RegOpenKeyEx() 将返回 false。

平台为windows 7,开启UAC。

最佳答案

听起来您正在使用虚拟化技术。如果应用程序没有 list ,当您尝试写入 HKLM\Software 时,它​​实际上写入了 HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software .为防止这种情况,您可以提升运行应用程序。您可能想要添加一个 list ,强制它每次都以提升的方式运行。或者,停止写入 HKLM 并改用 HKCU。

至于 C++/CLI 部分,我猜你会得到一个 asInvoker list ,它会抑制虚拟化并导致尝试进入 HKLM 失败。

关于c++ - RegOpenKeyEx 返回 ERROR_SUCCESS 但它不应该(Windows 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3079525/

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