Самая большая ошибка в (const BYTE*)0x00
: вы приводите 0x00 к BYTE *
, что означает, что в основном вы передаете указатель NULL
.Вместо этого вы должны создать переменную DWORD
, поместить в нее значение, которое вы хотите сохранить в реестре, и передать вместо него указатель 0x00
.
Кроме того, вы должны изменить REG_SZ
в REG_DWORD
, если вы хотите сохранить значение DWORD
, в противном случае DWORD
будет интерпретироваться как (несколько странная) строка.
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\pager", 0, KEY_ALL_ACCESS, &hKey);
DWORD value=0;
RegSetValueEx(hKey, TEXT("Save"), 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
RegCloseKey(hKey);
Но, самое главное, вы должны действительно проверитьвозвращайте значения этих функций: теперь вы просто «надеетесь», что они работают, игнорируя любой сбой и продолжая выполнение инструкций, что может привести к неожиданным ситуациям.
Если вы проверили коды ошибок, вы бы заметилисразу же, что это функция RegSetValueEx
, которая выходит из строя, и код ошибки мог быть чем-то вроде «неверного параметра», который указывал бы вам в правильном направлении.