使用
RegGetValue()
读取Windows注册表项“SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run”将返回错误代码2.
我已经坐了好几个小时来调试这个问题,但还没有找到解决方案。
以下是我用来检索名为“test”的注册表值的代码:
long result = RegGetValue(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), TEXT("test"), RRF_RT_ANY, &dwType, (PVOID)&buff, &size);
下面是一张图片,我已将注册表值“test”添加到Run键(如上所述)。
我得到的错误代码是2,表示无效文件。
应该提到本地主机正在运行Windows 10 Pro x64。
这可能是造成这种混乱的根源?
修改后的代码:
使用KEY_WOW64_64KEY标志后,我仍然会收到错误代码2。
RegCreateKeyEx(
HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),
NULL,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS | KEY_WOW64_64KEY,
NULL,
&hKey,
&dwStatus)
long result = RegGetValue(hKey, NULL, TEXT("test"), RRF_RT_ANY, &dwType, (PVOID)&buff, &size);
答案 0 :(得分:2)
<强>问题强>
您最有可能尝试从32位应用程序访问64位注册表视图。
默认情况下,在WOW64上运行的32位应用程序访问32位 注册表视图和64位应用程序访问64位注册表 视图。以下标志使32位应用程序可以访问 重定向键在64位注册表视图和64位应用程序中 访问32位注册表视图中的重定向键。这些标志有 对共享注册表项没有影响。
<强>解决方案强>
您可以在x64模式下重建应用程序,也可以指定所需的注册表视图。
HKEY key;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &key);
long result = RegGetValue(key, nullptr, TEXT("test"), RRF_RT_ANY, &dwType, (PVOID)&buff, &size);