diff --git a/tools/winfsp-winpe.bat b/tools/winfsp-winpe.bat new file mode 100644 index 00000000..bf62c3d9 --- /dev/null +++ b/tools/winfsp-winpe.bat @@ -0,0 +1,60 @@ +@echo off + +setlocal +setlocal EnableDelayedExpansion + +if NOT [%1]==[] set Arch=%1 +if NOT [%2]==[] set Mount=%2 +if NOT [%3]==[] set Image=%3 +if [!Mount!]==[] (echo usage: winfsp-winpe Arch Mount [Image] >&2 & goto fail) + +set SkipDism=0 +if [!Image!]==[] set SkipDism=1 + +set RegKey="HKLM\SOFTWARE\WinFsp" +set RegVal="InstallDir" +reg query !RegKey! /v !RegVal! /reg:32 >nul 2>&1 +if !ERRORLEVEL! equ 0 ( + for /f "tokens=2,*" %%i in ('reg query !RegKey! /v !RegVal! /reg:32 ^| findstr !RegVal!') do ( + set InstallDir=%%j + ) +) +if not exist "!InstallDir!" (echo cannot find WinFsp installation >&2 & goto fail) + +if not exist !Mount! (echo cannot find mount directory !Mount! >&2 & goto fail) +if !SkipDism! equ 0 ( + if not exist !Image! (echo cannot find image file !Image! >&2 & goto fail) +) + +if !SkipDism! equ 0 ( + echo Dism /Mount-Image /ImageFile:!Image! /Index:1 /MountDir:!Mount! + Dism /Mount-Image /ImageFile:!Image! /Index:1 /MountDir:!Mount! + if !ERRORLEVEL! neq 0 goto fail +) + +echo copy "!InstallDir!"\bin\winfsp-!Arch!.dll !Mount!\Windows\System32 +copy "!InstallDir!"\bin\winfsp-!Arch!.dll !Mount!\Windows\System32 >nul +if !ERRORLEVEL! neq 0 goto fail + +echo copy "!InstallDir!"\bin\winfsp-!Arch!.sys !Mount!\Windows\System32 +copy "!InstallDir!"\bin\winfsp-!Arch!.sys !Mount!\Windows\System32 >nul +if !ERRORLEVEL! neq 0 goto fail + +rem echo copy "!InstallDir!"\bin\memfs-!Arch!.exe !Mount!\Windows\System32 +rem copy "!InstallDir!"\bin\memfs-!Arch!.exe !Mount!\Windows\System32 >nul +rem if !ERRORLEVEL! neq 0 goto fail + +echo Creating !Mount!\Windows\System32\startnet.cmd +echo regsvr32 /s winfsp-x64.dll > !Mount!\Windows\System32\startnet.cmd +echo wpeinit >> !Mount!\Windows\System32\startnet.cmd + +if !SkipDism! equ 0 ( + echo Dism /Unmount-Image /MountDir:!Mount! /Commit + Dism /Unmount-Image /MountDir:!Mount! /Commit + if !ERRORLEVEL! neq 0 goto fail +) + +exit /b 0 + +:fail +exit /b 1