【问题标题】:RegQueryValue fails but RegQueryValueEx returns a valueRegQueryValue 失败,但 RegQueryValueEx 返回一个值
【发布时间】:2014-01-28 23:15:12
【问题描述】:

我正在尝试使用一些 16 位和 32 位注册表函数,但在使用 RegQueryValue(未扩展)时遇到了问题。我正在打开 HKLM\Software\Microsoft\EventSystem 的句柄(这个键是随机选择的,问题在键之间持续存在)。当我为“已配置”调用 RegQueryValue 时,出现错误。但是,对于 RegQueryValueEx,我实际上能够得到值。

我在 Windows 7 x64 上运行此程序,并使用管理员权限进行了测试(没有管理员权限意味着 RegOpenKeyEx 因权限不足而失败)。

这里是代码(请参阅https://stackoverflow.com/questions/455434/how-should-i-use-formatmessage-properly-in-c for printErrorMessage):

#define BUFLEN 80
int main() {
    HKEY hkey;
    DWORD ret = RegOpenKeyA(rootKey, "Software\\Microsoft\\EventSystem", &hkey);
    printf("Opened key, handle is %i\n", hkey);
    LONG buflen = BUFLEN;
    DWORD dwbuflen = BUFLEN;
    char data[BUFLEN];
    BYTE bdata[BUFLEN];
    ret = RegQueryValueA(hkey, "Configured", data, &buflen);
    if (ret != ERROR_SUCCESS) {
        printf("Unable to open Configured with RegQueryValueA\n");
        printErrorMessage(ret);
    } else {
        printf("Value of Configured was %s\n", data);
    }
    ret = RegQueryValueExA(hkey, "Configured", 0, NULL, bdata, &dwbuflen);
    if (ret != ERROR_SUCCESS) {
        printf("Unable to open Configured with RegQueryValueExA\n");
        printErrorMessage(ret);
    } else {
        printf("Value of Configured was %s\n", bdata);
    }
}

这是输出:

Opened key, handle is 68
Unable to open Configured with RegQueryValueA
The system cannot find the file specified.
Value of Configured was ☺

(配置的值很不稳定,因为我还没有费心将 REG_DWORD 转换为字符串,但这对我遇到的问题无关紧要)。

【问题讨论】:

  • 使用 RegOpenKeyEx。并检查所有 api 调用的错误。

标签: c winapi registry


【解决方案1】:

当您调用RegQueryValue(hkey, "Configured") 时,它会尝试读取名为“已配置”的默认值(或未命名值) .这是 MSDN 中描述的 RegQueryValue() 的语义。

因此 RegQueryValue() 不能用于读取“已配置”之类的命名值,因此如果要读取命名值,则必须使用 RegQueryValueEx()。

【讨论】:

    【解决方案2】:

    您正在查询一个值,但RegQueryValue() 的字符串参数是一个子键RegQueryValue()RegQueryValueEx() 的对比见 msdn。

    【讨论】:

    • 我选择了 Xargs 的答案,因为它更具描述性,但你也是对的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多