我的代码:
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);
}
我是初学者,我不确定哪个参数是无效的。
答案 0 :(得分:1)
RegGetValueA function (winreg.h) - Win32 apps | Microsoft Docs 说:
<块引用>只有当 pvData 为 NULL 时,pcbData 参数才能为 NULL。
你的pvData
是&buffer
,它不会是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);