2009-05-14 4 views
0

Je tente de modifier le registre avec C++ et c'est la première fois que j'essaie de le faire, et j'échoue. Je ne reçois aucun code d'erreur, tout indique qu'il s'est terminé avec succès, mais il ne change pas réellement la clé de registre.Pourquoi ma modification du registre ne persiste-t-elle pas en C++?

Voici le code que je utilise:

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; 
    } 
} 

Qu'est-ce que je fais mal?

+0

Gah. Je me souviens d'avoir eu ce même problème il y a des années, et je me souviens qu'il y avait une solution pour s'assurer que quelque chose était correctement fermé, mais je ne m'en souviens pas assez pour pouvoir mieux vous guider ... –

+0

En fait, le problème était que je n'utilisais pas la bonne variable. Je ferme la clé correctement. – Malfist

Répondre

2

Vous semblez définir la clé de Registre sur la même valeur que vous l'avez lue.

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

Devrait être

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

oh mon Dieu ... Ce n'est pas bon. – Malfist

0

Je pense que ceci:

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

devrait être ceci:

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

(regardez attentivement 2 au dernier param)

0

Essayez de changer ceci:

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

à ceci:

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

Questions connexes