· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.HEAP —› Структура CAB-файла

Посл.отвђт Сообщенiе


Дата: Янв 22, 2004 15:56:09 · Поправил: Sm_Andrei

Подскажите, пожалуйста, структуру этого архива, можно ссылочку.
Пробывал через google(gg) искать - находил совсем не то.
Поиск: "структура CAB файла", "CAB file structure".
Весь Microsoft(вроде как) облазил, ничего путного не нашёл.
Хотя бы заголовок его знать.

Зараннее большое спасибо!

ЗЫ: ещё хотелось бы узнать его метод упаковки.


Дата: Янв 22, 2004 16:59:19 · Поправил: Xrusty

ИМХО вот полезная инфа..
http://www.alexfedotov.com/articles/launch.asp


Дата: Янв 22, 2004 17:54:40 · Поправил: Dr.Golova

Ну если тебя интересуют только заголовки...
typedef struct sCAB_HEADER {
  tDWORD  Sign;              // file signature 'MSCF' (CAB_SIGNATURE)
  tDWORD  HdrCrc;            // header checksum (0 if not used)
  tDWORD  CabSize;           // cabinet file size
  tDWORD  FoldCrc;           // folders checksum (0 if not used)
  tDWORD  FilesOfs;          // offset of first CAB_ENTRY (file entry)
  tDWORD  FilesCrc;          // files checksum (0 if not used)
  tWORD   Version;           // cabinet version (CAB_VERSION)
  tWORD   FoldNum;           // number of folders
  tWORD   FilesNum;          // number of files
  tWORD   Flags;             // cabinet flags (CAB_FLAG_*)
  tWORD   SetID;             // cabinet set id
  tWORD   CurCabNum;         // zero-based cabinet number
} tCAB_HEADER, *pCAB_HEADER;

typedef struct sCAB_HDR_RES {
  tWORD   HdrRes;            // header reserved size
  tBYTE   FoldRes;           // folders reserved size
  tBYTE   DataRes;           // data reserved size
} tCAB_HDR_RES, *pCAB_HDR_RES;

typedef struct sCAB_FOLDER {
  tDWORD  DataOfs;           // offset of folder data
  tWORD   BlksNum;           // number of 32k solid blocks
  tWORD   Compr;             // compression type (CAB_COMPTYPE_*)
} tCAB_FOLDER, *pCAB_FOLDER;

typedef struct sCAB_ENTRY {
  tDWORD  USize;            // uncompressed file size
  tDWORD  FolderOffs;       // file offset in folder
  tWORD   FolderIdx;        // file control id (CAB_FILE_*)
  tWORD   Date;             // file date stamp, as used by DOS
  tWORD   Time;             // file time stamp, as used by DOS
  tWORD   Attribs;          // file attributes (CAB_ATTRIB_*)
} tCAB_ENTRY, *pCAB_ENTRY;

typedef struct sCAB_BLOCK {
  tDWORD  BlockCrc;         // unpacked block checksumm
  tWORD   PSize;            // packed block data size
  tWORD   USize;            // unpacked block data size
} tCAB_BLOCK, *pCAB_BLOCK;


Дата: Янв 23, 2004 12:18:32

> ЗЫ: ещё хотелось бы узнать его метод упаковки

Вообще CAB - это просто как-бы обертка, так что методов там может быть сколько угодно. Но стандартных - 4 штуки:
1) Store (без сжатия)
2) Defalte (то чем жмет zip)
3) LZX с оптимизирующими фильтрами (то чем жмет ASPack ;-)
4) Quantum (LZ77 + арифметическое кодирование)


Дата: Янв 26, 2004 14:48:51

Xrusty
Dr.Golova

Благодарю за помощь!
Очень интересная информация.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.052