C++ 执行RegGetValueA时获取错误87(无效的_参数)
我的代码:C++ 执行RegGetValueA时获取错误87(无效的_参数),c++,registry,winreg,C++,Registry,Winreg,我的代码: HKEY hKey; char *path = "SYSTEM\\CurrentControlSet\\Control\\IDConfigDB\\Hardware Profiles\\0001"; LONG result1 = RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS, &hKey); QString q = QString::number(result1); if (result
HKEY hKey;
char *path = "SYSTEM\\CurrentControlSet\\Control\\IDConfigDB\\Hardware Profiles\\0001";
LONG result1 = RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS, &hKey);
QString q = QString::number(result1);
if (result1 == ERROR_SUCCESS) {
LPDWORD b {};
char *buffer[250];
LONG result12 = RegGetValueA(hKey, path, "HwProfileGuid", RRF_RT_REG_SZ, NULL, &buffer, b);
if (result12 == ERROR_SUCCESS) {
QMessageBox messageBox1;
messageBox1.critical(0,"Error", "Sucesso");
messageBox1.setFixedSize(500,200);
} else {
QString q = QString::number(result12);
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.setFixedSize(500,200);
}
} else {
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.setFixedSize(500,200);
}
我是一个初学者,我不确定哪个参数是无效的。说:
仅当pvData为NULL时,pcbData参数才能为NULL
您的pvData
是&缓冲区,它不会是NULL
,但是pcbData
是b
,它被初始化为NULL
。因此,不满足此条件
此外,似乎还有更多错误:
- 该参数应该是一个指针,用于存储传递给
pvData
的缓冲区长度
- 使用指针数组作为缓冲区来接收数据看起来很奇怪
- 已为
RegOpenKeyExA
指定了要读取的键,因此不应再次为RegGetValueA
指定该键。否则,它将尝试读取路径下的路径(SYSTEM\…\0001\SYSTEM\…\0001
)
角色
LPDWORD b {};
char *buffer[250];
LONG result12 = RegGetValueA(hKey, NULL, "HwProfileGuid", RRF_RT_REG_SZ, NULL, &buffer, b);
应该是
char buffer[250];
DWORD b = sizeof(buffer);
LONG result12 = RegGetValueA(hKey, path, "HwProfileGuid", RRF_RT_REG_SZ, NULL, buffer, &b);
嘿修复了错误87,但现在我得到了错误2,你知道如何修复它吗?根据,错误2看起来像error\u FILE\u NOT\u FOUND
。检查要读取的键和值是否存在。还要检查您的程序是否有足够的权限读取该文件。另一种可能性是,由于WOW64,您的代码被迫读取了超出预期的其他位置。啊,已经为RegOpenKeyExA
指定了密钥,因此第二个参数应该是NULL
,以便从打开的密钥读取。就是这样,再次感谢!你不使用这个有什么原因吗?@RemyLebeau嘿!对不起,我没有看到你在回答中包含了这部分代码,我的错:(