Registry auslesen
-
Hallo,
ich probiere nun schon seit 2-3 Stunden einen Wert aus einer Registry zu lesen.
Dabei geht es mir um:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography
Mit dem Wert von:
MachineGuidIch habe bei Stackoverflow und anderen Seiten durch Google oft nur Code gefunden der ebenfalls nicht geht.
Egal ob mit RegOpenKeyEx und RegQueryValueEx bzw. RegGetValue.Kann mir bitte jemand einen korrekten Code zeigen der funktioniert? Wäre sehr nett, danke.
-
Gerne auch noch mit Beispielcode:
HKEY hKey = 0; wchar_t buf[255]; DWORD dwBufSize = sizeof(buf); const wchar_t* subkey = L"Software\\Microsoft\\Cryptography"; if( RegOpenKeyExW(HKEY_LOCAL_MACHINE,subkey,0,KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS) { if(RegQueryValueExW(hKey,L"MachineGuid",0, 0, (BYTE*)buf, &dwBufSize) == ERROR_SUCCESS) { wcout << L"Registry GUID value: " << buf << endl; } else { cout << "Can not query for key value!\n"; } //No need for RegCloseKey, since we used a predefined key value } else { cout << "Can not open key!\n"; }
Wobei ich hier bei dem else von RegQueryValueExW lande. Can not query for key value
-
http://www.codeproject.com/Articles/3495/Registry-List-Control
http://www.codeproject.com/Articles/14200/Registry-Redirector-in-x-IA
-
Und was gibt die Funktion zurück.
Das ist doch der Fehler Code, der sagt was schief gegangen ist.Verwende mal KEY_READ. Obwohl eigentlich KEY_QUERY_VALUE langen sollte.
-
Änderung auf KEY_READ hat keine Änderung gebracht.
Der Returnwert von RegQueryValueExW ist 2, entspricht also ERROR_FILE_NOT_FOUND.Hier auch ein Bild, dass die Datei in der Registry vorhanden ist.
http://abload.de/img/1h8ux6.png
-
Ist das case-insensitive?
Software <> SOFTWARE
-
Nö, der OpenKey hat ja geklappt ...
-
Logisch. Du hast ein 32bit Programm und willst eine 64bit Schlüssel auslesen.
Unter
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography
gibt es diesen Schlüssel nicht. Nur unter
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CryptographyDie ist klar, das bestimmte Schlüssel virtualisiert werden?
-
Das war mir ehrlich gesagt nicht klar.
Als 64bit Build funktioniert es nun aber. Dann müsste ich allerdings doch noch Fragen, wie ich mit einer 32bit Anwendung auf diesen Wert zugriff erhalte?
-
Ok dafür gibt es ja die Flags.
Einfach folgendes verwenden:KEY_WOW64_64KEY
Sprich:
RegOpenKeyExW(HKEY_LOCAL_MACHINE,subkey, 0, KEY_QUERY_VALUE | KEY_WOW64_64KEY,&hKey) == ERROR_SUCCESS
Ich danke für die Hilfe