home *** CD-ROM | disk | FTP | other *** search
/ PC Shareware 2000 January / PCShareware-1-00.iso / help / winrar / wrar250p.exe / TechNote.txt < prev    next >
Encoding:
Text File  |  1999-04-02  |  9.5 KB  |  358 lines

  1.  
  2.                     RAR wersja 2.50 - Informacje techniczne
  3.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.  
  5.  
  6.        FORMAT ARCHIWUM OPISANY PONI╜EJ DOTYCZY TYLKO WERSJI OD 1.50 WZWY╜
  7.  
  8.  
  9.   ============================================================================
  10.                                Format archiwum RAR'a
  11.   ============================================================================
  12.  
  13.    Archiwum skêada si⌐ z bloków o ró╛nej dêugoÿci. Kolejnoÿå tych bloków mo╛e
  14. byå ró╛na, lecz pierwszym blokiem musi byå blok identyfikacyjny, po którym
  15. musi wystÑpiå blok nagêówka archiwum.
  16.  
  17.    Ka╛dy blok rozpoczyna si⌐ nast⌐pujÑcymi polami:
  18.  
  19. HEAD_CRC      2 bajty   CRC (suma kontrolna) caêego bloku lub jego cz⌐ÿci
  20. HEAD_TYPE     1 bajt    typ bloku
  21. HEAD_FLAGS    2 bajty   znaczniki bloku
  22. HEAD_SIZE     2 bajty   rozmiar bloku
  23. ADD_SIZE      4 bajty   pole opcjonalne
  24.  
  25.    Pole ADD_SIZE jest obecne tylko jeÿli (HEAD_FLAGS & 0x8000) != 0
  26.  
  27.    Caêkowity rozmiar bloku to HEAD_SIZE jeÿli (HEAD_FLAGS & 0x8000) == 0
  28. lub HEAD_SIZE+ADD_SIZE jeÿli pole ADD_SIZE jest obecne - gdy
  29. (HEAD_FLAGS & 0x8000) != 0.
  30.  
  31.    W ka╛dym bloku nast⌐pujÑce bity w polu HEAD_FLAGS oznaczajÑ:
  32.  
  33.   0x4000 - jeÿli ustawiony, starsze wersje RAR'a zignorujÑ blok i usunÑ go
  34.            podczas aktualizacji archiwum.
  35.            jeÿli zgaszony, blok jest kopiowany do nowego archiwum podczas
  36.            jego aktualizacji;
  37.  
  38.   0x8000 - jeÿli ustawiony, pole ADD_SIZE jest obecne i caêkowitym rozmiarem
  39.            bloku jest HEAD_SIZE+ADD_SIZE.
  40.  
  41.   Typy bloków:
  42.  
  43. HEAD_TYPE=0x72          blok identyfikacyjny
  44. HEAD_TYPE=0x73          nagêówek archiwum
  45. HEAD_TYPE=0x74          nagêówek pliku
  46. HEAD_TYPE=0x75          nagêówek komentarza
  47. HEAD_TYPE=0x76          dodatkowa informacja
  48. HEAD_TYPE=0x77          pod-blok
  49. HEAD_TYPE=0x78          dane naprawcze
  50.  
  51.    Blok komentarza jest u╛ywany tylko w innych blokach i nie wyst⌐puje
  52. samodzielnie.
  53.  
  54.    Przetwarzanie archiwum:
  55.  
  56. 1. Odczytaj i sprawd½ blok identyfikacyjny
  57. 2. Odczytaj nagêówek archiwum
  58. 3. Odczytaj lub pomiΣ HEAD_SIZE-sizeof(MAIN_HEAD) bajtów
  59. 4. Jeÿli napotkaêeÿ koniec archiwum to zakoΣcz przetwarzanie archiwum,
  60.    w przeciwnym wypadku odczytaj 7 bajtów do pól HEAD_CRC, HEAD_TYPE,
  61.    HEAD_FLAGS, HEAD_SIZE.
  62. 5. Sprawd½ HEAD_TYPE.
  63.    Jeÿli konieczne jest odczytanie bloku:
  64.          jeÿli HEAD_TYPE==0x74
  65.            odczytaj nagêówek pliku (pierwsze 7 bajtów ju╛ zostaêo odczytane)
  66.            odczytaj lub pomiΣ HEAD_SIZE-sizeof(FILE_HEAD) bajtów
  67.            odczytaj lub pomiΣ FILE_SIZE bajtów
  68.          w przeciwnym wypadku
  69.            odczytaj odpowiedni blok:
  70.              odczytaj HEAD_SIZE-7 bajtów
  71.              jeÿli (HEAD_FLAGS & 0x8000)
  72.                odczytaj ADD_SIZE bajtów
  73.    Jeÿli konieczne jest pomini⌐cie bloku:
  74.          pomiΣ HEAD_SIZE-7 bajtów
  75.          jeÿli (HEAD_FLAGS & 0x8000)
  76.            pomiΣ ADD_SIZE bajtów
  77. 6. id½ do punktu 4.
  78.  
  79.  
  80.   ============================================================================
  81.                                 Formaty bloków
  82.   ============================================================================
  83.  
  84.    Blok identyfikacyjny (MARK_HEAD)
  85.  
  86.  
  87. HEAD_CRC        zawsze 0x6152
  88. 2 bajty
  89.  
  90. HEAD_TYPE       typ nagêówka: 0x72
  91. 1 bajt
  92.  
  93. HEAD_FLAGS      zawsze 0x1a21
  94. 2 bajty
  95.  
  96. HEAD_SIZE       rozmiar bloku = 0x0007
  97. 2 bajty
  98.  
  99.    Blok identyfikacyjny jest wêaÿciwie staêÑ sekwencjÑ bajtów:
  100. 0x52 0x61 0x72 0x21 0x1a 0x07 0x00
  101.  
  102.  
  103.  
  104.    Nagêówek archiwum (MAIN_HEAD)
  105.  
  106.  
  107. HEAD_CRC        CRC pól od HEAD_TYPE do RESERVED2
  108. 2 bytes
  109.  
  110. HEAD_TYPE       typ nagêówka: 0x73
  111. 1 bajt
  112.  
  113. HEAD_FLAGS      znaczniki bitowe:
  114. 2 bajty
  115.                 0x01    - wolumin (archiwum jest woluminem)
  116.                 0x02    - archiwum posiada komentarz
  117.                 0x04    - archiwum jest zablokowane
  118.                 0x08    - archiwum jest ciÑgêe
  119.                 0x10    - nieu╛ywany
  120.                 0x20    - archiwum posiada informacj⌐ autentycznoÿci
  121.  
  122.                 pozostaêe bity w HEAD_FLAGS sÑ zarezerwowane do u╛ytku
  123.                 wewn⌐trznego
  124.  
  125. HEAD_SIZE       caêkowity rozmiar nagêówka archiwum êÑcznie z komentarzem
  126. 2 bajty
  127.  
  128. RESERVED1       zarezerwowane
  129. 2 bajty
  130.  
  131. RESERVED2       zarezerwowane
  132. 4 bajty
  133.  
  134.  
  135. Blok            obecny jeÿli (HEAD_FLAGS & 0x02) != 0
  136. komentarza
  137.  
  138.  
  139.  
  140.    Nagêówek pliku (plik w archiwum)
  141.  
  142.  
  143. HEAD_CRC        CRC pól od HEAD_TYPE do FILEATTR
  144. 2 bajty         i nazwy pliku
  145.  
  146. HEAD_TYPE       typ nagêówka: 0x74
  147. 1 bajt
  148.  
  149. HEAD_FLAGS      znaczniki bitowe:
  150. 2 bajty
  151.                 0x01 - plik kontynuowany z poprzedniego woluminu
  152.                 0x02 - plik kontynuowany w nast⌐pnym woluminie
  153.                 0x04 - plik zaszyfrowany hasêem
  154.                 0x08 - plik posiada komentarz
  155.                 0x10 - u╛yta jest informacja z poprzedniego pliku
  156.                        (znacznik ciÑgêoÿci)
  157.                        (dla RAR'a od wersji 2.0 wzwy╛)
  158.  
  159.                 bity 7 6 5 (dla RAR'a od wersji 2.0 wzwy╛)
  160.  
  161.                      0 0 0    - rozmiar sêownika   64 Kb
  162.                      0 0 1    - rozmiar sêownika  128 Kb
  163.                      0 1 0    - rozmiar sêownika  256 Kb
  164.                      0 1 1    - rozmiar sêownika  512 Kb
  165.                      1 0 0    - rozmiar sêownika 1024 Kb
  166.                      1 0 1    - zarezerwowane
  167.                      1 1 0    - zarezerwowane
  168.                      1 1 1    - plik jest katalogiem
  169.  
  170.                 (HEAD_FLAGS & 0x8000) == 1, poniewa╛ peêny rozmiar bloku to
  171.                 HEAD_SIZE + PACK_SIZE
  172.  
  173. HEAD_SIZE       peêny rozmiar nagêówka pliku wraz z nazwÑ pliku i komentarzem
  174. 2 bajty
  175.  
  176. PACK_SIZE       rozmiar pliku po kompresji
  177. 4 bajty
  178.  
  179. UNP_SIZE        oryginalny rozmiar pliku
  180. 4 bajty
  181.  
  182. HOST_OS         system operacyjny, w którym nastÑpiêa archiwizacja
  183. 1 bajt                 0 - MS DOS
  184.                        1 - OS/2
  185.                        2 - Win32
  186.                        3 - Unix
  187.                        4 - Mac OS
  188.  
  189. FILE_CRC        CRC pliku
  190. 4 bajty
  191.  
  192. FTIME           data i czas w standardowym formacie MS DOS
  193. 4 bajty
  194.  
  195. UNP_VER         wersja RAR'a potrzebna do wypakowania pliku
  196. 1 bajt
  197.  
  198. METHOD          metoda kompresji
  199. 1 bajt
  200.  
  201. NAME_SIZE       rozmiar nazwy pliku
  202. 2 bajty
  203.  
  204. ATTR            atrybuty pliku
  205. 4 bajty
  206.  
  207. FILE_NAME       nazwa pliku - ciÑg znaków o dêugoÿci NAME_SIZE bajtów
  208.  
  209.  
  210. Blok            obecny jeÿli (HEAD_FLAGS & 0x08) != 0
  211. komentarza
  212.  
  213.  
  214.  
  215.   Blok komentarza
  216.  
  217.  
  218. HEAD_CRC        CRC pól od HEAD_TYPE do COMM_CRC
  219. 2 bajty
  220.  
  221. HEAD_TYPE       typ nagêówka: 0x75
  222. 1 bajt
  223.  
  224. HEAD_FLAGS      znaczniki bitowe
  225. 2 bajty
  226.  
  227. HEAD_SIZE       rozmiar nagêówka komentarza + rozmiar komentarza
  228. 2 bajty
  229.  
  230. UNP_SIZE        oryginalny rozmiar komentarza
  231. 2 bajty
  232.  
  233. UNP_VER         wersja RAR'a potrzebna do wypakowania komentarza
  234. 1 bajt
  235.  
  236. METHOD          metoda kompresji
  237. 1 bajt
  238.  
  239. COMM_CRC        CRC komentarza
  240. 2 bajty
  241.  
  242. COMMENT         tekst komentarza
  243.  
  244.  
  245.  
  246.   Dodatkowy blok informacyjny
  247.  
  248.  
  249. HEAD_CRC        CRC bloku
  250. 2 bajty
  251.  
  252. HEAD_TYPE       typ nagêówka: 0x76
  253. 1 bajt
  254.  
  255. HEAD_FLAGS      znaczniki bitowe
  256. 2 bajty
  257.  
  258. HEAD_SIZE       caêkowity rozmiar bloku
  259. 2 bajty
  260.  
  261. INFO            inne dane
  262.  
  263.  
  264.   Pod-blok
  265.  
  266. Za obiektem w archiwum (blokiem lub nagêówkiem) mo╛e znajdowaå si⌐ pod-blok.
  267. Pod-blok zale╛y od poprzedzajÑcego go obiektu. Pod-blok mo╛e byå usuwany
  268. lub przenoszony do nowego archiwum podczas aktualizacji.
  269.  
  270.  Pod-blok zawiera nast⌐pujÑce pola:
  271.  
  272. HEAD_CRC        CRC bloku
  273. 2 bajty
  274.  
  275. HEAD_TYPE       typ nagêówka: 0x77
  276. 1 bajt
  277.  
  278. HEAD_FLAGS      znaczniki bitowe
  279. 2 bajty
  280.                 (HEAD_FLAGS & 0x8000) == 1, poniewa╛ peêny
  281.                 rozmiar bloku to HEAD_SIZE + DATA_SIZE
  282.  
  283. HEAD_SIZE       caêkowity rozmiar bloku
  284. 2 bajty
  285.  
  286. DATA_SIZE       caêkowity rozmiar danych
  287. 4 bajty
  288.  
  289. SUB_TYPE        typ pod-bloku
  290. 2 bajty
  291.  
  292. RESERVED        musi byå 0
  293. 1 bajt
  294.  
  295. Inne pola       inne pola w zale╛noÿci od typu pod-bloku
  296.  
  297.  
  298.   Pod-blok rozszerzonych atrybutów OS/2
  299.  
  300.  
  301. HEAD_CRC        CRC bloku
  302. 2 bajty
  303.  
  304. HEAD_TYPE       typ nagêówka: 0x77
  305. 1 bajt
  306.  
  307. HEAD_FLAGS      znaczniki bitowe
  308. 2 bajty
  309.                 (HEAD_FLAGS & 0x8000) == 1, poniewa╛ peêny
  310.                 rozmiar bloku to HEAD_SIZE + DATA_SIZE
  311.  
  312. HEAD_SIZE       caêkowity rozmiar bloku
  313. 2 bajty
  314.  
  315. DATA_SIZE       caêkowity rozmiar danych (rozmiar skompresowanych
  316. 4 bajty         rozszerzonych atrybutów)
  317.  
  318. SUB_TYPE        0x100
  319. 2 bajty
  320.  
  321. RESERVED        musi byå 0
  322. 1 bajt
  323.  
  324. UNP_SIZE        oryginalny rozmiar rozszerzonych atrybutów
  325. 4 bajty
  326.  
  327. UNP_VER         wersja RAR'a potrzebna do wypakowania rozszerzonych atrybutów
  328. 1 bajt
  329.  
  330. METHOD          metoda kompresji
  331. 1 bajt
  332.  
  333. EA_CRC          CRC rozszerzonych atrybutów
  334. 4 bajty
  335.  
  336.  
  337.   ============================================================================
  338.                                       Uwagi
  339.   ============================================================================
  340.  
  341.    1. Aby przetwarzaå archiwum SFX nale╛y pominÑå szukanie bloku
  342. identyfikacyjnego. Moduê SFX nie zawiera tego bloku (0x52 0x61 0x72 0x21
  343. 0x1a 0x07 0x00).
  344.  
  345.    2. CRC liczy si⌐ przy u╛yciu standardowego wielomianu 0xEDB88320. Jeÿli
  346. rozmiar CRC jest mniejszy ni╛ 4 bajty, u╛yte sÑ tylko mêodsze bajty.
  347.  
  348.    3. Oznaczenia metod kompresji:
  349.          0x30 - brak kompresji
  350.          0x31 - najszybsza kompresja
  351.          0x32 - szybka kompresja
  352.          0x33 - normalna kompresja
  353.          0x34 - dobra kompresja
  354.          0x35 - najlepsza kompresja
  355.  
  356.    4. Wersja RAR'a konieczna do rozpakowania archiwum jest kodowana
  357. w nast⌐pujÑcy sposób: 10 * Gêówna wersja + wersja poboczna.
  358.