home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip Hitware 7
/
Chip_Hitware_Vol_07.iso
/
chiphit7
/
tools
/
95rar
/
dos
/
rar155d.exe
/
rar
/
TECHNOTE.DOC
< prev
next >
Wrap
Text File
|
1995-11-10
|
10KB
|
369 lines
██████╗ █████╗ ██████╗
██╔══██╗ ██╔══██╗ ██╔══██╗ RAR Version 1.55 - Technische Informationen
██████╔╝ ███████║ ██████╔╝ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
██╔══██╗ ██╔══██║ ██╔══██╗
██║ ██║ ██║ ██║ ██║ ██║
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
┌────────────────────────────────────────────────────────────────────────┐
│ DAS HIER BESCHRIEBENE ARCHIVFORMAT IST ERST AB VERSION 1.50 GÜLTIG │
└────────────────────────────────────────────────────────────────────────┘
╔════════════════════════════════════════════════════════════════════════╗
║ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ RAR Archivdateien-Format ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╚════════════════════════════════════════════════════════════════════════╝
Archivdateien bestehen aus Blöcken unterschiedlicher Länge. Die Reihen-
folge der Blöcke 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 Größe des Blocks
ADD_SIZE 4 bytes optionales Feld: hinzugefügte Blockgröße
ADD_SIZE ist nur vorhanden, wenn (HEAD_FLAGS & 0x8000) != 0
HEAD_SIZE ist die gesamte Blockgröße, 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 ent-
fernen 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
Blockgröße 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
Der Kommentarblock wird nur innerhalb anderer Blöcke verwendet; er ist
kein eigenständiger Blocktyp.
Die Archivverarbeitung geschieht auf folgende Weise:
1. Lesen und Überprüfen des Markierungsblocks
2. Lesen des Archivkopfes
3. Lesen oder Überspringen des HEAD_SIZE-Größe des (MAIN_HEAD) - Bytes
4. Wenn das Ende des Archivs angezeigt wird, Beenden der Archivverarbeitung,
sonst Lesen von 7 Bytes in die Felder HEAD_CRC, HEAD_TYPE, HEAD_FLAGS,
HEAD_SIZE.
5. Überprüfe HEAD_TYPE.
Für 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-Größe des(FILE_HEAD) - Bytes
lese oder überspringe FILE_SIZE-Bytes
sonst
Lesen des entsprechenden HEAD_TYPE-Blocks:
lese HEAD_SIZE-7 Bytes
wenn (HEAD_FLAGS & 0x8000)
lese ADD_SIZE Bytes
Für den Fall, daß ein Block übersprungen werden muß:
überspringe HEAD_SIZE-7 Bytes
wenn (HEAD_FLAGS & 0x8000)
überspringe ADD_SIZE Bytes
6. Zurück zu Punkt 4.
╔════════════════════════════════════════════════════════════════════════╗
║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Blockformate ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╚════════════════════════════════════════════════════════════════════════╝
Markierungsblock ( MARK_HEAD )
HEAD_CRC immer 0x6152
2 bytes
HEAD_TYPE Header-Typ: 0x72
1 byte
HEAD_FLAGS immer 0x1a21
2 bytes
HEAD_SIZE Blockgröße = 0x0007
2 bytes
Der Markierungsblock besteht aus einer festgelegten Bytefolge:
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 - Attribut des Volumens (Archivvolumen)
0x02 - Archivkommentar vorhanden
0x04 - Attribut "Archiv gesperrt"
0x08 - Attribut "solide" (solides Archiv)
0x10 - Unbenutzt
0x20 - Authentizitätsinformation vorhanden
weitere bits in HEAD_FLAGS sind für den internen
Gebrauch reserviert
HEAD_SIZE Archivkopf Gesamtgröße einschließlich Archiv,
2 bytes Kommentare und weitere zugefügte Felder
RESERVED1 reserviert
2 bytes
RESERVED2 reserviert
4 bytes
Kommentarblock vorhanden, wenn (HEAD_FLAGS & 0x02) != 0
???? weitere Blöcke, die vielleicht in zukünftigen Versionen
Verwendung finden werden
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 nächsten Volumen fortgesetzt
0x04 - Datei mit Paßwort verschlüsselt
0x08 - Dateikommentar vorhanden
(HEAD_FLAGS & 0x8000) == 1, weil gesamte Block-
größe ist HEAD_SIZE + PACK_SIZE
HEAD_SIZE Gesamtgröße des Dateikopfes einschließlich Dateiname,
2 bytes Kommentaren und weiteren hizugefügten Feldern
PACK_SIZE Größe der gepackten Datei
4 bytes
UNP_SIZE Größe der ungepackten Datei
4 bytes
HOST_OS Betriebssystem, das beim Komprimieren benutzt wurde:
1 byte 0 - MS DOS;
1 - OS/2.
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 Größe des Dateinames
2 bytes
ATTR Dateiattribute
4 bytes
FILE_NAME Dateiname - Zeichenkette NAME_LEN Bytegröße
Kommentarblock vorhanden, wenn (HEAD_FLAGS & 0x08) != 0
???? weitere vorhandene Blöcke - reserviert für
künftige Versionen
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 Größe des Kommentarkopfes + Kommentargröße
2 bytes
UNP_SIZE Größe 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
Extrainfo-Block
HEAD_CRC Block-CRC
2 bytes
HEAD_TYPE Headertyp: 0x76
1 byte
HEAD_FLAGS Bit flags
2 bytes
HEAD_SIZE gesamte Blockgröße
2 bytes
INFO weitere Daten
Unterblock
Objekte in einem Archiv (Block oder Kopf) können einen Unterblock
mit sich führen. Der Unterblock ist abhängig vom Hauptobjekt.
Unterblöcke können gelöscht oder bei einer Aktualisierung des
Archivs in die neue Version verschoben werden.
Ein Unterblock enthält 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
Blockgröße ist HEAD_SIZE + DATA_SIZE
HEAD_SIZE gesamte Blockgröße
2 bytes
DATA_SIZE gesamte Datengröße
4 bytes
SUB_TYPE Typus des Unterblocks
2 bytes
RESERVED muß 0 sein
1 byte
Other weitere Felder (hängt vom Typ des Unterblocks ab)
fields
OS/2 - Unterblock für 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
Blockgröße ist HEAD_SIZE + DATA_SIZE
HEAD_SIZE gesamte Blockgröße
2 bytes
DATA_SIZE gesamte Datengröße (Größe der kompr. erweiterten Attr.)
4 bytes
SUB_TYPE 0x100
2 bytes
RESERVED muß 0 sein
1 byte
UNP_SIZE Größe 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 bytes
╔════════════════════════════════════════════════════════════════════════╗
║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Anmerkungen ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╚════════════════════════════════════════════════════════════════════════╝
1. Sollten Felder und Blöcke in späteren Versionen hinzugefügt werden,
so würde ihre Größe in HEAD_SIZE eingetragen.
2. Um SFX-Archive zu verarbeiten, darf das SFX-Modul keine Markierungs-
blöcke im Archiv suchen.
Es gibt keine Markierungsblocksequenz im SFX-Modul selbst (0x52 0x61 0x72
0x21 0x1a 0x07 0x00).
Es gibt allerdings eine undokumentierte, aber schnelle Methode, die
hier benutzt wird: Die Signatur 'RSFX' (bytes 0x52 0x53 0x46 0x48) sollte am
offset 0x1C stehen. Dann überprüft RAR, ob ein Markierungsblock in der Datei
vorhanden ist. Daß diese Methode auch in künftigen Versionen Verwendung
finden wird, kann nicht garantiert werden.
3. Der CRC wird mit dem Standard-Polynomial 0xEDB88320 berechnet.
Ist die Größe des CRCs kleiner als 4 bytes, werden nur die bytes niederer
Ordnung verwendet.
4. Packmethoden-Codierung:
0x30 - speichern
0x31 - schnellste Kompression
0x32 - schnelle Kompression
0x33 - normale Kompression
0x34 - gute Kompression
0x35 - beste Kompression
5. Die Nummer der RAR Extraktions-Version ist codiert als 10 * Major
Version + minor Version.