windows — Запись значения DWORD в реестр в переполнении стека

Я пытаюсь записать значение 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, у которого были некоторые странные проблемы с безопасностью раньше.

2

Решение

Вам нужно пройти адрес из value:

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

Код ошибки 998 средства:

Неверный доступ к ячейке памяти.

Когда адрес value не передается его фактическое значение (3) используется в качестве адреса памяти, вызывая сбой.

11

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]