CAB(Cabinet)文件是一种Windows操作系统中常见的压缩文件格式,通常用于打包和压缩一组相关文件,以便于分发和安装。以下是关于CAB文件的一些基本信息:
CAB(Cabinet File)完整解构
文件标识:魔数
MSCF(0x4D534346),微软专有无损归档压缩格式,规范文档:[MS‑CAB]Microsoft ...。 定位:Windows 系统原生部署容器;用于系统更新、驱动包、WSUS 补丁、DISM、PrintBRM、MSI 内部资源、FOD 按需功能包。 核心底层 DLL:cabinet.dll,提供两套原生 API:
- FCI(File Compression Interface):创建 / 打包 CAB
- FDI(File Decompression Interface):解析 / 解压 CAB
边界区分 | 组件 | 角色 | |---|---| |
cabinet.dll| 底层核心;FCI/FDI API;压缩、解压、CRC 校验;系统所有 CAB 工具都依赖它 | |makecab.exe| 打包工具,调用 FCI 接口;支持 DDF 指令文件 | |expand.exe| 解压工具,调用 FDI 接口;支持 CAB、老式下划线压缩文件(ex_)| |iexpress.exe| 向导外壳,调用 makecab 生成 CAB,封装自解压 EXE| | 第三方 7‑Zip/winrar | 独立解析 MS‑CAB 格式,不调用 cabinet.dll|
一、底层原理 & 内部五大模块
模块 1:CAB 二进制文件物理结构(MS‑CAB 规范)Microsoft ...
CFHEADER(文件头,魔数MSCF)
├─版本、总大小、文件夹数量、文件数量、签名标记、多卷标记
└─可选Authenticode数字签名块
CFFOLDER数组(压缩文件夹描述,**压缩单元,不是磁盘目录**)
├─每个CFFOLDER:压缩算法、数据块计数;一个文件夹内所有文件作为**solid固实压缩流**
CFFILE数组(归档内每个文件元数据)
├─原始大小、压缩偏移、所属folder索引、文件属性、文件名、CRC32
CFDATA数据块(真实压缩二进制流)
└─每个块:块大小、CRC校验、压缩字节流
关键特性:
- Folder 是压缩单元,不是磁盘目录:同一 folder 内多个文件合并为一个连续压缩流,提升压缩率。
- 支持多卷跨盘 CAB:大归档拆分为 xxx1.cab、xxx2.cab,文件可以跨 cab 分片存储Microsoft ...。
- 每个 CFDATA 块携带 CRC32,解压时做完整性校验。
- 支持 Authenticode 嵌入签名,驱动 / 更新包可做完整性校验。
模块 2:压缩算法模块(cabinet.dll 内部实现)
| 算法 | 说明 | 场景 |
|---|---|---|
| MSZIP | Deflate 变体;速度快、兼容性最好;Win3.1‑全部系统通用 | 普通安装包、旧版介质 |
| LZX | LZ77+Huffman;高压缩比;PE/DLL/INF 系统文件首选;Windows Update 补丁默认 | WSUS、MSU、FOD、驱动包 |
| Quantum | 旧统计压缩;现已极少使用 | 历史遗留安装介质 |
一个 CAB 内部不同 Folder 可以使用不同压缩算法。
模块 3:FCI 打包模块(File Compression Interface,cabinet.dll)
导出核心函数: FCICreate()、FCIAddFile()、FCIFlushCabinet()
- 接收源文件列表、DDF 指令配置;
- 按 folder 分组,执行压缩;切割 CFDATA 块;计算 CRC;
- 生成 CFHEADER/CFFOLDER/CFFILE 元数据;输出.cab 二进制;
- 支持多卷拆分、回调报告进度、错误回调。
makecab.exe本质就是 FCI 的命令行外壳,解析.ddf(Diamond Directive File)指令文件调用这套 API。
模块 4:FDI 解析解压模块(File Decompression Interface,cabinet.dll)
导出核心函数: FDICreate()、FDICopy()、FDIDestroy()
- 读取 CAB 头部,校验 MSCF 魔数;解析 CFFOLDER/CFFILE 索引;
- 按需读取 CFDATA 压缩块,校验 CRC;解压输出原始文件;
- 支持多卷 CAB 自动接续;回调上报文件、进度、错误。
expand.exe、DISM、PrintBRM、WU/WSUS 客户端全部调用 FDI 接口做 CAB 解压。
模块 5:签名与安全校验模块
- CAB 文件可以嵌入 Authenticode 签名;签名信息存放在 CFHEADER 保留区域;
- cabinet.dll 本身不做签名验证;签名校验由
ci.dll(Code Integrity)完成; - Secure Boot 环境下,驱动 CAB 必须合法签名,否则拒绝加载。
重要:cabinet.dll 只关心归档格式、压缩、CRC 完整性;数字签名校验属于上层安全组件职责。
二、依赖文件清单
核心系统二进制
| 文件 | 路径 | 说明 |
|---|---|---|
cabinet.dll |
C:\Windows\System32\cabinet.dll |
CAB 底层 FCI/FDI 核心;打包、解压、CRC 校验;所有系统工具强依赖 |
makecab.exe |
System32 | CAB 打包命令行;调用 FCI;支持 DDF 脚本 |
expand.exe |
System32 | CAB 解压命令行;调用 FDI;WinRE / 恢复环境可用 |
iexpress.exe |
System32 | 向导 UI,调用 makecab,生成自解压 exe |
配套上层组件(调用 cabinet.dll)
- DISM:离线镜像服务,导入 / 导出
.cab更新包; - PrintBRM(printbrmengine.dll):打印机迁移,把配置元数据打包为
.printerExport(本质 CAB); - Windows Update / WSUS:客户端 wuauserv,服务端解析补丁 CAB;
- MSI Windows Installer:MSI 内部嵌入 CAB 资源;
- PnP /pnputil:驱动
.cab包安装; - wextract.exe:IExpress 自解压包解压载体。
相关文件格式
.ddf:makecab 指令脚本,定义打包规则、压缩级别、文件列表;.printerExport:PrintBRM 输出,后缀伪装,内部就是 MS‑CAB;.msu:Windows 更新包,外壳包装,内部包含 CAB 补丁。
三、完整逻辑调用链路
链路 1:makecab.exe 打包生成 CAB
makecab.exe /f config.ddf
↓解析DDF指令文件
↓加载 cabinet.dll → FCI API(FCICreate,FCIAddFile)
读取源文件;按Folder分组;MSZIP/LZX压缩;生成CFDATA块;计算CRC32
构建CFHEADER、CFFOLDER、CFFILE元数据
输出 xxx.cab
链路 2:expand.exe 解压 CAB
expand.exe -F:* source.cab D:\out
↓加载 cabinet.dll → FDI API(FDICreate,FDICopy)
校验MSCF魔数;解析CAB索引表
读取CFDATA压缩块;CRC校验;解压;输出原始文件到磁盘
链路 3:PrintBRM 使用 CAB 容器(printerExport)
printbrm.exe -B
printbrmengine.dll生成XML元数据
调用 cabinet.dll FCI接口打包为CAB;输出 xxx.printerExport
链路 4:DISM 安装 cab 更新包
dism /online /add‑package /packagepath:xxx.cab
dism.exe加载 cabinet.dll(FDI)解压cab内部有效负载
调用系统更新组件执行安装
关键点:cabinet.dll 只负责归档压缩解压;业务逻辑(更新安装、打印机迁移)全部在上层应用,不在 cabinet.dll 内部。
四、配套链:上下游生态
- Windows 更新链路:WSUS 下发补丁 CAB → wuauserv 调用 FDI 解压 → 系统组件安装。
- 驱动分发链路:WDK 生成驱动 CAB → pnputil/pnp 引擎调用 FDI 解压 → INF 安装。
- 部署镜像链路:ADK、DISM、WinPE,离线导入导出 CAB 功能包。
- 自解压包链路:iexpress 调用 makecab 生成 CAB,再封装 wextract.exe 外壳,生成 EXE 自解压。
五、关键限制与坑点(MS‑CAB 规范约束)Microsoft ...
- 单文件未压缩上限:
0x7FFF8000字节(约 2GB);超大文件不适合 CAB。 - 单 CAB 最大压缩文件大小:
0x7FFFFFFF。 - Folder 是固实压缩单元:修改归档内部单个文件,无法局部更新,必须重新生成整个 CAB;CAB 格式不支持增量修改。
- CRC 只校验压缩块完整性;CRC 不防篡改;防篡改需要上层 Authenticode 签名。
- 多卷 CAB 必须按序号完整,缺失任意分片,无法解压完整文件。
- 第三方工具修改 CAB,可能破坏 FDI 接口兼容性;微软系统组件优先使用
cabinet.dll原生 FDI/FCI。
六、演进时间线
- Windows 3.1:引入 CAB 格式,用于软盘介质安装;
- Windows95:大规模使用;FCI/FCI 接口固化为 SDK 标准;
- Windows 2000:LZX 高压缩算法正式落地,成为系统包默认;
- Windows XP‑Server2012R2:
cabinet.dll接口稳定;MSI、WU 大量使用; - Windows10/11 / Server2025:底层
cabinet.dll二进制继续兼容 MS‑CAB;新增 FOD 按需功能包大量使用 cab;WIM/ESD 作为镜像层,但 CAB 仍然是补丁、驱动的标准分发容器。
CAB(Cabinet)文件是一种Windows操作系统中常见的压缩文件格式,通常用于打包和压缩一组相关文件,以便于分发和安装。以下是关于CAB文件的一些基本信息:
-
用途:
- 安装程序:CAB文件经常用于安装程序中,尤其是在Windows系统安装过程中。
- 系统文件:一些系统文件在Windows中以CAB文件的形式存储,以便在需要时进行恢复或更新。
-
特点:
- 压缩格式:CAB文件使用压缩算法(通常是MSZIP或LZX)来减小文件大小,从而节省存储空间和网络带宽。
- 文件结构:CAB文件可以包含多个文件和目录结构,这使得它们非常适合用于打包和分发多个相关文件。
-
创建和提取:
- 创建:可以使用Windows的工具(如makecab.exe)来创建CAB文件,也可以使用一些第三方工具。
- 提取:通常可以通过Windows自带的工具(如expand.exe)或文件压缩软件(如7-Zip)来提取CAB文件中的内容。
-
使用场景:
- 软件分发:软件开发者经常使用CAB文件来打包和分发他们的应用程序或更新。
- 系统维护:Windows系统本身也使用CAB文件来存储和分发一些系统文件,用于修复和更新操作系统。
CAB文件是一种在Windows环境中用于打包和压缩文件的常见格式,特别适用于软件分发和系统维护。
CAB文件的发展经历了几个关键阶段,从最初的简单压缩文件格式到今天在Windows操作系统中广泛应用的多功能文件格式:
-
起源阶段:
- 早期压缩格式:CAB文件最早出现在微软操作系统中,用于将多个文件和资源打包成一个单一的压缩文件。这种格式旨在通过压缩来节省存储空间和加快文件传输速度。
-
Windows 9x和早期Windows版本:
- 系统文件存储:随着Windows 9x系列和早期Windows版本的推出,微软开始在安装媒体中使用CAB文件来存储操作系统的核心文件。这些文件用于安装、恢复和更新操作系统。
-
Windows NT和后续版本:
- 安装程序和更新:随着Windows NT及其后续版本(如Windows 2000、XP、Vista、7等)的推出,CAB文件作为安装程序和更新的主要分发格式得到了进一步发展和应用。微软和第三方开发者利用CAB文件来打包软件安装程序、驱动程序、系统更新和补丁,以便用户可以快速、自动化地进行安装和更新操作。
-
网络优化和数据管理:
- 带宽优化:随着网络传输技术的进步,CAB文件继续作为一种带宽优化的工具,通过高效的压缩算法减少文件大小,从而节省网络带宽和传输时间。
- 数据备份和归档:某些情况下,CAB文件被用于数据备份和归档,特别是在需要将大量文件打包成单一文件以节省存储空间或简化管理的情况下。
-
开发工具和标准化:
- 自定义安装和资源包:开发人员可以利用CAB文件创建自定义的安装程序和资源包,以实现软件开发、系统管理和企业级部署中的自动化和标准化。
在每个阶段,CAB文件都在Windows平台的软件分发、系统管理和数据管理中发挥了重要作用,成为了Windows操作系统生态系统中不可或缺的一部分。
CAB文件的底层原理涉及到它的格式和压缩技术。以下是关于CAB文件底层原理的基本解释:
-
文件结构:
- CAB文件是按照一定的文件结构组织的。它通常由多个部分组成,包括文件头、目录信息、文件数据块和压缩数据等。
-
文件头:
- CAB文件的开头包含一个文件头部分,其中包含了关于文件本身的元数据信息,如版本号、压缩算法类型等。
-
目录信息:
- CAB文件的主要部分是目录信息(Directory Information),它记录了CAB文件中包含的所有文件的详细信息。这些信息包括每个文件的名称、大小、位置等。目录信息使得在不解压整个文件的情况下就能定位和访问特定文件成为可能。
-
文件数据块:
- CAB文件中的每个文件通常被划分为多个数据块(Data Block),这些数据块包含文件的实际内容。数据块可以被按需读取和解压缩,以减少内存和处理器的负担。
-
压缩技术:
- CAB文件使用不同的压缩算法来减小文件大小。Windows操作系统通常使用的主要算法是MSZIP(Deflate算法的变种)和LZX(一种更高效的算法)。这些算法通过消除文件中的重复和冗余信息来达到压缩的效果。
-
创建和提取:
- 创建CAB文件通常需要使用专门的工具,例如Windows平台上的makecab.exe。
- 提取CAB文件的内容可以使用Windows自带的expand.exe工具或者其他支持CAB格式的文件解压软件,如7-Zip。
CAB文件利用目录结构、数据块和压缩算法来组织和存储文件,使得它们在分发和安装软件时更加高效和方便。
CAB文件的架构可以从几个方面来理解,包括其内部结构和用途:
-
内部结构:
- 文件头(Header):CAB文件的开头包含一个文件头部分,通常包括CAB文件的标识符、版本信息、压缩算法类型等元数据。
- 目录信息(Directory Information):这部分记录了CAB文件中包含的所有文件的详细信息,包括每个文件的名称、大小、属性、偏移量等。目录信息使得能够快速定位和访问CAB文件中的特定文件。
- 数据区域:CAB文件中的实际数据存储在数据区域中,通常按照数据块(Data Block)的方式组织。每个数据块包含一定数量的压缩数据或文件内容。
-
压缩算法:
- CAB文件使用不同的压缩算法来减小文件大小。常见的算法包括MSZIP(Deflate的一种变种)和LZX(一种高效的压缩算法)。这些算法在保证压缩率的同时,也需要考虑解压的效率和速度。
-
用途:
- 软件分发:CAB文件经常用于将软件或补丁打包和分发给用户。在Windows平台上,CAB文件可以用于自动化安装程序和更新管理。
- 系统文件存储:Windows操作系统本身也使用CAB文件来存储一些系统文件,以便在需要时进行恢复或更新。
-
创建和提取工具:
- 创建工具:Windows平台上提供了makecab.exe工具,用于创建CAB文件。这个工具允许开发人员指定要打包的文件和压缩选项。
- 提取工具:Windows自带的expand.exe工具可以用于解压CAB文件中的内容。此外,许多第三方文件解压软件(如7-Zip)也支持CAB格式。
CAB文件的架构设计旨在提供高效的文件打包、压缩和分发机制,适用于软件安装和系统维护的多种场景。
CAB文件主要根据其功能可以分为几个主要分类,这些分类主要取决于其在Windows系统和软件开发中的具体用途:
-
软件安装和分发:
- 安装程序:CAB文件经常用于打包软件安装程序和相关的资源文件。通过CAB文件,可以将软件的安装文件和配置信息有效地组织和分发给用户,以便进行自动化安装。
- 更新和补丁:Windows操作系统和许多应用程序使用CAB文件来分发更新和补丁。这些文件通常包含了修复和增强功能的新版本文件,以便在需要时进行快速更新。
-
系统文件管理:
- 系统文件存储:Windows操作系统本身使用CAB文件来存储一些核心系统文件。这些文件可以用于系统恢复、修复或更新操作,确保系统的稳定性和安全性。
- 驱动程序安装:一些硬件设备的驱动程序也可以通过CAB文件进行打包和安装,简化驱动程序的部署和管理过程。
-
网络传输优化:
- CAB文件可以通过压缩算法有效地减少文件的大小,从而在网络传输过程中减少带宽消耗和传输时间。这对于通过网络分发大型软件安装文件或更新非常有利。
-
数据备份和归档:
- 在某些情况下,CAB文件也可用于数据备份和归档。通过将相关文件压缩成CAB格式,可以节省存储空间并简化文件管理。
-
开发工具支持:
- 开发人员和系统管理员可以利用CAB文件来创建自定义的安装程序和资源包,以便在软件开发和系统管理中实现自动化和标准化。
CAB文件由于其能够有效地组织、压缩和分发文件的能力,在Windows平台的软件开发、系统管理和更新等方面具有广泛的应用价值。
CAB文件在Windows平台上有多种应用场景,主要集中在以下几个方面:
-
软件安装和更新:
- 自动化安装程序:CAB文件可以用于打包和分发软件的安装程序和相关资源。通过CAB文件,开发人员可以将软件打包成一个单独的安装文件,便于用户快速、自动化地安装软件。
- 更新和补丁分发:Windows操作系统和许多应用程序使用CAB文件来分发更新和补丁。这些文件包含了新版本文件或修复程序,帮助用户更新其系统和应用程序,修复漏洞或增加新功能。
-
系统文件管理:
- 系统文件存储:Windows本身使用CAB文件来存储一些核心系统文件,用于系统恢复、修复或更新操作。这些文件通常位于Windows安装媒体或安装源中,确保系统的稳定性和安全性。
- 驱动程序安装:某些硬件设备的驱动程序可以通过CAB文件进行打包和安装,简化驱动程序的部署和管理过程。
-
网络传输优化:
- 带宽优化:CAB文件可以通过有效的压缩算法减少文件的大小,从而在网络传输过程中节省带宽消耗和传输时间。这对于通过网络分发大型软件安装文件或更新非常有利。
-
数据备份和归档:
- 数据备份:在某些情况下,CAB文件可用于数据备份和归档。通过将相关文件压缩成CAB格式,可以节省存储空间并简化文件管理。
-
开发工具支持:
- 自定义安装程序和资源包:开发人员可以利用CAB文件创建自定义的安装程序和资源包,以便在软件开发和系统管理中实现自动化和标准化。
CAB文件由于其能够有效地组织、压缩和分发文件的能力,在Windows平台的软件开发、系统管理和更新等方面具有广泛的应用价值。

浙公网安备 33010602011771号