registry auslesen



  • ok vielen dank an euch, dann werde ich den oben geposteten link weiter verfolgen.... hab mit winapi noch nie gearbeitet....



  • Hi!

    TactX schrieb:

    toxi schrieb:

    suchte etwas wie man halt nen key ausliest und der in der console angezeigt wird also ohne winapi....

    Geht praktisch nur mit WinAPI.

    Geht praktisch auch ohne WinAPI. Die Daten liegen in zwei Dateien vor, das einzigste was man tuen muss ist das Dateiformat rauszubekommen.

    grüße



  • David_pb schrieb:

    Hi!

    TactX schrieb:

    toxi schrieb:

    suchte etwas wie man halt nen key ausliest und der in der console angezeigt wird also ohne winapi....

    Geht praktisch nur mit WinAPI.

    Geht praktisch auch ohne WinAPI. Die Daten liegen in zwei Dateien vor, das einzigste was man tuen muss ist das Dateiformat rauszubekommen.

    grüße

    Deswegen auch das "praktisch" 🙄



  • Hi!

    Das ist auch nich unpraktisch!

    Siehe folgendes für Infos über das Format:
    http://www.wotsit.org/download.asp?f=winreg

    grüße



  • um was mit der winapi anfangen zu koennen, welche programmiersprache muss man da beherschen ode ris das total eigenständig....?

    zu deinem link: File Access Blocked



  • Hi!

    C++, Delphi, ... was auch immer. Alles was dll's einbinden kann. Zu meinem Link, such unter Binary Files.

    grüße



  • ah vielen dank ^^ wer dich mal suchen gehen...

    super muss ich c++ mal ansehen ^^ kann leider nur c so geht scho ^^



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hab letztens selbst etwas derartiges geschrieben ( bzw den hauptteil von der msdn seite abgeschaut 😉 )

    void listKey(HKEY hKey){
    
    	TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
        DWORD    cbName;                   // size of name string 
        TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
        DWORD    cchClassName = MAX_PATH;  // size of class string 
        DWORD    cSubKeys=0;               // number of subkeys 
        DWORD    cbMaxSubKey;              // longest subkey size 
        DWORD    cchMaxClass;              // longest class string 
        DWORD    cValues;              // number of values for key 
        DWORD    cchMaxValue;          // longest value name 
        DWORD    cbMaxValueData;       // longest value data 
        DWORD    cbSecurityDescriptor; // size of security descriptor 
        FILETIME ftLastWriteTime;      // last write time 
        DWORD i, retCode; 
        TCHAR  achValue[MAX_VALUE_NAME]; 
        DWORD cchValue = MAX_VALUE_NAME; 
    	CHAR *szProductDir;
    	DWORD dwBufLen = sizeof(szProductDir);
    	DWORD BufferSize = TOTALBYTES;
    
    	szProductDir = (char *)calloc(255, sizeof(char));
    
    	retCode = RegQueryInfoKey(
    			hKey,                    // key handle 
    			achClass,                // buffer for class name 
    			&cchClassName,           // size of class string 
    			NULL,                    // reserved 
    			&cSubKeys,               // number of subkeys 
    			&cbMaxSubKey,            // longest subkey size 
    			&cchMaxClass,            // longest class string 
    			&cValues,                // number of values for this key 
    			&cchMaxValue,            // longest value name 
    			&cbMaxValueData,         // longest value data 
    			&cbSecurityDescriptor,   // security descriptor 
    			&ftLastWriteTime);       // last write time 
    
    	// Enumerate the subkeys, until RegEnumKeyEx fails.
    
    	if (cSubKeys){
    
    		printf( "\tSubkeys Gesamt: %d\n", cSubKeys);
    
    		for (i=0; i<cSubKeys; i++) { 
    				cbName = MAX_KEY_LENGTH;
    				retCode = RegEnumKeyEx(hKey, i,
    					     achKey, 
    						 &cbName, 
    						NULL, 
    						NULL, 
    						NULL, 
    						&ftLastWriteTime); 
    				if (retCode == ERROR_SUCCESS) {
    					_tprintf(TEXT("%s  "), achKey);
    					int te=RegQueryValueEx(hKey, achValue, NULL, NULL,(LPBYTE)szProductDir, &BufferSize );
    					printf("%s\n",szProductDir);
    				}
    		}
    	} 
    
    	// Enumerate the key values. 
    
    	if (cValues) {
    		printf( "\tKeys Gesamt: %d\n", cValues);
    
    		for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) { 
    
    				cchValue = MAX_VALUE_NAME; 
    				achValue[0] = '\0'; 
    				retCode = RegEnumValue(hKey, i, 
    					achValue, 
    					&cchValue, 
    					NULL, 
    					NULL,
    					NULL,
    					NULL);
    
    				if (retCode == ERROR_SUCCESS ) { 
    					_tprintf(TEXT("%s  "), achValue);
    					int te=RegQueryValueEx(hKey, achValue, NULL, NULL,(LPBYTE)szProductDir, &BufferSize );
    					if( te == 0){
    						printf("%s\n",szProductDir);
    					}
    					else printf("\n");
    
    				} 
    		}
    	}
    	return;
    }
    

    der Prozedur wird ein Schlüssel übergeben diesen erzeugst du zB so :

    HKEY hKey;
    
        if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0,KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS ){ // KEY_READ | KEY_QUERY_VALUE , &hKey) == ERROR_SUCCESS ){ 
    		printf("\n\tHKEY_LOCAL_MACHINE\n");
    		listKey(hKey);
    		RegCloseKey(hKey);
    	}
    

    mfg ch



  • Hab allerdings noch eine Frage dazu:

    Kann es sein das &cbMaxValueData ( longest value data ) zu klein gewählt ist ?
    den ich bekomme nicht alle Werte angezeigt.

    Hier meine Ausgabe:

    HKEY_LOCAL_MACHINE
    Subkeys Gesamt: 1
    OptionalComponents
    Keys Gesamt: 6
    NvCplDaemon RUNDLL32.EXE C:\WINDOWS\System32\NvCpl.dll,NvStartup
    nwiz nwiz.exe /install
    SiSUSBRG
    KernelFaultCheck
    AVGCtrl
    NvMediaCenter

    es muss an folgendem Codeabschnitt liegen :

    int te=RegQueryValueEx(hKey, achValue, NULL, NULL,(LPBYTE)szProductDir, &BufferSize );
                        if( te == 0){
                            printf("%s\n",szProductDir);
                        }
    

    te ist also nicht immer gleich 0 ... Wieso ?

    tia mfg ch


Anmelden zum Antworten