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

Erw*_*win 1 c++ windows registry winapi 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

实际上,这会在LocalMachine\Software\Path\OtherPath创建提到的键,但DWORD值"PortNumber"不是.

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

IIn*_*ble 6

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