Zugriff auf Registry prüfen?
-
Hallo, ich habe folgenden Code welcher ein Eintrag in die Registry reinschreibt, jetzt möchte ich noch paar Überprüfungen einbauen wie Schreib- & Leserechte, also nix besonderes nur zum testen ob Keys gelesen oder gespeichert werden können:
void AddValue(HKEY KEY, string path, string name, string inhalt) { HKEY key; DWORD dwType; DWORD dwSize=300; char szString[300]; RegOpenKeyEx(KEY, path.c_str(),0, KEY_ALL_ACCESS, &key); RegQueryValueEx(key, name.c_str(), NULL, &dwType, (BYTE *)szString, &dwSize); //Inhalt wird zwischengespeichert string TMP = szString; TMP += inhalt; //Neuer Wert wird gespeichert RegSetValueEx(key, name.c_str(), 0, REG_SZ, (unsigned char *)TMP.c_str(), TMP.length()); RegCloseKey(key); }Also könnt ihr mir bitte nur die Zeilen verändern...THX
-
Das bekommst Du doch als Ergebnis gesagt, wenn Du zu schreiben versucht und keine Rechte hast.
Dein Code berücksichtigt nicht einen Fehlerfall!
-
kernel64 schrieb:
Hallo, ich habe folgenden Code welcher ein Eintrag in die Registry reinschreibt, jetzt möchte ich noch paar Überprüfungen einbauen wie Schreib- & Leserechte, also nix besonderes nur zum testen ob Keys gelesen oder gespeichert werden können:
void AddValue(HKEY KEY, string path, string name, string inhalt) { HKEY key; DWORD dwType; DWORD dwSize=300; char szString[300]; RegOpenKeyEx(KEY, path.c_str(),0, KEY_ALL_ACCESS, &key); RegQueryValueEx(key, name.c_str(), NULL, &dwType, (BYTE *)szString, &dwSize); //Inhalt wird zwischengespeichert string TMP = szString; TMP += inhalt; //Neuer Wert wird gespeichert RegSetValueEx(key, name.c_str(), 0, REG_SZ, (unsigned char *)TMP.c_str(), TMP.length()); RegCloseKey(key); }Also könnt ihr mir bitte nur die Zeilen verändern...THX
Nö, keinen Bock

Benenn bitte die Variablen konsistent - entweder Ungarische Notation oder nicht, vermeide solche Namen wie "TMP" und "KEY" statt z.B. "strBuf" und "hKey" und rücke bitte gemäß Konvention ein ( 4 statt 8 ).
Und welch ein String das ist wüsste ich auch gerne - std::string?
Wenn Du das alles verbessert poste ich auch den kompletten Block.
Versprochen!
So in etwa geht's :
//Forward Deklarations HRESULT AllocSomething1(void*); HRESULT AllocSomething2(void*); HRESULT FreeSomething1(void*); HRESULT FreeSomething2(void*); /* * [...] */ HRESULT MyFunction3() { HRESULT hr = ERROR_SUCCESS; void* lpvOne; void* lpvTwo; if(SUCCEDED(hr = AllocSomething1(lpvOne))) { if(SUCCEDED(hr = AllocSomething2(lpvTwo))) { // [...] hr = FreeSomething2(lpvTwo); } hr = FreeSomething1(lpvOne); } if(!SUCCEEDED(hr)) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr,//GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); // Display the string. // MessageBox( NULL, lpMsgBuf, "GetLastError", // MB_OK|MB_ICONINFORMATION ); std::cerr << (TCHAR*)lpMsgBuf << std::endl; // Free the buffer. LocalFree( lpMsgBuf ); } return hr; }Grüsse
Gast
P.S.: Warum nicht UNICODE auf einem UNICODE-System?
Auch eine Fall von Barrierefreiheit und einfach mittels TCHAR zu implementieren - dann wärs std::wstring oder ein eigener typedef, der hier aber offenbar nicht vorliegt da Du hart auf unsigned char* "castest".