Skip to content
This repository was archived by the owner on Jun 28, 2026. It is now read-only.

NORMAL-EX/wimlib-kit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wimlib-kit

基于 wimlib 的 Windows 镜像工具:校验、解包、读取 WIM / ESD / SWM 镜像。

wimlib-kit 用 Rust 编写,通过运行时动态加载 libwim-15.dll 封装 wimlib,提供镜像完整性校验、解包/应用、信息读取三大功能,全程带实时进度条(百分比 / 速度 / ETA)。编译产出的命令行程序名为 imgtool

特性

  • 三种格式通吃:WIM、ESD(solid/LZMS 压缩的 WIM)、SWM(分卷,自动合并)。
  • 校验 verify:基于完整性表逐块校验,损坏时以专门退出码报错。
  • 解包/应用 extract:整卷解出到目录,支持单卷或全部卷。
  • 格式转换 convert:ESD↔WIM 互转与重压缩(LZX / LZMS / XPRESS),把全部卷导出到新容器。
  • 制作镜像 capture:把文件系统目录捕获打包成 WIM/ESD。
  • 分卷 / 合并 split / join:把大镜像切成 SWM 多片(FAT32 友好),或合并回 WIM。
  • 优化瘦身 optimize:原地重建 / 重压缩镜像,去碎片、缩小体积。
  • 卷编辑 export / delete:跨镜像导出 / 合并指定卷,或原地删除某卷。
  • 增量补丁 diff / patch:基于 wimlib delta WIM 生成 / 应用 blob 级增量(base + delta 还原完整镜像)。
  • 信息读取 info:卷数、各卷名/描述/版本、压缩方式、各卷大小。
  • 实时进度:解包与校验过程显示进度条 + 速度 + ETA。
  • 完整 FFI 绑定:运行时加载 DLL,绑定 wimlib 全部 72 个导出函数;DLL 缺失时给出友好提示而非崩溃。

支持的格式

格式 说明
WIM 标准 Windows 映像
ESD solid/LZMS 压缩的 WIM(如微软官方下载),与 WIM 通路一致
SWM 分卷 WIM,传第一片即可,自动 glob 引用同目录其余分卷

构建

目标平台 Windows x86_64x86_64-pc-windows-msvc):

cargo build --release --target x86_64-pc-windows-msvc

build.rs 会自动把 vendor/libwim-15.dll 复制到可执行文件同目录。该 DLL 为官方 1.14.4 自包含构建,仅依赖 5 个 Windows 系统 DLL,无需 VC++ 运行库。

用法

子命令 作用
info 读取镜像信息(卷数 / 卷名 / 版本 / 压缩 / 大小)
verify 校验完整性(损坏时退出码 2)
extract 解包 / 应用镜像(WIM / ESD / SWM)
convert ESD↔WIM 转换 / 重压缩
capture 把目录制作成镜像
split / join 分卷 / 合并
optimize 重建 / 重压缩瘦身
export / delete 卷级导出合并 / 删除
diff / patch blob 级增量补丁(base + delta 还原)
# 读取镜像信息(卷数 / 卷名 / 版本 / 压缩方式 / 大小)
imgtool info <镜像>

# 校验完整性(带进度条;损坏时退出码非 0)
imgtool verify <镜像>

# 解包指定卷到目录(带进度条)
imgtool extract <镜像> --index <N|all> --dest <目录>

# ESD↔WIM 转换 / 重压缩(带进度条)
imgtool convert <镜像> --dest <输出> [--to wim|esd] [--compress lzx|lzms|xpress|none]

# 制作镜像:把目录打包成 WIM/ESD(带进度条)
imgtool capture <源目录> --dest <输出> [--name <卷名>] [--to wim|esd] [--compress lzx|lzms|xpress|none]

# 分卷:把镜像切成 SWM 多片(带进度条)
imgtool split <镜像> --dest <out.swm> --size <每片MiB>

# 合并:把 SWM 分卷合并回 WIM(传任一分卷,自动找齐)
imgtool join <任一.swm> --dest <输出.wim>

# 优化:原地重建 / 重压缩瘦身(带进度条)
imgtool optimize <镜像> [--recompress]

# 导出:把指定卷导出到目标 WIM(不存在则新建,存在则追加合并)
imgtool export <镜像> --index <N|all> --dest <目标.wim>

# 删卷:原地删除指定卷
imgtool delete <镜像> --index <N>

# 增量:生成 base→new 的 delta WIM(blob 级增量)
imgtool diff --base <base.wim> --new <new.wim> --dest <delta.wim>

# 打补丁:base + delta 还原完整镜像
imgtool patch --base <base.wim> --patch <delta.wim> --dest <out.wim>

示例:

imgtool info install.wim
imgtool verify install.esd
imgtool extract install.wim --index 1 --dest C:\out
imgtool extract install.swm --dest C:\out      # SWM 传第一片,自动合并分卷
imgtool convert install.esd --dest install.wim          # ESD → WIM(默认 LZX)
imgtool convert install.wim --dest install.esd --to esd # WIM → ESD(LZMS solid)
imgtool capture C:\MyApp --dest MyApp.wim --name "MyApp"  # 目录 → WIM
imgtool split install.wim --dest part.swm --size 3800   # 切成 ≤3800MiB/片(FAT32 友好)
imgtool join part.swm --dest install.wim                # 合并回 WIM
imgtool optimize install.wim --recompress               # 原地重压缩瘦身
imgtool export src.wim --index 2 --dest merged.wim      # 把 src 第 2 卷并入 merged.wim
imgtool delete install.wim --index 3                    # 删掉第 3 卷
imgtool diff --base v1.wim --new v2.wim --dest v2.delta.wim    # 生成增量
imgtool patch --base v1.wim --patch v2.delta.wim --dest v2.wim # 还原 v2

退出码:成功 0,镜像损坏 2,其它错误 1

项目结构

src/
  ffi/         运行时加载 DLL、#[repr(C)] 类型与全部 72 个函数绑定
  wim.rs       安全封装层(RAII 句柄 + open/info/verify/extract)
  error.rs     错误类型与 wimlib 错误码映射
  progress.rs  进度 / 速度 / ETA(indicatif)
  cli.rs       clap 子命令:info / verify / extract
vendor/        libwim-15.dll、libwim.lib、wimlib.h
fixtures/      小体积测试夹具

测试

cargo test --target x86_64-pc-windows-msvc

包含单元测试(字节格式化、宽字符转换、SWM glob 推断、结构体内存布局回归等)与端到端集成测试(用 fixtures/ 跑 info/verify/extract,覆盖 WIM/ESD/SWM 及损坏用例)。

许可证

LGPL-3.0-or-later(与 wimlib 一致)。libwim-15.dll 为不含 NTFS-3G 的官方构建,动态链接对闭源/商用友好;分发时保留 LGPLv3 许可证文本并允许用户替换该 DLL。

About

Rust wimlib wrapper CLI: WIM/ESD/SWM info/verify/extract

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages