我的 RegSetValueA 函数返回 ERROR_SUCCESS 但不工作
My RegSetValueA function is returning ERROR_SUCCESS but not working
我的代码:
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) {
char buffer[39];
DWORD b = sizeof(buffer);
LONG result12 = RegGetValueA(hKey, NULL, "HwProfileGuid", RRF_RT_REG_SZ, NULL, buffer, &b);
if (result12 == ERROR_SUCCESS) {
std::string j;
LONG result13;
const std::vector<int> serial1{8, 4, 4, 4, 12};
std::string l = "{" + gen_random(serial1, "-") + "}";
const char *p = l.c_str();
if (p == buffer) {
j = "{" + gen_random(serial1, "-") + "}";
const char *i = j.c_str();
result13 = RegSetValueA(hKey, "HwProfileGuid", REG_SZ, i, sizeof(i));
} else {
result13 = RegSetValueA(hKey, "HwProfileGuid", REG_SZ, p, sizeof(p));
}
if (result13 == ERROR_SUCCESS) {
QMessageBox messageBox2;
messageBox2.critical(0,"Error", "Success");
messageBox2.setFixedSize(500,200);
} else {
QString q = QString::number(result13);
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.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);
}
我的 OS 是 windows 64 位,编译器没有显示任何错误,并且由于某种原因,该函数可以创建一个新值,但不能更改一个数据现有一个。
我已经编辑并添加了完整的代码,因此您可以看到我正在处理的数据类型。
您需要使用 RegSetValueExA
并调用:
BYTE* p = (BYTE*)l.c_str();
result13 = RegSetValueExA(hKey, "HwProfileGuid",0, REG_SZ, p, l.size() + 1);.
它对我有用。
我的代码:
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) {
char buffer[39];
DWORD b = sizeof(buffer);
LONG result12 = RegGetValueA(hKey, NULL, "HwProfileGuid", RRF_RT_REG_SZ, NULL, buffer, &b);
if (result12 == ERROR_SUCCESS) {
std::string j;
LONG result13;
const std::vector<int> serial1{8, 4, 4, 4, 12};
std::string l = "{" + gen_random(serial1, "-") + "}";
const char *p = l.c_str();
if (p == buffer) {
j = "{" + gen_random(serial1, "-") + "}";
const char *i = j.c_str();
result13 = RegSetValueA(hKey, "HwProfileGuid", REG_SZ, i, sizeof(i));
} else {
result13 = RegSetValueA(hKey, "HwProfileGuid", REG_SZ, p, sizeof(p));
}
if (result13 == ERROR_SUCCESS) {
QMessageBox messageBox2;
messageBox2.critical(0,"Error", "Success");
messageBox2.setFixedSize(500,200);
} else {
QString q = QString::number(result13);
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.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);
}
我的 OS 是 windows 64 位,编译器没有显示任何错误,并且由于某种原因,该函数可以创建一个新值,但不能更改一个数据现有一个。
我已经编辑并添加了完整的代码,因此您可以看到我正在处理的数据类型。
您需要使用 RegSetValueExA
并调用:
BYTE* p = (BYTE*)l.c_str();
result13 = RegSetValueExA(hKey, "HwProfileGuid",0, REG_SZ, p, l.size() + 1);.
它对我有用。