Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 执行RegGetValueA时获取错误87(无效的_参数)_C++_Registry_Winreg - Fatal编程技术网

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嘿!对不起,我没有看到你在回答中包含了这部分代码,我的错:(