013
01.06.2006, 23:05 Uhr
Spacelord
Hoffnungsloser Fall
|
Also,auf die Schnelle dahingeklatscht. Die Rueckgabewerte könnten besser überprüft werden und anstatt mit Binärdaten hab ich hier jetzt mit DWORD´s getestet um das Ganze nicht zu überfrachten. Wenn du später mal mit Binärdaten arbeitest solltest du immer den Size Wert überprüfen in den EnumValue schreibt und überprüfen ob die Anzahl der geschriebenen Bytes genauso groß ist wie die Grösse des Puffers. Sollte das so sein war dein Puffer warscheinlich zu klein und du solltest RegEnumValue/QueryValue dann nochmal mit nem grösseren Puffer aufrufen.
C++: |
#include <windows.h> #include <iostream>
using namespace std;
int main() { LONG lResult; HKEY hKey; TCHAR lpSubKey[]= "MainKey";// ohne \\ ! TCHAR ValueNameBuffer[512]; DWORD lpcSubKeys=0; //richtige DWORDS !! DWORD lpcValues=0; //nicht nur Zeiger auf DWORDS die auf kein DWORD zeigen!!
//ÖFFNEN lResult = RegOpenKeyEx(HKEY_CURRENT_USER,lpSubKey,0,KEY_READ,&hKey);//KEY_READ benoetigt! impliziert KEY_QUERY_VALUE if(lResult == ERROR_SUCCESS) {
//SubKey Anzahl holen... lResult = RegQueryInfoKey( hKey,//dein HKEY das du gerade geöffnet hast benutzen! NULL, NULL, 0, &lpcSubKeys, NULL, NULL, &lpcValues, NULL, NULL, NULL, NULL); if(lResult ==ERROR_SUCCESS) { cout<<"Subkeys: "<<lpcSubKeys<<endl; cout<<"Values: " <<lpcValues<<endl;
size_t idx = 0; while(idx < lpcValues) { //Der Einfachheit halber habe ich mit DWORD´s getestet DWORD Type; DWORD NameBufferSize = 512; DWORD PufferSize = sizeof(DWORD); DWORD Data;//fuer binaere Daten nen geeigneten BYTE Puffer anlegen DWORD DataSize=sizeof(DWORD);
RegEnumValue( hKey,// HKEY benutzen! idx, // Index des Schlüssels,dafür hast du RegQueryInfoKey benutzt.Um zu wissen wieviele Werte es sind ValueNameBuffer, &NameBufferSize, 0, &Type, (LPBYTE)&Data, &DataSize ); ++idx; cout<<"Name des Wertes :"<<ValueNameBuffer<<endl; switch(Type) { case REG_BINARY: { //den potentiellen BYTE Puffer geeignet anzeigen //würde hier jetzt den Rahmen sprengen cout<<"Es ist ein Binaerwert...\tder Wert ist:...."<<endl; break; } case REG_DWORD: { cout<<"Es ist ein DWORD...\tder Wert ist:"<<Data<<endl; break; } //usw.....
}
} } else cout<<"Konnte keine Informationen auslesen."<<endl;
//Schluessel schliessen RegCloseKey(hKey); } else cout<<"Konnte Schluessel nicht oeffnen"<<endl;
return 0; }
|
Gruss Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes. |