Я пытаюсь записать значение DWORD в реестр программно на C ++.
Я провел небольшой поиск и обнаружил, что этот вопрос уже задавался. Я пытался следовать их решению, но столкнулся с действительно неприятной проблемой, которая, насколько я знаю, не была решена их решением.
Это мой код:
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
998 после того, как я позвоню RegSetValueEx
, Я уверен, что этот ключ присутствует в реестре Windows, потому что я создал его вручную с regedit.exe для тестирования. Значение DWORD «Test» изначально равно 0x00000009 и не изменяется после запуска моей программы.
Я не уверен, где я не прав.
Любая помощь будет оценена.
Постскриптум Мне не удалось найти какой-либо полезный сайт в сети для ошибки 998. Единственная найденная ссылка упоминает, что это худшая ошибка, которую вы можете получить при обработке реестра.
P.P.S. Кстати, я запускаю эту программу на Windows 8. Я не думаю, что это что-то меняет, но у меня был опыт с Windows 8, у которого были некоторые странные проблемы с безопасностью раньше.
Вам нужно пройти адрес из value
:
iResult = RegSetValueEx(hKey,
L"Test",
NULL,
REG_DWORD,
(const BYTE*)&value, // Change made here.
sizeof(value));
Код ошибки 998
средства:
Неверный доступ к ячейке памяти.
Когда адрес value
не передается его фактическое значение (3
) используется в качестве адреса памяти, вызывая сбой.
Других решений пока нет …