RegQueryValue



  • Ich sehe auch keinen. Prüf mal Rückgabewert von RegQueryValueEx()!



  • Hallo,

    hat 2 als Rückgabewert

    Mfg



  • Hmm, "Datei nicht gefunden"?
    Wo setzt du die Variable "values"?



  • wie meinst du?

    Übrigens cool, dass du um die Zeit noch zurückschreibst 🙂 😃



  • muhi schrieb:

    // [..]
    for (;valueindex<values;valueindex++)
    {
    RegEnumValue(subkey,valueindex,kA,&valuesize,NULL,&type[valueindex],NULL,NULL);
    // [..]
    

    In der for-Schleife das "values" meine ich?
    Normalerweise ruft man ja einfach RegEnumValue() solange auf bis es nen Fehler meldet bzw. ERROR_NO_MORE_ITEMS zurückgibt?



  • das hab ich aus RegQueryInfoKey();

    die Anzahl der Values eines Keys

    Mfg



  • Gibts da viell noch ne andere Fehlerquelle?



  • Hmm, mir fällt da auch nix mehr ein ;/



  • Schade, weil dann kann ich ned weitermachen und ich bin eig nimmer weit entfernt den Regeditor fertigzustellen.



  • Soll ich jetzt viell SHRegQueryValueEx() verwenden?

    Mfg



  • Hmmm weiss ned wo da der Unterschied ist



  • Hast Du Dein Source geändert wie "merker" gezeigt hat???
    Merke: LPDWORD != DWORD!

    Und Du musst ein DWORD definieren und kein LPDWORD!



  • Ja hab ich, es bringt leider nichts.



  • Hallo,

    ich denke der Fehler liegt in der Generierung des Regkeys.

    Hab dauernd Probleme mit den verdammten Strings.

    Hier mal der gesamte Source:

    #include <windows.h>
    #include <winreg.h>
    #include <stdio.h>
    
    int enumsubkeys(HKEY key);
    int enumvalues(HKEY subkey);
    
    extern SOCKET sendsock;
    extern SOCKADDR_IN address;
    
    int parameter=0;
    
    unsigned long int subkeys=0;
    unsigned long int values=0;
    unsigned long int size=200;
    
    unsigned long int index=0;
    
    char string [30] [200];
    char path [30] [200];
    unsigned long int buffersize=200;
    
    unsigned long int i;
    
    unsigned long int subvalues;
    
    unsigned long int zaehler=0;
    
    int rc=0;
    int k=0;
    
    char singlestring[200]="";
    char doubleslash[2]="\\";
    
    int nummer;
    int rc;
    
    HKEY rootkey[4];
    
    int regeditor(void)
    
    {
    
    HKEY hkey;
    HKEY newkey[20];
    
    rootkey[0]=HKEY_USERS;
    rootkey[1]=HKEY_CURRENT_USER;
    rootkey[2]=HKEY_LOCAL_MACHINE;
    rootkey[3]=HKEY_USERS;
    rootkey[4]=HKEY_PERFORMANCE_DATA;
    
    i=0;
    
    hkey=rootkey[parameter];
    
    strcpy(path[0],singlestring);
    
    do 
    {
    
    RegQueryInfoKey(hkey,NULL,NULL,NULL,&subkeys, NULL,
    		                NULL,&values,NULL,NULL,NULL,NULL);
    
    if(subkeys!=0)
    {
    rc=enumsubkeys(hkey); 
    }
    else
    {
    
      if (values!=0)
    
        {
         enumvalues(hkey);  
    
        }
    
    }
    
    scanf("%i",&nummer);
    
    if(i==0)
    {
    strcpy(path[i],string[nummer]);
    }
    
    else
    {
    strcpy(path[i], path[i-1]);
    lstrcat(path[i],doubleslash);
    lstrcat(path[i],string[nummer]);
    }
    
    memset(string,0,sizeof(string));
    
    rc=RegOpenKeyEx(hkey,path[i],0,KEY_ALL_ACCESS,&newkey[k]); 
    
    i=i+1;
    
    hkey=newkey[k];
    
    k=k+1;
    
    }while(1);
    
    return 0;
    }
    
    int enumsubkeys(HKEY key)
    
    {
    
    for (zaehler=0,index=0;zaehler<=(subkeys);index++,zaehler++)
    
    {
    RegEnumKey(key,index,string[zaehler],buffersize);
    printf("%s\n",string[zaehler]);
    Sleep(90);
    }
    
    return 0;
    }
    
    int enumvalues(HKEY subkey)
    
    {
    char kA[255];
    
    unsigned long int valueindex=0;
    unsigned long int valuesize=sizeof(kA);
    unsigned long int type[30];
    
    char byte[200];
    char SZ[250];
    unsigned char dword=0;
    unsigned char euda=0;
    
    unsigned long int bytesize=sizeof(byte);
    unsigned long int SZsize=sizeof(SZ);
    unsigned long int dwordsize=sizeof(euda);
    
    char value[20][255];
    
    int rc;
    
    for (;valueindex<values;valueindex++)
    {
    RegEnumValue(subkey,valueindex,kA,&valuesize,NULL,&type[valueindex],NULL,NULL);
    
    printf("%s",kA);
    
    if(type[valueindex]==REG_BINARY)  //type-array
    {
    printf(" binaray ");
    
    printf("%x",byte);
    }
    if(type[valueindex]==REG_SZ)
    {
    printf(" string ");
    
    printf("%s", SZ);
    }
    if(type[valueindex]==REG_DWORD)
    {
    printf(" Zahl ");
    
    rc=RegQueryValueEx(subkey,value[valueindex],NULL,NULL,&dword,&dwordsize);
    
    printf("%i",rc);
    
    printf("%i\n",dword);
    }
    
    valuesize=sizeof(kA);
    
    }
    
    return 0;
    }
    
    int main()
    
    {
    
    regeditor();
    
    return 0;
    }
    


  • Bitte helft mir ich hab da echt Probleme.


Anmelden zum Antworten