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

标签 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);

我做了一些基本的调试,发现调用RegSetValueExiResult的值为998。我确定此 key 存在于 Windows 注册表中,因为我出于测试目的使用 regedit.exe 手动创建了它。 DWORD“Test”的值最初是 0x00000009,在我运行我的程序后没有改变。

我不确定我哪里错了。

如有任何帮助,我们将不胜感激。

附言我未能在网上找到任何有关错误 998 的有用站点。我找到的唯一引用提到这是处理注册表时可能遇到的最严重错误。

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

最佳答案

您需要传递地址:

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

错误代码998表示:

Invalid access to memory location.

value 的地址未被传递时,它的实际值 (3) 被用作内存地址,导致失败。

关于c++ - 在 C++ 中将 DWORD 值写入注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13247811/

相关文章:

c++ - 在 C++ (Portaudio) 中捕获全局音频输出

php - 无法在 Windows xampp 上正确使用 ImageMagick

c++ - 链接某些 Windows API 时出现链接器错误

Java 注册表类?

函数指针的 C++ 无效初始化错误

c++ - 如何拥有一个 unordered_map,其中值类型是它所在的类?

c++ - 继承和方法重载

c++ - 分解/分解函数的函数

c - 使用哪个 IP Helper API 接口(interface)?

c++ - 如何将 REG_SZ 类型的注册表值解析为变量?