RegEnumValue findet nicht alle Values



  • Hallo, wie ja schon im Titel steht findet in meinem Programm RegEnumValue nicht alle Values, bzw. es findet alle Values wie sich an der Zahl der Funktionsaufrüfe sehen lässt, aber es gibt als Fehler ERROR_MORE_DATA aus, obwohl genug Speicher zur Verfügung steht.

    Hier mal der Quelltext(der Registrypfad ist übrigens beliebt gewählt und daran liegts auch nicht):

    HKEY hKey;
        bool check = true;
        char value[1024], wert[1024];
        DWORD size = 1024;
        string pfad = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\";
        RegOpenKey(HKEY_LOCAL_MACHINE, pfad.c_str(), &hKey);
        for(DWORD i = 0; check; i++) {
            long ret = RegEnumValue(hKey, i, value, &size, NULL, NULL, (BYTE*)wert, &size);
            cout<<ret<<endl;
            if(ret == ERROR_NO_MORE_ITEMS) check = false;
            else if(ret != ERROR_MORE_DATA) cout<<value<<endl;
        }
        RegCloseKey(hKey);
    

    Jemand ne Idee worans liegt?


  • Mod

    Ein wenig Debuggen hätte für Dich auch ein Augenöffner sein können.
    Schau Dir mal Deinen Algorithmus an.

    1. Du initialisierst DWORD size = 1024; vor der Schleife.
    2. Du holst die Daten des ersten Eintrages, die z.B. 4 Bytes lang sind.
    3. size steht nun auf 4.
    4. Du gehst in den zweiten Schleifendurchlauf!
    5. Nehmen wir an, es sind 8 Bytes in dem zweiten Eintrag.
    Bingo: Du bekommst ERROR_MORE_DATA

    size ist ein in/out Wert!



  • Jo danke, klappt jetzt. Hätte echt ma debuggen sollen. sry.


Anmelden zum Antworten