首页 > 解决方案 > 我的 RegSetValueA 函数返回 ERROR_SUCCESS 但不起作用

问题描述

我的代码:

    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);
    }

我的操作系统是 Windows 64 位,编译器没有显示任何错误,并且由于某种原因,该函数可以创建一个新值,但不能更改现有值的数据。

我已经编辑并添加了完整的代码,因此您可以看到我正在处理的数据类型。

标签: c++windowswinapiregistry

解决方案


您需要使用RegSetValueExA并调用:

BYTE* p = (BYTE*)l.c_str();
result13 = RegSetValueExA(hKey, "HwProfileGuid",0, REG_SZ, p, l.size() + 1);.

它对我有用。


推荐阅读