Fehler beim lesen eines Registry-Eintrages mit RegQueryValueEx
-
Hallo,
ich bekomme es einfach nicht hin, einen Registry-Eintrag zu lesen!Ich denke es reicht wenn ich den Quellcode poste...
void _getRegValue(HKEY hkey, const char * path, const char * keyName) { HKEY key; char *buffer = new char[REG_BUFFER_SIZE]; memset(buffer, 0x0, REG_BUFFER_SIZE); DWORD dwBSize = REG_BUFFER_SIZE; LSTATUS lsStatus; RegOpenKeyEx(hkey, path, NULL, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &key); if (key == NULL) _setError("Key doesn't exist!"); lsStatus = RegQueryValueEx(key, keyName, NULL, NULL, (LPBYTE)buffer, &dwBSize); if (lsStatus == ERROR_SUCCESS) _setError("Cannot open value!"); cout << "result: "; cout << buffer; RegCloseKey(key); }PS: Ich habe vista 64, und habe Multibyte-Zeichensatz gewählt!
-
AeroX schrieb:
Ich denke es reicht wenn ich den Quellcode poste...
Ich denke, das reicht nicht. Sag doch, was genau nicht klappt. Das Open, das Query, ...
P.S. Warum checkst du die Rückgabe von RegOpenKeyEx nicht?
-
Man bekommt es auch selbst heraus wenn man mal kontrolliert was GetLastError sagt!
-
So, ich habs jetzt selber herausgefunden.
hier nochmal für alle, die wie ich, kein gutes Beispiel gefunden haben:
// _getRegValue // hkey = HKEY_CLASSES_ROOT | HKEY_CURRENT_USER | HKEY_LOCAL_MACHINE | HKEY_USERS // path = z.B. "Software\\Microsoft\\FTP" // keyName = Z.B. "Use PASV" // buffer = (char*), (void*), ... // bytesRead = pointer to variable which should contain the size of the value private: void _getRegValue(HKEY hkey, TCHAR * path, TCHAR * keyName, TCHAR * buffer, DWORD * bytesRead) { HKEY key; LSTATUS lsStatus; RegOpenKeyEx(hkey, path, NULL, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &key); if (!hkey) _setError("Cannot open key!"); lsStatus = RegQueryValueEx(key, keyName, NULL, NULL, (LPBYTE)buffer, bytesRead); if (lsStatus != ERROR_SUCCESS) _setError("Cannot open value!"); RegCloseKey(key); }
-
Entschuldigung, war doch noch nicht ganz fertig

hier nochmal der fertige code
DWORD _getRegValue(HKEY hkey, TCHAR * path, TCHAR * keyName, TCHAR * buffer) { HKEY key; LSTATUS lsStatus; DWORD dwBytesRead; RegOpenKeyEx(hkey, path, NULL, KEY_QUERY_VALUE, &key); if (!hkey) _setError("Cannot open key!"); lsStatus = RegQueryValueEx(key, keyName, NULL, NULL, (LPBYTE)buffer, &dwBytesRead); if (lsStatus != ERROR_SUCCESS) _setError("Cannot open value!"); RegCloseKey(key); return dwBytesRead; }
-
Was hällst Du von ein wenig Doku lesen?
http://msdn.microsoft.com/en-us/library/ms724911(VS.85).aspxdwBytesRead ist in/out. Das heiüt Du musst hier angeben, wie groß Dein Puffer ist, in dem die daten gespeichert werden können.