我正在尝试用 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);
我做了一些基本的调试,发现调用RegSetValueEx
后iResult
的值为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/