RegOpenKeyEx和RegSetValueEx失败了,但我不知道为什么

RegOpenKeyEx and RegSetValueEx fail, but I dont know why

本文关键字:我不知道 为什么 RegSetValueEx 失败 RegOpenKeyEx      更新时间:2023-10-16

作为一名刚开始的C++程序员,我想在windows注册表中设置一个值。我创建了这个教科书实现来实现这一点,但我总是返回错误998。我想我错过了一些非常简单明了的东西,但我不知道它是什么。

以普通用户或管理员身份运行此代码没有任何区别。

#define LEDPORT 3
#define SUBKEY "SOFTWARE\PATH\OTHERPATH\"
    HKEY key;
    if(RegCreateKey(HKEY_LOCAL_MACHINE,  TEXT(SUBKEY), &key) == ERROR_SUCCESS)
    {
        HKEY createKey;
        DWORD value = LEDPORT;
        if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT(SUBKEY), NULL, KEY_ALL_ACCESS, &createKey) == ERROR_SUCCESS){
            // retVal returns error 998 and the value isn't set
            int retVal = RegSetValueEx(createKey, TEXT("PortNumber"), NULL, REG_DWORD, (BYTE *)value, sizeof(value));

            RegCloseKey(createKey);
        }
    }

实际上,这会在LocalMachine\Software\Path\OtherPath中创建上述密钥,但DWORD值"PortNumber"不是。

同样,我认为这是一件很简单的事情,但我花了几个小时思考它可能是什么,但我无法弄清楚。

转换为人类可读的错误代码998是对内存位置的无效访问原因是您的强制转换(BYTE*)value,将值3(LEDPORT)重新解释为地址。(BYTE*)&value解决了您眼前的问题。