Registry über regedit sichern (Abweichung in Dateigröße)
-
Hallo,
ich habe mir mit nachfolgendem Code beholfen, um die Registry komplett
zu sichern. Nun ist mir aufgefallen, dass im Vergleich zu einer manuellen
Sicherung über regedit die Dateigröße erheblich schwankt! Mein Programmexport hat knappe 257MB und der über regedit im Menü "Export" angestoßene Export ganze
360MB!Vielleicht spielt auch hier wieder 32 vs 64bit eine Rolle?
Kennt sich jemand in diesem Bereich aus und kann mir verraten woran dies liegt?Ich dachte auf einem 64bit System werden automatisch auch die 32bit Schlüssel
über regedit unter syswow64\regedit.exe mit exportiert?Ich bin da jetzt s´tark verunsichert....
-
Man sollte den Quellcode auch posten....
TCHAR Path[MAX_PATH+1]; SHGetFolderPath(NULL,CSIDL_WINDOWS,NULL,SHGFP_TYPE_CURRENT,Path); CString pfad; pfad=Path; pfad+="\\syswow64\\regedit"; // build a .REG file that contains the tuning guide CString strTempFile = _T("C:\\reg64.reg"); // // build a regedit command line // /s silent // /e export // // CString strTemp; strTemp.Format(_T(" /s /e \"%s\""),strTempFile); // execute SHELLEXECUTEINFO se={0}; se.cbSize = sizeof(se); se.lpFile = _T(pfad); se.lpParameters = strTemp; se.nShow = SW_SHOWDEFAULT; se.fMask = SEE_MASK_NOCLOSEPROCESS; ShellExecuteEx( &se ); // wait for process to finish if (se.hProcess) { WaitForSingleObject(se.hProcess, INFINITE); CloseHandle(se.hProcess); GetDlgItem(IDC_STATIC32bit)->SetWindowText("64bit Variante der Registry wurde unter \nc:\\reg64.reg exportiert!"); }
-
Hat denn niemand eine Idee dazu?
Ich versuche mich morgen dann an einer Version mit RegSaveKey.
-
In syswow64 liegen die 32-Bit Programme! Dieses solltest Du nicht verwenden!
Ansonstren sichert man die Registry nicht durch auslesen derselben... da kannst auch auch nicht alles auslexsen, da Du vermutlich nicht überall die Rechte dazu hast...
-
ComeBack schrieb:
Ich dachte auf einem 64bit System werden automatisch auch die 32bit Schlüssel
über regedit unter syswow64\regedit.exe mit exportiert?Ich bin da jetzt s´tark verunsichert....
Jo! Logisch, denn syswow64 ist das 32bit Teil eines 64bit OS!
Der 64bit ist Windows\system32.Wenn Du aber ein 32bit Programm startest dann wird Windows\system32 aud Windows\Syswow64 gemappt.
-
Wie würdest du dann eine Kopie der Registry anlegen?
Mit RegSaveKey()? Ich möchte nur die maximale Sicherheit
für den Rechner des Anwenders, da ich an anderer Stelle Keys
aus der Registry löschen muss.Nun will ich die Option schaffen, dass der Anwender die gesamte Registry
zuvor sichern kann.Ein Versuch mit RegSaveKey sieht momentan so aus:
HANDLE ProcessToken; if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &ProcessToken)) { SetPrivilege(ProcessToken, SE_BACKUP_NAME, TRUE); HKEY key; LRESULT result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft", 0, KEY_ALL_ACCESS, &key); result = RegSaveKey(key, "c:\\part1saved.reg", NULL); }
Nun eine Verständnisfrage: muss ich, wenn ich die gesamte Registry sichern
möchte alle HKEYs einzeln sichern (local_machine,current_user usw) oder gibt
es eine Möglichkeit übergeordnet mit einem Begriff alles in eine Datei zu exportieren?
Ja, vielleicht ne dumme Frage, aber ich weiß es eben nicht. Darum frag ich.
-
Martin Richter schrieb:
ComeBack schrieb:
Ich dachte auf einem 64bit System werden automatisch auch die 32bit Schlüssel
über regedit unter syswow64\regedit.exe mit exportiert?Ich bin da jetzt s´tark verunsichert....
Jo! Logisch, denn syswow64 ist das 32bit Teil eines 64bit OS!
Der 64bit ist Windows\system32.Wenn Du aber ein 32bit Programm startest dann wird Windows\system32 aud Windows\Syswow64 gemappt.
Ich möchte mit meiner Anwendung erreichen, dass sowohl unter 32 wie auch 64bit
Windows-Versionen immer die Registry korrekt gesichert wird.
Daher der Versuch mit syswow64, regedit und regedt32.Ich vermute mal RegSaveKey() in Verbindung mit RegOpenKey trifft die
Entscheidung was zu sichern ist nicht automatisch?!
Ich muss also ermitteln ob mein Programm auf einem 32 oder 64bit Windows
läuft und dann die RegOpenKey-Zeile mit KEY_WOW64_32KEY bzw. KEY_WOW64_64KEY
entsprechend ausführen?! Wobei, folge ich euren Ausführungen, auf 64bit
ohnehin immer der Teil syswow64 mit den 32bit-Werten mit gesichert wird.Hab ich's jetzt richtig verstanden
-
Dann solltest Du aus einem 64bit Programm RegSaveKey aufrufen. Das sichert auch den 32bit Teilast.
-
Und wie kompiliere ich meine MFC-Anwendung richtig, damit diese sowohl
auf 32 als auch 64bit Systemen läuft? Sorry ich bin da unerfahren
-
Eine 32bit Anwendung läuft auf einem 64bit System hat aber keinen Zugriff auf die 64bit OS Bestandteile.
Ein 64bit Programm läuft natürlich nur auf einem 64bit OS.Du benötigst also zwei Anwednungen.
-
Demnach macht KEY_WOW64_32KEY auch nur auf einem 64bit-System Sinn (egal ob
die Anwendung auf 32 oder 64 läuft)?!
-
Logisch. Weil doch in diesem Fall eine Umlenkng in den 32bit Ast erfolgt.
Den 64bit Ast bekommst Du dann ja gar nicht zu Gesicht, egal wann.Nur aus einem 64bit Programm kann man mit den entsprechenden Rechten auf die gesamte Registry zugreifen.
-
Danke für die Geduld. Ich habe viel dabei gelernt!