File Layout
CAB File Structure:
┌────────────────────────────────────────┐
│ CFHEADER (Cabinet Header) │ 36 bytes minimum
├────────────────────────────────────────┤
│ Reserve Area (Optional) │ Variable size
├────────────────────────────────────────┤
│ CFFOLDER Entries (Folder Headers) │ 8 bytes × folder count
├────────────────────────────────────────┤
│ CFFILE Entries (File Headers) │ Variable × file count
├────────────────────────────────────────┤
│ Compressed Data Blocks │ Variable
│ ┌────────────────────────────┐ │
│ │ CFDATA (per block) │ │
│ │ - Checksum │ │
│ │ - Compressed size │ │
│ │ - Uncompressed size │ │
│ │ - Compressed data │ │
│ └────────────────────────────┘ │
└────────────────────────────────────────┘CFHEADER Structure
Fields
| Offset | Size | Field | Description |
|---|---|---|---|
0 | 4 | signature | 'MSCF' (0x4D534346) |
4 | 4 | reserved1 | Must be 0 |
8 | 4 | cbCabinet | Cabinet file size in bytes |
12 | 4 | reserved2 | Must be 0 |
16 | 4 | coffFiles | Offset of first CFFILE entry |
20 | 4 | reserved3 | Must be 0 |
24 | 1 | versionMinor | File format minor version |
25 | 1 | versionMajor | File format major version |
26 | 2 | cFolders | Number of CFFOLDER entries |
28 | 2 | cFiles | Number of CFFILE entries |
30 | 2 | flags | Option flags |
32 | 2 | setID | Cabinet set ID |
34 | 2 | iCabinet | Cabinet number in set (0-based) |
CFFOLDER Structure
CFFILE Structure
CFDATA Structure
| Offset | Size | Field | Description |
|---|---|---|---|
0 | 4 | csum | Checksum (optional) |
4 | 2 | cbData | Compressed data size |
6 | 2 | cbUncomp | Uncompressed data size |
8 | ? | ab | Compressed data |