Почему мои изменения в реестре не сохраняются в C ++? - PullRequest
0 голосов
/ 14 мая 2009

Я пытаюсь отредактировать реестр с помощью C ++, и я впервые пытаюсь это сделать, но у меня ничего не получается. Я не получаю никакого кода ошибки, все говорят, что он успешно завершен, но он фактически не меняет раздел реестра.

Вот код, который я использую:

HKEY hkey;
DWORD dwDisposition, dwType, dwSize;
int autorun = 0x00;
int CD_AUTORUN_DISABLED = 0x20;
long errorCode;
errorCode = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"), 0, KEY_ALL_ACCESS, &hkey);

if(errorCode == ERROR_SUCCESS) {
        dwType = REG_DWORD;
        dwSize = sizeof(dwType);
        errorCode = RegQueryValueEx(hkey, TEXT("NoDriveTypeAutoRun"), NULL, &dwType, 
(PBYTE)&autorun, &dwSize);

cout << "Autorun value: " << autorun << endl;
if((autorun & CD_AUTORUN_DISABLED) == 0x20){
        int newAutorun = (autorun - CD_AUTORUN_DISABLED);
        cout << "New value: " << newAutorun  << endl;
        errorCode = RegSetValueEx(hkey, TEXT("NoDriveTypeAutoRun"), 0, dwType, (PBYTE) &autorun, dwSize);
        if(errorCode == ERROR_SUCCESS){
            errorCode = RegCloseKey(hkey);              
            if(errorCode == ERROR_SUCCESS){
                cout << "Value changed." << endl;
            }
        }else{
            cout << "Value change failed, error code: " << errorCode << endl;
        }
    }else{
        cout << "Keep current value." << endl;
    }

}else{
    if(errorCode == ERROR_ACCESS_DENIED){
        cout << "Access denied." << endl;
    }else{
        cout << "Error! " << errorCode << " : " << ERROR_SUCCESS << endl;
    }
}

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 14 мая 2009

Похоже, вы устанавливаете для раздела реестра то же значение, что и для его чтения.

int newAutorun = (autorun - CD_AUTORUN_DISABLED);
                cout << "New value: " << newAutorun  << endl;
                errorCode = RegSetValueEx(hkey, TEXT("NoDriveTypeAutoRun"), 0, dwType, (PBYTE) **&autorun**, dwSize);

Должно быть

int newAutorun = (autorun - CD_AUTORUN_DISABLED);
                cout << "New value: " << newAutorun  << endl;
                errorCode = RegSetValueEx(hkey, TEXT("NoDriveTypeAutoRun"), 0, dwType, (PBYTE) &newAutorun, dwSize);
0 голосов
/ 14 мая 2009

Попробуйте изменить это:

errorCode = RegSetValueEx (hkey, TEXT ("NoDriveTypeAutoRun"), 0, dwType, (PBYTE) & автозапуск, dwSize);

к этому:

errorCode = RegSetValueEx (hkey, TEXT ("NoDriveTypeAutoRun"), 0, dwType, (PBYTE) & newAutorun, dwSize);

0 голосов
/ 14 мая 2009

Я думаю, что это:

errorCode = RegSetValueEx(hkey, TEXT("NoDriveTypeAutoRun"), 0, dwType, (PBYTE) &autorun, dwSize);

должно быть так:

errorCode = RegSetValueEx(hkey, TEXT("NoDriveTypeAutoRun"), 0, dwType, (PBYTE) &newAutorun, dwSize);

(внимательно посмотрите на 2-й до последнего параметра)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...