Frage bezüglich Regenumvalue()



  • Bitte helft mir gg,

    mfg



  • Muhi89 schrieb:

    er findet alle Values nur kann der Inhalt nicht korrekt gespeichert werden...

    Eventuell so ?

    // LPBYTE data;
    BYTE data [500];
    
    // RegEnumValue(subkey,valueindex,kA,&valuesize,NULL,&type[valueindex],data,&datasize);
    RegEnumValue(subkey,valueindex,kA,&valuesize,NULL,&type[valueindex],&data,&datasize);
    
    // datasize=sizeof(LPBYTE);
    datasize=sizeof(data);
    


  • Hallo,

    danke!

    inzwischen klappt das Auslesen/Anzeigen von Strings, Probleme gibts aber noch bei Zahlen und Bytes muss ich noch testen.

    Bei den Zahlen kommt immer die selbe Zahl, obwohls in Wirlichkeit verschiedene sind.

    mfg



  • Ok, bei bytes das Selbe, sie werden gespeichert und ausgegeben, aber immer nur ein Wert obwohls verschiedene Variablen gibt.

    Mfg



  • Die Ausgabe ist ein Problem für sich, weil REG_BINARY, REG_SZ und REG_DWORD unterschschiedliche "Datentypen" sind. Deren kleinster gemeinsamer Nenner ist ein BYTE.

    Deshalb sollten bei der Ausgabe die BYTE's entsprechend zusammengefasst werden.

    REG_SZ dürfte kein Problem sein.

    REG_DWORD entspricht vier BYTE's :

    if(type[valueindex]==REG_DWORD) 
    { 
     DWORD val;
     memmove (&val,&data,sizeof(DWORD)); // vier bytes "zusammengefasst"
    
     printf("Zahl "); 
    // printf("%i",data);
     printf("%i",val);
    }
    

    REG_BINARY kann so ausgeben werden :

    if(type[valueindex]==REG_BINARY)   
    { 
     printf("binaray "); 
    // printf("%x",data); 
     printf("%x %x %x %x",data[0],data[1],data[2],data[3]); // vier sollten reichen
    }
    


  • Leider funzt es noch immer nicht....



  • Bischen genauer 🙂



  • Hmmm?? Versteh nicht 😃



  • Was "funzt" nicht ? Die Ausgabe von REG_DWORD ?



  • Hallo,

    zB: die erste Value wird richtig ausgegeben (Name, Typ und Inhalt)

    dann wird nur noch der Name der ersten Value angezeigt und der Inhalt der anderen gar nicht mehr.

    Damit keine Verwirrung herrscht hier mal der Code:

    int enumvalues(HKEY subkey)
    
    {
    
    char kA[255];
    
    unsigned long int valueindex=0;
    unsigned long int valuesize=sizeof(kA);
    unsigned long int type[30];
    
    unsigned char byte[200];
    unsigned char SZ[250];
    unsigned long int dword;
    
    unsigned long int bytesize=sizeof(byte);
    unsigned long int SZsize=sizeof(SZ);
    unsigned long int dwordsize=sizeof(dword);
    
    BYTE data[500];
    
    memset(data,0,sizeof(BYTE));
    
    unsigned long int datasize=sizeof(data);
    
    for (;valueindex<values;valueindex++)
    {
    RegEnumValue(subkey,valueindex,kA,&valuesize,NULL,&type[valueindex],data,&datasize);
    
    printf("%s ", kA);
    
    if(type[valueindex]==REG_BINARY)  
    {
     printf("binary ");
    
    for(;data[i]!=0;i++)
    {
    printf("%x", data[i]);
    }
    
    }
    
    if(type[valueindex]==REG_SZ)
    {
    if(data[0]!=0)
    {
    printf("string ");
    printf("%s\n", data);
    }
    
    }
    
    if(type[valueindex]==REG_DWORD)
    {
     DWORD val;
     memmove (&val,&data,sizeof(DWORD)); 
    
     printf("Zahl ");
     printf("%i\n",val);
    }
    
    memset(data,0,sizeof(BYTE));
    
    valuesize=sizeof(kA);
    datasize=sizeof(BYTE);
    
    }
    
    return 0;
    }
    


  • Btw: Kann mir jmd auch folgendes erklären?

    Ich habe sämtliche rootkeys in einem HKEY Array gespeichert.
    Bei mir gibts 5 rootkeys daher habe ich das array mit 4 initialisiert.

    Wenn ich dann bei der Auswahl am Anfang das 5te und letzte Element nehme kommen einfach ur viele Leerausgaben und ne (möglicherweise Endlos-)Schleife.

    Initialisiere ich das Array mit 5 also zb HKEY array[5], passiert das nicht.

    Das dürfte doch eig nicht passieren oder??

    mfg



  • Muhi89 schrieb:

    die erste Value wird richtig ausgegeben ... der Inhalt der anderen gar nicht mehr

    ...
    // datasize=sizeof(BYTE);
    datasize=sizeof(data);    // <- !
    ...
    

    Muhi89 schrieb:

    Initialisiere ich das Array mit 5 also zb HKEY array[5], passiert das nicht.

    So muss es auch sein :

    HKEY array[5]; // -5- Elemente, angesprochen mit Index 0,1,2,3,4
    


  • 🙂 Danke, klappt.


Anmelden zum Antworten