diff --git a/tools/fsreg.bat b/tools/fsreg.bat new file mode 100644 index 00000000..afb875eb --- /dev/null +++ b/tools/fsreg.bat @@ -0,0 +1,41 @@ +@echo off + +setlocal +setlocal EnableDelayedExpansion + +set RegKey=HKLM\SYSTEM\CurrentControlSet\Services\WinFsp.Launcher\Services + +if not X%1==X-u ( + set unreg=0 + + if not X%1==X set fsname=%1 + if not X%2==X set fsexec="%~f2" + if not X%3==X set fscmdl=%3 + if not X%4==X set fssecu=%4 + + if X!fscmdl!==X goto usage + if not exist !fsexec! goto notfound + + reg add !RegKey!\!fsname! /v Executable /t REG_SZ /d !fsexec! /f + reg add !RegKey!\!fsname! /v CommandLine /t REG_SZ /d !fscmdl! /f + if not X!fssecu!==X reg add !RegKey!\!fsname! /v Security /t REG_SZ /d !fssecu! /f +) else ( + set unreg=1 + + if not X%2==X set fsname=%2 + + if X!fsname!==X goto usage + + reg delete !RegKey!\!fsname! /f +) + +exit /b 0 + +:notfound +echo executable !fsexec! not found >&2 +exit /b 2 + +:usage +echo usage: fsreg NAME EXECUTABLE COMMANDLINE [SECURITY] >&2 +echo usage: fsreg -u NAME >&2 +exit /b 2 diff --git a/tst/passthrough/passthrough.c b/tst/passthrough/passthrough.c index c785a24e..03b22a90 100644 --- a/tst/passthrough/passthrough.c +++ b/tst/passthrough/passthrough.c @@ -745,6 +745,7 @@ static NTSTATUS SvcStart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv) PWSTR PassThrough = 0; PWSTR MountPoint = 0; HANDLE DebugLogHandle = INVALID_HANDLE_VALUE; + WCHAR PassThroughBuf[MAX_PATH]; PTFS *Ptfs = 0; NTSTATUS Result; @@ -779,6 +780,26 @@ static NTSTATUS SvcStart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv) if (arge > argp) goto usage; + if (0 == PassThrough && 0 != VolumePrefix) + { + PWSTR P; + + P = wcschr(VolumePrefix, L'\\'); + if (0 != P && L'\\' != P[1]) + { + P = wcschr(P + 1, L'\\'); + if (0 != P && L'$' == P[2] && + ( + (L'A' <= P[1] && P[1] <= L'Z') || + (L'a' <= P[1] && P[1] <= L'z') + )) + { + StringCbPrintf(PassThroughBuf, sizeof PassThroughBuf, L"%c:%s", P[1], P + 3); + PassThrough = PassThroughBuf; + } + } + } + if (0 == PassThrough || 0 == MountPoint) goto usage;