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

时间:2014-04-11 08:24:59

标签: c++ windows winapi registry rights

作为一名初学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”不是。

同样,我认为这是直截了当的,但我花了几个小时思考它可能是什么,我无法弄明白。

1 个答案:

答案 0 :(得分:5)

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