Registry abspeichern?



  • Hi,

    die Registry ist ja nichts anderes als eine riesige ini-Datei. Gibt es irgendwie Funktionen wie ich die Registry ganz in eine ini-Datei schreiben kann?

    Ich dachte da an so GetPrivateProfileXXX und so. Jedoch da muss ich ja die Namen der einzelnen Schlüssel und so kennen, aber ich kenn ja nicht alle.

    Gibt es da irgendwie Funktionen von der WinAPI oder aus der COM-Gegend? 😕



  • Es gibt ja nur nen paar Hauptkategorien, welche du über entsprechende Makros in der Winapi öffnen kannst, alle darin enthaltenen Unterkategorien und Schlüssel kannst du dann auslesen und die Stück für Stück in ner ini speichern, wobei ne ini vom Aufbau her nicht wirklich zur Registry passt.
    Würde das ganze in nem Baum speichern und den anschließend speichern (zb xml).



  • Hi,

    ich hab das jetzt mal anhand der Forensuche versucht und mit hilfe der MSDN, rausgekommen ist dies hier:

    #include <iostream> 
    #include <windows.h> 
    
    HRESULT ModifyPrivilege(
        IN LPCTSTR szPrivilege,
        IN BOOL fEnable)
    {
        HRESULT hr = S_OK;
        TOKEN_PRIVILEGES NewState;
        LUID             luid;
        HANDLE hToken    = NULL;
    
        // Open the process token for this process.
        if (!OpenProcessToken(GetCurrentProcess(),
                              TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                              &hToken ))
        {
            printf("Failed OpenProcessToken\n");
            return ERROR_FUNCTION_FAILED;
        }
    
        // Get the local unique ID for the privilege.
        if ( !LookupPrivilegeValue( NULL,
                                    szPrivilege,
                                    &luid ))
        {
            CloseHandle( hToken );
            printf("Failed LookupPrivilegeValue\n");
            return ERROR_FUNCTION_FAILED;
        }
    
        // Assign values to the TOKEN_PRIVILEGE structure.
        NewState.PrivilegeCount = 1;
        NewState.Privileges[0].Luid = luid;
        NewState.Privileges[0].Attributes = 
                  (fEnable ? SE_PRIVILEGE_ENABLED : 0);
    
        // Adjust the token privilege.
        if (!AdjustTokenPrivileges(hToken,
                                   FALSE,
                                   &NewState,
                                   0,
                                   NULL,
                                   NULL))
        {
            printf("Failed AdjustTokenPrivileges\n");
            hr = ERROR_FUNCTION_FAILED;
        }
    
        // Close the handle.
        CloseHandle(hToken);
    
        return hr;
    }
    
    int main ()
    {
        HKEY hkey;
    
        if (FAILED(ModifyPrivilege(SE_BACKUP_NAME, TRUE)))
            std::cout << "Fehler: ModifyPrivilege - " << ::GetLastError () << std::endl;
    
        if (FAILED(RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\",0, KEY_ALL_ACCESS, &hkey)))
            std::cout << "Fehler: RegOpenKeyExA - " << ::GetLastError () << std::endl;
    
        if (FAILED(RegSaveKeyExA(hkey, "g:\\backupreg.reg", NULL,REG_NO_COMPRESSION )))
            std::cout << "Fehler: RegSaveKeyExA - " << ::GetLastError () << std::endl;
    
        std::cin.get ();
    
        return 0;
    }
    

    Die Datei wird ordnungsgemäß erstellt, doch der inhalt ist nicht vorhanden 😞



  • *push* weiß denn keiner Rat? 😞



  • Warum prüfst du den Rückgabewert von RegOpenKeyExA mit dem FAILED-Makro?



  • Ich denke Du solltest noch das Format korrekt angeben... Du gibst nur an, dass Du keine Kompression willst... also:
    REG_STANDARD_FORMAT | REG_NO_COMPRESSION

    Aber beachte: Das resultierende File ist binär. Es ist z.Z. nicht möglich so eine Text-Datei wie mit dem regedit zu erstellen. Dies ist in regedit eingebaut und ist nicht exportiert. Somit musst Du vermutlich doch alle Schlüssel von Hand durchgehen...

    Und nebenbei bemerkt: Die Registry kann man nicht mit einer INI oder Text-Datei vergleichen, da hier auch neben den eigentichen Werten noch Zugriffsrechte / Owner / usw. gespeichert werden...

    Was hast Du denn eigentlich vor?

    Und nochmals nebenbei: Mit x64 wird alles noch schlimmer: Da gibt es Keys die es gar nicht gibt....

    RegEnumKeyEx should return all keys, shouldn´t it?
    http://blog.kalmbachnet.de/?postid=41


Anmelden zum Antworten