tools: fsreg

tst: passthrough: support passing passthrough directory using -u
This commit is contained in:
Bill Zissimopoulos 2017-01-27 13:38:45 -08:00
parent b5bf84b618
commit e4f0406c4f
2 changed files with 62 additions and 0 deletions

41
tools/fsreg.bat Normal file
View File

@ -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

View File

@ -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;