ۻ ۻ ۻ ۻ ۻ ۻ RAR version 2.04d - Technische Informationen ɼ ۺ ɼ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ۻ ۺ ۻ ۺ ۺ ۺ ۺ ۺ ۺ ͼ ͼ ͼ ͼ ͼ ͼ Ŀ DAS HIER BESCHRIEBENE DATEIFORMAT IST ERST AB VERSION 1.50 GLTIG ͻ RAR Archivdateien-Format ͼ Archivdateien bestehen aus Blcken unterschiedlicher Lnge. Die Reihen- folge der Blcke kann variieren, aber der erste Block ist immer der Mar- kierungsblock, gefolgt vom Archivkopfblock. Jeder Block beginnt mit folgenden Feldern: HEAD_CRC 2 bytes CRC des ganzen Blocks oder eines Teils HEAD_TYPE 1 byte Typ des Blocks HEAD_FLAGS 2 bytes Flags des Blocks HEAD_SIZE 2 bytes Gre des Blocks ADD_SIZE 4 bytes optionales Feld: hinzugefgte Blockgre ADD_SIZE ist nur vorhanden, wenn (HEAD_FLAGS & 0x8000) != 0 HEAD_SIZE ist die gesamte Blockgre, wenn (HEAD_FLAGS & 0x8000) == 0 und HEAD_SIZE+ADD_SIZE, wenn Feld ADD_SIZE vorhanden ist - wenn (HEAD_FLAGS & 0x8000) != 0. In jedem Block haben die folgenden bits in HEAD_FLAGS dieselbe Bedeutung: 0x4000 - wenn gesetzt, ignorieren ltere RAR-Versionen den Block und entfernen sie, wenn das Archiv aktualisiert wird. wenn nicht gesetzt, wird der Block bei einer Aktualisierung in das neue Archiv kopiert; 0x8000 - wenn gesetzt: das ADD_SIZE-Feld ist vorhanden und die gesamte Blockgre ist HEAD-SIZE+ADD_SIZE. Blocktypen: HEAD_TYPE=0x72 Markierungsblock HEAD_TYPE=0x73 Archivkopf HEAD_TYPE=0x74 Dateikopf HEAD_TYPE=0x75 Kommentarkopf HEAD_TYPE=0x76 weitere Informationen HEAD_TYPE=0x77 Unterblock HEAD_TYPE=0x78 Recovery Record Der Kommentarblock wird nur innerhalb anderer Blcke verwendet; er ist kein eigenstndiger Blocktyp. Die Archivverarbeitung geschieht auf folgende Weise: 1. Lesen und berprfen des Markierungsblocks 2. Lesen des Archivkopfes 3. Lesen oder berspringen des HEAD_SIZE-Gre des (MAIN_HEAD) - Bytes 4. Wenn das Ende des Archivs angezeigt wird, Beenden der Archiverarrbeitung, sonst Lesen von 7 Bytes in die Felder HEAD_CRC, HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE. 5. berprfe HEAD_TYPE. Fr den Fall, da ein Block gelesen werden mu: wenn HEAD_TYPE==0x74 lese Dateikopf (die ersten 7 Bytes sind schon gelesen) lese oder berspringe HEAD_SIZE-Gre des(FILE_HEAD) - Bytes lese oder berspringe FILE_SIZE- sonst Lesen des entsprechenden HEAD_TYPE-Blocks: lese HEAD_SIZE-7 Bytes wenn (HEAD_FLAGS & 0x8000) lese ADD_SIZE Bytes Fr den Fall, da ein Block bersprungen werden mu: berspringe HEAD_SIZE-7 Bytes wenn (HEAD_FLAGS & 0x8000) berspringe ADD_SIZE Bytes 6. Zurck zu Punkt 4. ͻ Blockformate ͼ Markierungsblock ( MARK_HEAD ) HEAD_CRC immer 0x6152 2 bytes HEAD_TYPE Headertyp: 0x72 1 byte HEAD_FLAGS immer 0x1a21 2 bytes HEAD_SIZE Blockgre = 0x0007 2 bytes Der Markierungsblock besteht aus einer festgelegten byte-Folge: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00 Archivkopf ( MAIN_HEAD ) HEAD_CRC CRC der Felder HEAD_TYPE bis RESERVED2 2 bytes HEAD_TYPE Headertyp: 0x73 1 byte HEAD_FLAGS Bit flags: 2 bytes 0x01 - Volumenattribut (Archivvolumen) 0x02 - Archivkommentar vorhanden 0x04 - Attribut fr Archiv verschlossen 0x08 - Solid attribute (solides Archiv) 0x10 - unbenutzt 0x20 - Authentizittsinfo vorhanden weitere bits in HEAD_FLAGS sind reserviert fr den internen Gebrauch HEAD_SIZE Gre des Archivheaders einschlielich des 2 bytes Archivkommentars RESERVED1 reserviert 2 bytes RESERVED2 reserviert 4 bytes Comment block vorhanden, wenn (HEAD_FLAGS & 0x02) != 0 Dateikopf (Datei im Archiv) HEAD_CRC CRC der Felder HEAD_TYPE bis FILEATTR 2 bytes und Dateiname HEAD_TYPE Headertyp: 0x74 1 byte HEAD_FLAGS Bit flags: 2 bytes 0x01 - Fortsetzung aus dem vorherigen Volumen 0x02 - Datei wird im nchsten Volumen fortgesetzt 0x04 - Datei mit Pawort verschlsselt 0x08 - Dateikommentar vorhanden 0x10 - Information vorhergehender Dateien (solid flag) (fr RAR 2.0 und folgende) bits 7 6 5 (fr RAR 2.0 und folgende) 0 0 0 - dictionary size 64 Kb 0 0 1 - dictionary size 128 Kb 0 1 0 - dictionary size 256 Kb 0 1 1 - dictionary size 512 Kb 1 0 0 - dictionary size 1024 Kb 1 0 1 - reserviert 1 1 0 - reserviert 1 1 1 - Datei ist Verzeichnis (HEAD_FLAGS & 0x8000) == 1, denn gesamte Blockgre ist HEAD_SIZE + PACK_SIZE HEAD_SIZE Gesamtgre des Dateikopfes einschlielich Dateiname, 2 bytes Kommentaren und weiteren hizugefgten Feldern PACK_SIZE Gre der gepackten Datei 4 bytes UNP_SIZE Gre der ungepackten Datei 4 bytes HOST_OS Betriebssystem, das beim Komprimieren benutzt wurde: 1 byte 0 - MS DOS; 1 - OS/2. 2 - Win32 3 - Unix FILE_CRC Datei-CRC 4 bytes FTIME Datums- und Zeitangabe in Standard - MS DOS - Format 4 bytes UNP_VER RAR Version, die zum Entpacken erforderlich ist 1 byte METHOD Komprimiermethode 1 byte NAME_SIZE Gre des Dateinames 2 bytes ATTR Dateiattribute 4 bytes FILE_NAME Dateiname - Zeichenkette NAME_SIZE Bytegre Kommentarblock vorhanden, wenn (HEAD_FLAGS & 0x08) != 0 Kommentarblock HEAD_CRC CRC der Felder HEAD_TYPE bis COMM_CRC 2 bytes HEAD_TYPE Headertyp: 0x75 1 byte HEAD_FLAGS Bit flags 2 bytes HEAD_SIZE Gre des Kommentarkopfes + Kommentargre 2 bytes UNP_SIZE Gre des Kommentars (unkomprimiert) 2 bytes UNP_VER RAR-Version, die zum Entpacken des Kommentars 1 byte erforderlich ist METHOD Packmethode 1 byte COMM_CRC Kommentar CRC 2 bytes COMMENT Kommentartext Extra Info block HEAD_CRC Block CRC 2 bytes HEAD_TYPE Header type: 0x76 1 byte HEAD_FLAGS Bit flags 2 bytes HEAD_SIZE gesamte Blockgre 2 bytes INFO weitere Daten Unterblock Objekte in einem Archiv (Block oder Kopf) knnen einen Unterblock mit sich fhren. Der Unterblock ist abhngig vom Hauptobjekt. Unterblcke knnen gelscht oder bei einer Aktualisierung des Archivs in die neue Version verschoben werden. Ein Unterblock enthlt folgende Felder: HEAD_CRC Block-CRC 2 bytes HEAD_TYPE Headertyp: 0x77 1 byte HEAD_FLAGS Bit flags 2 bytes (HEAD_FLAGS & 0x8000) == 1, weil die gesamte Blockgre ist HEAD_SIZE + DATA_SIZE HEAD_SIZE gesamte Blockgre 2 bytes DATA_SIZE gesamte Datengre 4 bytes SUB_TYPE Typus des Unterblocks 2 bytes RESERVED mu 0 sein 1 byte Other weitere Felder (hngt vom Typ des Unterblocks ab) fields OS/2 - Unterblock fr erweiterte Attribute HEAD_CRC Block CRC 2 bytes HEAD_TYPE Headertyp: 0x77 1 byte HEAD_FLAGS Bit flags 2 bytes (HEAD_FLAGS & 0x8000) == 1, weil die gesamte Blockgre HEAD_SIZE + DATA_SIZE ist HEAD_SIZE gesamte Blockgre 2 bytes DATA_SIZE gesamte Datengre (Gre der kompr. erweiterten Attr.) 4 bytes SUB_TYPE 0x100 2 bytes RESERVED mu 0 sein 1 byte UNP_SIZE Gre der unkomprimierten erweiterten Attribute 4 bytes UNP_VER RAR-Version, die zum Entpacken der Attr. erforderlich ist 1 byte METHOD Komprimiermethode 1 byte EA_CRC CRC der erweiterten Attribute 4 ͻ Anmerkungen ͼ 1. Um SFX-Archive zu verarbeiten, darf das SFX-Modul keine Markierungsblcke im Archiv suchen. Es gibt keine Markierungsblocksequenz im SFX-Modul selbst (0x52 0x61 0x72 0x21 0x1a 0x07 0x00). 2. Der CRC wird mit dem Standard-Polynomial 0xEDB88320 berechnet. Ist die Gre des CRCs kleiner als 4 bytes, werden nur die bytes niederer Ordnung verwendet. 3. Packmethoden-Codierung: 0x30 - speichern 0x31 - schnellste Kompression 0x32 - schnelle Kompression 0x33 - normale Kompression 0x34 - gute Kompression 0x35 - beste Kompression 4. Die Nummer der RAR Extraktions-Version ist codiert als 10 * major Version + minor Version.