mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 17:03:12 -05:00
sys: FspFsvolQueryFsAttributeInformation: allow file system to fully specify file system name
tst: memfs: add -F FileSystemName option
This commit is contained in:
parent
b55c20b393
commit
1e03c1a465
@ -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)
|
||||||
|
@ -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";
|
||||||
|
@ -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))
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user