Personal Backup |
|
© 2001 − 2021, Dr. Jürgen Rathlev |
Für alle diejenigen, die sich für tiefer gehende Details interessieren, habe ich nachfolgend einige Informationen zusammengestellt.
Seit Vers. 5.0 wird Personal Backup mit einer Entwicklungsumgebung erstellt, die den Unicode-Zeichensatz unterstützt (aktuell Delphi 10 Seattle). Damit gehören die Beschränkungen des ANSI-Zeichensatzes (ISO-8859) bei Dateinamen der Vergangenheit an. Außerdem sind jetzt Pfadlängen von mehr als 260 Zeichen erlaubt.
Die wichtigsten Merkmale:
Alle Kennwörter, sowohl für FTP, SMTP als auch AES-Verschlüsselung müssen in der Kodierung ISO-8859-1 angegeben werden, d.h. es sind auch Umlaute erlaubt.
Seit Windows 7 gibt es eine neue Version 2.0 der Aufgabenplanung. Diese umfasst neben
den Funktionen der Vorversion auch einige neue Optionen, z.B. das Nachholen einer Aufgabe
oder das Verwenden eines Benutzerkontos ohne Angabe eines Kennworts.
Die aktuelle Version von Personal Backup unterstützt im
integrierten Assistenten nur diese
neue Version der Windows-Aufgabenplanung. Auf Systemen mit Windows XP steht
diese Funktion daher nicht mehr zur Verfügung.
Der existierende Standard für das gzip-Format (RFC1952 von 1996) legt fest, dass der Dateiname im ISO-8859-1-Zeichensatz gespeichert werden soll. Ich habe leider keine allgemein gültigen Festlegungen gefunden, wie mit Unicode-Dateinamen umzugehen ist.
So weicht z.B. die aktuelle Linux-Version des Programms GZip, mit dem gz-Archive erzeugt und gelesen werden können, von diesem Standard ab und speichert den Dateinamen im UTF-8-Format. Dabei wird das OS-Byte im Header auf 3 (Unix) gesetzt.
Personal Backup hat dieses Byte bislang immer auf 0 (FAT) gesetzt und den Dateinamen als ISO-8859-1 gespeichert. Um mit den bisherigen Versionen kompatibel zu bleiben und trotzdem auch Unicode-Zeichen zu unterstützen, werden jetzt zwei Varianten benutzt:
Damit ergibt sich allerdings das Problem, dass Fremdprogramme (wie z.B. WinZip oder WinRar) die von Personal Backup in den gz-Dateien gespeicherten Dateinamen nur im ersten Fall richtig erkennen. Auf das Entpacken hat das allerdings keinen Einfluss.
Besser wäre es sicherlich das z.Zt nicht benutzte Bit 5 des FLG-Byte als Unterscheidungs-Merkmal für die Kodierung zu benutzen. So ähnlich wird es z.B. beim Zip-Format (s.u.) gemacht.
Im existierenden Standard für das gzip-Format (RFC1952 von 1996) ist für die Größe der unkomprimierten Datei nur ein 32-bit-Wert vorgesehen. Bei Dateien ≥ 4 GB wird dieser Wert dann modulo 232 geschrieben. Viele Packprogramme (wie z.B. 7-zip) unterstützen allerdings die Angabe der Dateigröße in einem Extrafeld mit der Signatur 0x0100, wie es auch von Personal Backup benutzt wird.
Details dazu sind weiter unten näher beschrieben.
Beim Zip-Format ist in der Spezifikation Version 6.3.6 v. April 2019 beschrieben, wie mit Unicode-Dateinamen umzugehen ist: Wenn das Bit 11 des general purpose bit flag gesetzt ist, sind Dateiname und Kommentar UTF-8-kodiert. Personal Backup hält sich an diese Vorgabe. Inzwischen unterstützten auch viele Packprogramme diesen Standard (z.B. WinZip Vers. 12, WinRar Vers. 3.80 und 7-Zip Ver. 9.20) und auch der Windows-Explorer.
Details dazu sind nachfolgend näher beschrieben.
Die Dateien werden nach dem AES-Verfahren verschlüsselt. Dabei werden die gleichen Routinen, wie bei WinZip verwendet (siehe Infos bei Winzip und bei Brian Gladman). Das erzeugte Datenformat hängt allerdings vom gewählten Backup-Modus ab:
Signatur : JREx (4 Bytes - ab Vers. 5.8.5) TimeStamp : Unix time (4 Byte - ab Ver. 5.9.0) Attribute : Datei-Attribute (2 Byte - ab Ver. 5.9.0) Enc-Header : 10, 14 oder 18 Bytes (abhängig von der Verschlüsselungstiefe): Saltwert (8, 12 oder 16 Bytes) + Kennwortprüfwert (2 Bytes) Enc-Data : Anzahl Bytes wie Quelldatei Enc-Trailer: 10 Bytes Authentifizierungscode
GZip-Header : 10 Bytes wie Standard neu: Flag-Byte: bit 5 = encrypted Extrafeld : (ID=1) Optional für Dateien > 4GB - 20 bytes Extrafeld : (ID=$524A) Signatur JR + Angabe der Verschlüsselungstiefe (ab Version 5.8.5) - 6 Bytes Dateiname : ISO-8859-1 (OS=0 - FAT) oder UTF-8 (OS=11 - NTFS) Enc-Header : 10, 14 oder 18 Bytes (abhängig von der Verschlüsselungstiefe) Enc-Data : Anzahl Bytes wie komprimierte Quelldatei Enc-Trailer : 10 Bytes (s.o.) GZip-Trailer: 8 Bytes Crc immer = 0
Ergänzungen zum WinZip-Format: Local File Header / Central Directory Header: general purpose bit flag - Bit 8: filenames are encrypted Extra Data Field for encrypted filenames ---------------------------------------- Offset Size Contents 0 2 Header ID of extra field (0x9909) 2 2 Data size (n) in bytes (variable) 4 n Encrypted filename
Für Pfadlängen gibt es unter allen Windows Betriebssystemen an vielen Stellen
immer noch eine Beschränkung auf 260 Zeichen
(Weitere Infos).
Dies betrifft alle Anwendungen, die nicht die Unicode-Versionen der Windows-API-Funktionen
verwenden, und unter Windows XP auch alle Anwendungen, die die Windows-Shellkomponenten
benutzen, wie z.B. der Explorer. Diese Beschränkung ist erst seit Windows 7 aufgehoben.
In Personal Backup macht sich dies an allen Stellen bemerkbar, wo das Programm
Windows-Shell-Komponenten verwendet (z.B. im Dialog zur Auswahl eines Verzeichnisses
oder einer Datei). Erst ab Windows 7 sind auch hier lange Pfade erlaubt.
Intern wird für alle Datei-verarbeitenden Windows-Funktionen (z.B. beim Kopieren)
das Pfad-Präfix "\\?\" verwendet, wodurch eine max. Länge von ca. 32000 Zeichen möglich ist.
Daher ist seit Version 5 die Sicherung, das Überprüfen, das Wiederherstellen und das Löschen
von Dateien mit überlangen Pfaden möglich, auch wenn dies noch nicht von allen anderen Programmen
vollständig unterstützt wird (z.B. Windows-XP-Explorer). Ein mir bekannter Dateimanager, der
mit langen Pfaden keine Probleme hat, ist der
TotalCommander (seit Version 7.5).
Leider wird dies vom Windows-System nicht wirklich unterstützt. Die Voreinstellungen
von Windows sind so, dass das Herunterfahren möglichst schnell geht.
Dem widerspricht es natürlich, wenn zu diesem Zeitpunkt noch eine u.U. auch länger
dauernde Datensicherung durchgeführt werden soll.
Es gibt aber eine Möglichkeit, das System an dieser Stelle zu überlisten.
Personal Backup fängt dazu die Windows-Nachricht
WM_QUERYENDSESSION,
die nach dem Einleiten des Abmelde-Prozesses an alle laufenden Anwendungen gesendet wird,
ab und unterbricht den Vorgang. Nachdem das Backup ausgeführt wurde, wird dann
das Abmelden oder Herunterfahren über eine der API-Funktionen ExitWindowsEx oder
InitiateSystemShutdownEx wieder neu eingeleitet.
Damit das funktioniert müssen allerdings folgende Bedingungen erfüllt sein:
Möglicherweise spielen auch noch die folgenden Registry-Einstellungen eine Rolle: