使用RegGetValue()读取Windows注册表项“SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run”将返回错误代码2

时间:2016-03-09 10:52:38

标签: c++ windows registry

  

使用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。

这可能是造成这种混乱的根源?

enter image description here

修改后的代码:

使用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);

1 个答案:

答案 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);

了解更多信息:Accessing an Alternate Registry View