[教程]利用Wimfltr或Wimmount驱动,给WinPE增加挂载WIM文件功能
2021-1-24 6987

在很多包含多个WinPE组合的ISO光盘镜像中,我们会发现有这么一个特点:所有的WinPE共享使用同一个后缀为WIM的压缩包作为外置程序。这样的好处显而易见,可以方便维护外置程序、节省ISO镜像文件空间。

下面就来讲讲如何实现在Win10PE中加入挂载WIM映像文件的功能。

前提条件

Win10PE需要支持创建虚拟内存盘功能,可以集成ImDisk,步骤可以参考此帖:https://pecmd.net/thread-107.htm。当然,如果你不想集成的话,使用完整的PECMD也可以(PECMD已内置ImDisk,但需要cabinet.DLL)

在挂载WIM文件之前,你的WinPE必须要准备一个可供使用的临时分区,一般都是利用ImDisk功能去创建了一个临时分区,常见的盘符是B:、Y:等(我不赞成占用A:、B:盘符)。

集成了ImDisk之后,可以使用PECMD的RAMD命令创建一个盘符为Y,大小为5MB,卷标为ImDisk的临时分区:

RAMD ImDisk,L5,FAT,Y:,ImDisk,,1

RAMD的具体用法可以参见下图:

有一点要注意:使用ImDisk方式创建的分区在挂载WIM时需要两级同名目录,读取时只需一级目录。

Wimfltr驱动方式

目前只要是支持挂载WIM文件的WinPE中,基本上都是使用了Wimfltr驱动方式。

如果你使用工具创建出一个Win10PE时,它并不包含Wimfltr驱动,此时就需要我们事先集成Wimfltr驱动了。

Wimfltr驱动完整文件列表:

此处内容隐藏,登录后可见!立即登录  登录后请刷新页面!刷新

Wimmount驱动方式

Windows从V6.1.7000.0版本开始就已经使用Wimmount驱动处理WIM映像文件了。跟Wimfltr方式相比,它可以同步使用系统自带的DISM命令来操作WIM映像文件,但是缺点也很明显,那就是挂载一个WIM文件所需要占用的内存跟WIM解压之后所占用的体积一致。这也是基本上所有WinPE要么使用Wimfltr驱动去挂载WIM文件,要么直接将程序内置到WinPE中的原因。

基本上你看不到有WinPE会使用Wimmount驱动去挂载外置程序,因为太消耗内存了。

由于Wimmount驱动是Win10PE原生特性,所以不需要对WinPE进行改造。

此处内容隐藏,登录后可见!立即登录  登录后请刷新页面!刷新

建议

我们不一定必须使用ImDisk去创建虚拟内存盘,完全可以使用VHD方式。下面看一下PECMD的MOUN命令帮助:

使用下面的命令可以创建一个虚拟内存盘:

此处内容隐藏,登录后可见!立即登录  登录后请刷新页面!刷新

最后给出的建议是:

如果你的WinPE定位是装机维护,同时ISO光盘不会包含很多其他版本的WinPE(例如WinXP PE、Win7PE等),没有必要去使用挂载WIM的方法增加外置程序。

32位WinPE使用32位的程序,64位的WinPE使用64位的程序,还能实现随时移除启动盘的效果。(挂载WIM后将无法移除启动盘,否则已挂载的程序将不可用)

如果确实需要挂载WIM文件,请避免使用wimgapi.dll或DISM。

当你的WIM体积很小,也使用7-Zip直接解压缩你的外置到X盘进行使用。

最后于 2021-11-14 被caocaofff编辑 ,原因:
上传的附件:
  • wimfltr.zip (上传时间:2021-01-24 23:37:37,大小:232.71K,下载次数:97)
  • wimfltr64.zip (上传时间:2021-01-24 23:37:37,大小:431.62K,下载次数:122)
奖励
收藏
点赞
分享
官方QQ群:872611894(群密码:pecmd.net)
最新回复 (20)
  • avatar image

    非常感谢管理员的这篇文章,我真的很想学习创建winpe,只有这个论坛回复和免费下载大。

  • avatar image
    狼人72105 2021-1-29

    加载外置,再PE桌面上创建一个加载的快捷方式 如何双击就阔以 加载外置的工具和驱动 有没有详细的教程 参考一下。。

  • avatar image
    caocaofff 2021-1-29
    楼主   4
    狼人72105 加载外置,再PE桌面上创建一个加载的快捷方式 如何双击就阔以 加载外置的工具和驱动 有没有详细的教程 参考一下。。

    将所有的命令放到一个INI配置文件里,再将它创建为一个快捷方式,直接指向PECMD LOAD XXX.INI

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    cya007 2021-2-5

    好文章,值得好好学习。

  • avatar image
    935254524 2021-3-13

    这样就可以挂载到X盘了是吧

    常学习
  • avatar image
    935254524 2021-3-13

    再问下 一般的PE 都是RAMDISK的 有些不是  是专有一个分区 求解区别

    常学习
  • avatar image
    caocaofff 2021-3-13
    楼主   8
    935254524 这样就可以挂载到X盘了是吧

    不能挂载到X盘,必须挂载到其他分区

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    caocaofff 2021-3-13
    楼主   9
    935254524 再问下 一般的PE 都是RAMDISK的 有些不是 是专有一个分区 求解区别

    有独立分区用来挂载的一般是使用了文章中提到的两种驱动进行挂载。

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    dhwc 2021-7-20

    你好版主,按教程做了一遍,很奇怪,没成功。第一次是把wimfltr64的注册表文件离线导入的,没有创建vhd,pe里我手工运行,提示diskpart遇到错误拒绝访问,看了下x盘不能写入文件,pecmd甚至都不能正确写出日志。第二次不导入注册表,故障同上。请问,加载注册表和注册inf文件的时机有什么要求吗?

     

    win8pe没这么多问题啊

    路过
  • avatar image
    caocaofff 2021-7-20
    楼主   11
    dhwc 你好版主,按教程做了一遍,很奇怪,没成功。第一次是把wimfltr64的注册表文件离线导入的,没有创建vhd,pe里我手工运行,提示diskpart遇到错误拒绝访问,看了下x盘不能写入文件,pecmd ...

    先确认待改造的winpe是否能正常使用diskpart吧,如果不添加任何文件是否都正常?

    导入的注册表文件仅仅是添加服务,如果没手动启动服务不会对winpe有影响。

    看你的描述可能是打包的问题?可以什么都不做重新打包确认一下。

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    dhwc 2021-7-20

    谢谢解答,我来一步步的重做看下

    路过
  • avatar image
    keketoco00 2025-6-11

    您好!如何将 ISO 挂载到特定的驱动器号(例如 H:),然后再卸载?

    Keketoco00
  • avatar image
    caocaofff 2025-6-11
    楼主   14
    keketoco00 您好!如何将 ISO 挂载到特定的驱动器号(例如 H:),然后再卸载?

    挂载:

    imdisk -a -f "C:\example.iso" -m X:

    卸载:

    imdisk -d -m X:

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    keketoco00 2025-6-11

    有没有一种方法不需要在机器上安装 imdisk.exe?

    Keketoco00
  • avatar image
    caocaofff 2025-6-12
    楼主   16
    keketoco00 有没有一种方法不需要在机器上安装 imdisk.exe?

    mountvol “H:” (Mount-DiskImage -ImagePath “D:\xxx.iso” -NoDriveLetter | Get-Volume).UniqueId

    Dismount-DiskImage -ImagePath D:\xxx.iso

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    keketoco00 2025-6-14
    caocaofff mountvol “H:” (Mount-DiskImage -ImagePath “D:\xxx.iso” -NoDriveLetter | Get-Volume).UniqueId Dismou ...

    非常感谢!朋友。

    Keketoco00
  • avatar image
    a1ive 2025-7-13

    学习一下

  • avatar image
    ggyaosai 15天前

    正在做这个

    努力学习,好好子U盘人
  • avatar image
    ggyaosai 11天前

    利用imdisk 挂载其他格式支持iso、vhd、img。可以利用这些做维护盘,让pecmd加载批处理。

    外置到根目录下,任意磁盘。X:PETools\下  

    @echo off

    setlocal enabledelayedexpansion

    chcp 65001 >nul

    title 自动挂载 PETools 镜像

     

    set "num=0"

    set "PECMD=X:\Windows\System32\pecmd.exe"

     

    :: ========== 第一步:记录挂载前的盘符 ==========

    set "old_drives="

    for %%p in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

        if exist "%%p:\" set "old_drives=!old_drives! %%p "

    )

     

    :: ========== 第二步:挂载所有镜像 ==========

    for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

        if exist "%%d:\PETools\" (

            for %%f in ("%%d:\PETools\*.iso" "%%d:\PETools\*.vhd" "%%d:\PETools\*.vhdx" "%%d:\PETools\*.img") do (

                echo 挂载: %%f

                imdisk -a -f "%%f" -m #: -o cd >nul 2>&1

                if errorlevel 1 (

                    echo 失败: %%f

                ) else (

                    set /a num+=1

                )

            )

        )

    )

     

    :: ========== 第三步:等待挂载稳定 ==========

    echo 等待盘符稳定...

    ping -n 4 127.0.0.1 >nul

     

    :: ========== 第四步:找出新盘符并加载配置 ==========

    echo 加载配置文件...

    for %%p in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

        if exist "%%p:\" (

            echo !old_drives! | findstr /i " %%p " >nul

            if errorlevel 1 (

                :: 新盘符,检查是否有 ini 文件再加载

                if exist "%%p:\*.ini" (

                    for %%i in ("%%p:\*.ini") do (

                        echo 加载: %%i

                        "%PECMD%" LOAD "%%i"

                    )

                )

            )

        )

    )

     

    :: ========== 结果输出 ==========

    echo.

    if %num% equ 0 (

        echo 未找到任何镜像文件

    ) else (

        echo 共挂载 %num% 个镜像,配置加载完成

    )

    echo.

    pause >nul

    exit /b

     

    努力学习,好好子U盘人
  • avatar image
    ggyaosai 4天前

    wim格式万能挂载代码。@echo off

    setlocal enabledelayedexpansion

    chcp 65001 >nul

    title RAM盘批量挂载WIM(自动查找PETools + 多盘符)

     

    set "num=0"

    set "PECMD=X:\Windows\System32\pecmd.exe"

    set "EXTRA_MB=150"

     

    :: 记录挂载前已有盘符

    set "old_drives="

    for %%p in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

        if exist "%%p:\" set "old_drives=!old_drives! %%p "

    )

     

    :: 遍历所有盘找 PETools 下的 WIM

    set "found_any="

    for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

        if exist "%%d:\PETools\*.wim" (

            for %%f in ("%%d:\PETools\*.wim") do (

                set "WIM=%%~f"

                set "found_any=1"

                call :process_wim

            )

        )

    )

     

    :: 结果输出

    echo.

    echo ==========================================

    if !num! equ 0 (

        if defined found_any (

            echo 部分 WIM 挂载失败

        ) else (

            echo 未在 PETools 目录找到 WIM 文件

        )

    ) else (

        echo 完成,共挂载 !num! 个 WIM

    )

    echo ==========================================

    echo.

     

    pause >nul

    exit /b

     

    :: ==========================================

    :process_wim

    echo.

    echo ==========================================

    echo 处理 WIM:%WIM%

     

    :: 从 Z 往前找空闲盘符

    set "DRIVE="

    for %%c in (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A) do (

        if not exist "%%c:\" (

            set "DRIVE=%%c:"

            goto drive_ok

        )

    )

    :drive_ok

     

    if not defined DRIVE (

        echo ❌ 无空闲盘符,跳过

        goto :eof

    )

    echo ✅ 分配盘符:%DRIVE%

     

    :: 计算 RAM 盘大小

    for %%s in ("%WIM%") do set "bytes=%%~zs"

    set /a mb=!bytes! / 1048576

    set /a ram=!mb! + !EXTRA_MB!

    set "RAM_SIZE=!ram!M"

    echo 文件大小:!mb! MB → 分配RAM:!RAM_SIZE!

     

    :: 创建 RAM 盘并格式化

    imdisk -a -s !RAM_SIZE! -m %DRIVE% -t vm -p "/fs:ntfs /q /y /v:RAMWIM" >nul 2>&1

    ping -n 3 127.0.0.1 >nul

     

    :: 创建挂载目录

    set "MOUNT_DIR=%DRIVE%tools"

    if not exist "%MOUNT_DIR%" mkdir "%MOUNT_DIR%" >nul 2>&1

     

    :: 挂载 WIM

    echo 挂载 WIM 到 %MOUNT_DIR%...

    dism /mount-wim /wimfile:"%WIM%" /index:1 /mountdir:"%MOUNT_DIR%" /readonly >nul 2>&1

     

    if !errorlevel! neq 0 (

        echo ❌ 挂载失败,清理虚拟盘

        dism /unmount-wim /mountdir:"%MOUNT_DIR%" /discard >nul 2>&1

        imdisk -d -m %DRIVE% >nul 2>&1

        goto :eof

    )

     

    echo ✅ 挂载成功:%MOUNT_DIR%

    set /a num+=1

     

    :: 加载配置

    call :load_config

     

    goto :eof

     

    :: ==========================================

    :load_config

    echo.

    echo ========== 加载配置文件 ==========

     

    if exist "%MOUNT_DIR%\*.ini" (

        for %%i in ("%MOUNT_DIR%\*.ini") do (

            echo 加载配置:%%i

            "%PECMD%" LOAD "%%i"

        )

    )

     

    if exist "%DRIVE%\*.ini" (

        for %%i in ("%DRIVE%\*.ini") do (

            echo 加载配置:%%i

            "%PECMD%" LOAD "%%i"

        )

    )

     

    for %%p in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

        if exist "%%p:\" (

            echo !old_drives! | findstr " %%p " >nul || (

                if exist "%%p:\*.ini" (

                    for %%i in ("%%p:\*.ini") do (

                        echo 加载配置:%%i

                        "%PECMD%" LOAD "%%i"

                    )

                )

            )

        )

    )

     

    goto :eof

    努力学习,好好子U盘人
返回