| この記事の要点 |
|
概要
CAB(Cabinet ファイル、拡張子 .cab)は、Microsoft が Windows 95 時代に策定したアーカイブ・圧縮形式です。当時の Windows インストール CD-ROM では WIN95_02.CAB のような分割キャビネットファイルにシステムファイル一式が格納されており、現代に至るまで Windows OS の内部配布フォーマットとしての中核を担い続けています。
表からは見えにくい形式ですが、実は私たちが日常的に触れている多くの Windows コンポーネントが CAB を介して配信されています。たとえば Windows Update の累積パッケージ(.msu)の内部は CAB ですし、サードパーティのデバイスドライバを INF 経由でインストールする際の本体も CAB アーカイブです。Microsoft Office のセットアップ媒体、Visual C++ ランタイム配布、各種 OS イメージのコンポーネントなどでも広範に使われています。
CAB は単なる「Windows 専用 ZIP」ではなく、コード署名(Authenticode)と ボリューム分割を仕様レベルで備えており、エンタープライズでの信頼配布に耐える設計になっている点が特長です。
内部構造とマジックナンバー
CAB ファイルはマジック「MSCF」で始まる固定ヘッダの後、フォルダ(圧縮単位)情報、ファイルエントリ、データブロックが続く構造です。
| オフセット | 内容 | 値・説明 |
|---|---|---|
| 0-3 | マジックナンバー | 4D 53 43 46("MSCF") |
| 4-7 | Reserved1 | 常に 0 |
| 8-11 | cbCabinet | キャビネット全体のサイズ |
| 16-19 | coffFiles | 最初のファイルエントリのオフセット |
| 24-25 | versionMinor / Major | 通常 1.3 |
| 26-27 | cFolders | 含まれるフォルダ数 |
| 28-29 | cFiles | 含まれるファイル数 |
| 30-31 | Flags | 分割 / Reserve 領域有無 |
圧縮アルゴリズムはフォルダ単位で指定可能で、選択肢は次の 3 種です。
- MSZIP: DEFLATE 互換(ZIP と同じ)。汎用性が高いが圧縮率は中程度
- Quantum: 1990 年代に Microsoft が買収したアルゴリズム。レガシ用途
- LZX: Microsoft 独自の高圧縮アルゴリズム。Windows Update や CHM(Compiled HTML Help)で多用
これらに加えて「無圧縮(Store)」も選択可能。Authenticode 署名は CAB ファイル末尾にデジタル署名ブロックとして付与され、Windows のドライバインストール時に検証されます。
主な用途
- Windows OS インストール媒体: install.wim 内部、Setup.exe が呼び出す各種コンポーネント CAB
- Windows Update:
.msuパッケージ内部、累積更新の差分配信 - デバイスドライバ配布:
.inf+.cabの組み合わせ。Windows Update カタログからの個別ドライバ DL も CAB - サードパーティインストーラ内部: InstallShield, Wise, Advanced Installer などが生成する MSI/EXE の内部
- 古いソフトウェア配布: 1990 年代後半〜2000 年代の CD-ROM ソフトウェア
関連形式との比較
| 形式 | 主用途 | 圧縮率 | 署名対応 | 分割 | OS 親和性 |
|---|---|---|---|---|---|
| CAB | Windows 内部配布 | 中〜高(LZX) | ○ (Authenticode) | ○ | Windows 標準 |
| ZIP | 汎用 | 中 | △(外部署名) | △ | クロス対応 |
| MSI | Windows インストーラ | 内部 CAB 利用 | ○ | × | Windows 標準 |
| WIM | Windows OS イメージ | 高(LZX/XPRESS) | ○ | × | Windows 標準 |
| 7z | 汎用高圧縮 | 非常に高 | × | ○ | クロス対応 |
コマンド・ツール
REM ===== Windows 標準コマンド =====
REM CAB の中身を一覧表示
expand -D driver.cab
REM 単一ファイルを取り出す
expand driver.cab -F:setup.inf C:\temp
REM すべてのファイルを展開
expand driver.cab -F:* C:\temp
REM extract.exe (古い Windows でも利用可)
extract /Y /E driver.cab /L C:\temp
REM ===== CAB の作成 (Windows SDK の makecab) =====
makecab /D CompressionType=LZX /D CompressionMemory=21 mydata.txt mydata.cab
REM ディレクトリ全体を CAB 化 (DDF 定義ファイル経由)
makecab /F directives.ddf
# ===== Linux で CAB を扱う =====
sudo apt install cabextract
# 中身一覧
cabextract -l driver.cab
# 展開
cabextract driver.cab
# 7-Zip でも CAB は読み書き可能
7z l driver.cab
7z x driver.cab -oout/
注意点・落とし穴
- 分割 CAB の取り扱い:
Setup.cab1,Setup.cab2... のように分割されている場合、すべてが同じディレクトリに存在しないと展開できない。ネットワーク経由でダウンロードする際は要注意。 - Authenticode 署名の検証: ドライバ用途では署名なしの CAB は Windows のドライバ署名強制(特に x64)に弾かれる。テスト署名やドライバ署名の理解が必要。
- 古い CAB の脆弱性: CVE-2010-2552(Windows Movie Maker の CAB 解析時バッファオーバーフロー)など、CAB パーサ起因の脆弱性は過去に複数報告されている。未知ソースからの CAB を
expandで展開する際は最新パッチを適用したシステムで実施。 - 長いパス名問題: CAB 内部のファイルパスは Windows の MAX_PATH 制約に当たることがあり、深いディレクトリ配下に展開しようとして失敗するケースがある。
- Quantum/LZX のライセンス: Quantum は Stac Electronics 由来、LZX は元々 Microsoft Network Books 用に開発されたもので、利用は通常 Microsoft ツール経由に限る。サードパーティ実装は
cabextract、libmspackが代表。
関連リンク
- アーカイブ・圧縮形式(親カテゴリ)
- ファイル拡張子とは(概論)
- ZIP(.zip)
- 7z(.7z)
- RAR(.rar)
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15