Cabinet Structure

Purpose

Understanding the internal structure of Microsoft Cabinet (CAB) files.

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)

Flags

Flag Bit Value Meaning

0

0x0001

PREV_CABINET: Previous cabinet info present

1

0x0002

NEXT_CABINET: Next cabinet info present

2

0x0004

RESERVE_PRESENT: Reserve area present

CFFOLDER Structure

Fields

Offset Size Field Description

0

4

coffCabStart

Offset of first CFDATA block

4

2

cCFData

Number of CFDATA blocks

6

2

typeCompress

Compression type

Compression Types

Value Name Description

0x0000

NONE

No compression

0x0001

MSZIP

MSZIP compression

0x0002

QUANTUM

Quantum compression

0x0003

LZX

LZX compression

CFFILE Structure

Fields

Offset Size Field Description

0

4

cbFile

Uncompressed file size

4

4

uoffFolderStart

Uncompressed offset in folder

8

2

iFolder

Folder index (or special value)

10

2

date

MS-DOS date

12

2

time

MS-DOS time

14

2

attribs

File attributes

16

?

szName

Null-terminated filename

Special iFolder Values

Value Meaning

0xFFFD

File continues from previous cabinet

0xFFFE

File continues to next cabinet

0xFFFF

File spans previous and next cabinets

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

Bibliography