【发布时间】: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 调用的错误。