sys: FspFsvolQueryFsAttributeInformation: allow file system to fully specify file system name

tst: memfs: add -F FileSystemName option
This commit is contained in:
Bill Zissimopoulos 2016-12-15 14:26:36 -08:00
parent b55c20b393
commit 1e03c1a465
4 changed files with 26 additions and 9 deletions

View File

@ -98,16 +98,22 @@ static NTSTATUS FspFsvolQueryFsAttributeInformation(
RtlInitUnicodeString(&FileSystemName, FsvolDeviceExtension->VolumeParams.FileSystemName); RtlInitUnicodeString(&FileSystemName, FsvolDeviceExtension->VolumeParams.FileSystemName);
if (0 == FileSystemName.Length ||
(L'-' == FileSystemName.Buffer[0] ||
L'/' == FileSystemName.Buffer[0] ||
L'\\' == FileSystemName.Buffer[0]))
{
CopyLength = sizeof L"" DRIVER_NAME - sizeof(WCHAR); CopyLength = sizeof L"" DRIVER_NAME - sizeof(WCHAR);
RtlCopyMemory(FileSystemNameBuf, L"" DRIVER_NAME, CopyLength); RtlCopyMemory(FileSystemNameBuf, L"" DRIVER_NAME, CopyLength);
if (0 != FileSystemName.Length)
{
FileSystemNameBuf[CopyLength / sizeof(WCHAR)] = L'-';
CopyLength += sizeof(WCHAR);
RtlCopyMemory(FileSystemNameBuf + CopyLength / sizeof(WCHAR), FileSystemName.Buffer, RtlCopyMemory(FileSystemNameBuf + CopyLength / sizeof(WCHAR), FileSystemName.Buffer,
FileSystemName.Length); FileSystemName.Length);
CopyLength += FileSystemName.Length; CopyLength += FileSystemName.Length;
} }
else
{
CopyLength = FileSystemName.Length;
RtlCopyMemory(FileSystemNameBuf, FileSystemName.Buffer, CopyLength);
}
Info->FileSystemNameLength = CopyLength; Info->FileSystemNameLength = CopyLength;
if (Buffer + CopyLength > BufferEnd) if (Buffer + CopyLength > BufferEnd)

View File

@ -44,6 +44,7 @@ NTSTATUS SvcStart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv)
ULONG FileInfoTimeout = INFINITE; ULONG FileInfoTimeout = INFINITE;
ULONG MaxFileNodes = 1024; ULONG MaxFileNodes = 1024;
ULONG MaxFileSize = 16 * 1024 * 1024; ULONG MaxFileSize = 16 * 1024 * 1024;
PWSTR FileSystemName = 0;
PWSTR MountPoint = 0; PWSTR MountPoint = 0;
PWSTR VolumePrefix = 0; PWSTR VolumePrefix = 0;
PWSTR RootSddl = 0; PWSTR RootSddl = 0;
@ -65,6 +66,9 @@ NTSTATUS SvcStart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv)
case L'D': case L'D':
argtos(DebugLogFile); argtos(DebugLogFile);
break; break;
case L'F':
argtos(FileSystemName);
break;
case L'i': case L'i':
CaseInsensitiveFlags = MemfsCaseInsensitive; CaseInsensitiveFlags = MemfsCaseInsensitive;
break; break;
@ -121,11 +125,12 @@ NTSTATUS SvcStart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv)
FspDebugLogSetHandle(DebugLogHandle); FspDebugLogSetHandle(DebugLogHandle);
} }
Result = MemfsCreate( Result = MemfsCreateFunnel(
CaseInsensitiveFlags | Flags, CaseInsensitiveFlags | Flags,
FileInfoTimeout, FileInfoTimeout,
MaxFileNodes, MaxFileNodes,
MaxFileSize, MaxFileSize,
FileSystemName,
VolumePrefix, VolumePrefix,
RootSddl, RootSddl,
&Memfs); &Memfs);
@ -184,6 +189,7 @@ usage:
" -t FileInfoTimeout [millis]\n" " -t FileInfoTimeout [millis]\n"
" -n MaxFileNodes\n" " -n MaxFileNodes\n"
" -s MaxFileSize [bytes]\n" " -s MaxFileSize [bytes]\n"
" -F FileSystemName\n"
" -S RootSddl [file rights: FA, etc; NO generic rights: GA, etc.]\n" " -S RootSddl [file rights: FA, etc; NO generic rights: GA, etc.]\n"
" -u \\Server\\Share [UNC prefix (single backslash)]\n" " -u \\Server\\Share [UNC prefix (single backslash)]\n"
" -m MountPoint [X:|* (required if no UNC prefix)]\n"; " -m MountPoint [X:|* (required if no UNC prefix)]\n";

View File

@ -1661,11 +1661,12 @@ static FSP_FILE_SYSTEM_INTERFACE MemfsInterface =
* Public API * Public API
*/ */
NTSTATUS MemfsCreate( NTSTATUS MemfsCreateFunnel(
ULONG Flags, ULONG Flags,
ULONG FileInfoTimeout, ULONG FileInfoTimeout,
ULONG MaxFileNodes, ULONG MaxFileNodes,
ULONG MaxFileSize, ULONG MaxFileSize,
PWSTR FileSystemName,
PWSTR VolumePrefix, PWSTR VolumePrefix,
PWSTR RootSddl, PWSTR RootSddl,
MEMFS **PMemfs) MEMFS **PMemfs)
@ -1732,7 +1733,8 @@ NTSTATUS MemfsCreate(
VolumeParams.PostCleanupOnDeleteOnly = 1; VolumeParams.PostCleanupOnDeleteOnly = 1;
if (0 != VolumePrefix) if (0 != VolumePrefix)
wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), VolumePrefix); wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), VolumePrefix);
wcscpy_s(VolumeParams.FileSystemName, sizeof VolumeParams.FileSystemName / sizeof(WCHAR), L"MEMFS"); wcscpy_s(VolumeParams.FileSystemName, sizeof VolumeParams.FileSystemName / sizeof(WCHAR),
0 != FileSystemName ? FileSystemName : L"-MEMFS");
Result = FspFileSystemCreate(DevicePath, &VolumeParams, &MemfsInterface, &Memfs->FileSystem); Result = FspFileSystemCreate(DevicePath, &VolumeParams, &MemfsInterface, &Memfs->FileSystem);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))

View File

@ -33,11 +33,14 @@ enum
MemfsCaseInsensitive = 0x80, MemfsCaseInsensitive = 0x80,
}; };
NTSTATUS MemfsCreate( #define MemfsCreate(Flags, FileInfoTimeout, MaxFileNodes, MaxFileSize, VolumePrefix, RootSddl, PMemfs)\
MemfsCreateFunnel(Flags, FileInfoTimeout, MaxFileNodes, MaxFileSize, 0, VolumePrefix, RootSddl, PMemfs)
NTSTATUS MemfsCreateFunnel(
ULONG Flags, ULONG Flags,
ULONG FileInfoTimeout, ULONG FileInfoTimeout,
ULONG MaxFileNodes, ULONG MaxFileNodes,
ULONG MaxFileSize, ULONG MaxFileSize,
PWSTR FileSystemName,
PWSTR VolumePrefix, PWSTR VolumePrefix,
PWSTR RootSddl, PWSTR RootSddl,
MEMFS **PMemfs); MEMFS **PMemfs);