我的 winreg 函数出现错误 2
I am getting error 2 in my winreg function
我的代码:
HKEY hKey;
char *path = "SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001\HwProfileGuid";
LONG result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS, &hKey);
QString q = QString::number(result);
if (result == ERROR_SUCCESS) {
QMessageBox messageBox1;
messageBox1.critical(0,"Error", "Success");
messageBox1.setFixedSize(500,200);
} else {
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.setFixedSize(500,200);
}
我得到的错误:
密钥在我的注册表中的位置:
我认为问题与我将信息放入 path
变量的方式有关,但我不确定。
不要将 Computer\HKEY_LOCAL_MACHINE
传递给字符串。只是 SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001
因为 HKEY_LOCAL_MACHINE 存在于 RegOpenKey 第一个参数中。并且不要尝试打开键的值只是键 RegSetKeyValue() 用于写入键的值
这里是工作代码:
HKEY hKey;
LONG result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001", 0, KEY_ALL_ACCESS, &hKey);
cout << result << "\n";
你的 HwProfileGuid
放错地方了。
HwProfileGuid
是 0001
键内的 值 ,但您正试图将 HwProfileGuid
作为 sub-key of 0001
相反,这就是你得到错误 2 (ERROR_FILE_NOT_FOUND
) 的原因,因为没有 sub-key名为 HwProfileGuid
.
此外,KEY_ALL_ACCESS
的权利太多,无法请求仅从键中读取值。请改用 KEY_QUERY_VALUE
。不要请求比实际需要更多的权利。
试试这个:
const char *path = "SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001";
const char *valueName = "HwProfileGuid";
char guid[40] = {0};
HKEY hKey;
LONG result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_QUERY_VALUE, &hKey);
if (result == ERROR_SUCCESS) {
DWORD size = sizeof(guid);
result = RegQueryValueExA(hKey, valueName, NULL, NULL, reinterpret_cast<LPBYTE>(guid), &size);
RegCloseKey(hKey);
}
QMessageBox messageBox;
if (result == ERROR_SUCCESS) {
messageBox.critical(0, "Success", guid);
} else {
messageBox.critical(0, "Error", QString::number(result));
}
messageBox.setFixedSize(500, 200);
或者,您可以使用 RegGetValueA()
而不是使用
RegOpenKeyExA()
+RegQueryValueExA()
:
const char *path = "SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001";
const char *valueName = "HwProfileGuid";
char guid[40] = {0};
DWORD size = sizeof(guid);
QMessageBox messageBox;
LSTATUS result = RegGetValueA(HKEY_LOCAL_MACHINE, path, valueName, RRF_RT_REG_SZ, NULL, guid, &size);
if (result == ERROR_SUCCESS) {
messageBox.critical(0, "Success", guid);
} else {
messageBox.critical(0, "Error", QString::number(result));
}
messageBox.setFixedSize(500, 200);
我的代码:
HKEY hKey;
char *path = "SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001\HwProfileGuid";
LONG result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS, &hKey);
QString q = QString::number(result);
if (result == ERROR_SUCCESS) {
QMessageBox messageBox1;
messageBox1.critical(0,"Error", "Success");
messageBox1.setFixedSize(500,200);
} else {
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.setFixedSize(500,200);
}
我得到的错误:
密钥在我的注册表中的位置:
我认为问题与我将信息放入 path
变量的方式有关,但我不确定。
不要将 Computer\HKEY_LOCAL_MACHINE
传递给字符串。只是 SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001
因为 HKEY_LOCAL_MACHINE 存在于 RegOpenKey 第一个参数中。并且不要尝试打开键的值只是键 RegSetKeyValue() 用于写入键的值
这里是工作代码:
HKEY hKey;
LONG result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001", 0, KEY_ALL_ACCESS, &hKey);
cout << result << "\n";
你的 HwProfileGuid
放错地方了。
HwProfileGuid
是 0001
键内的 值 ,但您正试图将 HwProfileGuid
作为 sub-key of 0001
相反,这就是你得到错误 2 (ERROR_FILE_NOT_FOUND
) 的原因,因为没有 sub-key名为 HwProfileGuid
.
此外,KEY_ALL_ACCESS
的权利太多,无法请求仅从键中读取值。请改用 KEY_QUERY_VALUE
。不要请求比实际需要更多的权利。
试试这个:
const char *path = "SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001";
const char *valueName = "HwProfileGuid";
char guid[40] = {0};
HKEY hKey;
LONG result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_QUERY_VALUE, &hKey);
if (result == ERROR_SUCCESS) {
DWORD size = sizeof(guid);
result = RegQueryValueExA(hKey, valueName, NULL, NULL, reinterpret_cast<LPBYTE>(guid), &size);
RegCloseKey(hKey);
}
QMessageBox messageBox;
if (result == ERROR_SUCCESS) {
messageBox.critical(0, "Success", guid);
} else {
messageBox.critical(0, "Error", QString::number(result));
}
messageBox.setFixedSize(500, 200);
或者,您可以使用 RegGetValueA()
而不是使用
RegOpenKeyExA()
+RegQueryValueExA()
:
const char *path = "SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0001";
const char *valueName = "HwProfileGuid";
char guid[40] = {0};
DWORD size = sizeof(guid);
QMessageBox messageBox;
LSTATUS result = RegGetValueA(HKEY_LOCAL_MACHINE, path, valueName, RRF_RT_REG_SZ, NULL, guid, &size);
if (result == ERROR_SUCCESS) {
messageBox.critical(0, "Success", guid);
} else {
messageBox.critical(0, "Error", QString::number(result));
}
messageBox.setFixedSize(500, 200);