在C ++中将DWORD值写入注册表

时间:2012-11-06 09:13:12

标签: c++ windows registry registrykey dword

我正在尝试以编程方式在C ++中将DWORD值写入注册表。

我已经做了一些搜索,我发现之前已经问过这个问题了。我试图按照他们的解决方案,但提出了一个非常令人沮丧的问题,据我所知,他们的解决方案没有解决这个问题。

这是我的代码:

HKEY hKey;
LPCWSTR sKeyPath;
int iResult;

sKeyPath = L"Software\\ABI\\";
iResult = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyPath, NULL, KEY_ALL_ACCESS, &hKey);
DWORD value = 0x00000003;
iResult = RegSetValueEx(hKey, L"Test", NULL, REG_DWORD, (const BYTE*)value, sizeof(value));
RegCloseKey(hKey);

我已完成一些基本的调试,发现iResult的值在我调用RegSetValueEx后为998。我确信这个密钥存在于Windows注册表中,因为我使用regedit.exe手动创建它以进行测试。 DWORD“Test”的值最初是0x00000009,在我运行程序后没有变化。

我不确定我错在哪里。

任何帮助都将不胜感激。

P.S。我没有设法在网上找到任何有用的网站,错误998.我发现的唯一参考提到这是处理注册表时可能遇到的最严重的错误。

P.P.S。顺便说一下,我在Windows 8上运行这个程序。我不认为这会改变任何东西,但我之前遇到过一些奇怪的安全问题。

1 个答案:

答案 0 :(得分:11)

您需要传递value地址

iResult = RegSetValueEx(hKey,
                        L"Test",
                        NULL,
                        REG_DWORD,
                        (const BYTE*)&value, // Change made here.
                        sizeof(value));

错误代码998表示:

  

对内存位置的无效访问。

如果未传递value的地址,则其实际值(3)将被用作内存地址,从而导致失败。

相关问题