sys: MUP redir testing

This commit is contained in:
Bill Zissimopoulos 2015-12-29 16:33:00 -08:00
parent c8003b5ecb
commit 9e3d5166cf
3 changed files with 18 additions and 9 deletions

View File

@ -438,7 +438,7 @@ NTSTATUS FspVolumeRedirQueryPathEx(
if (Prefix.Length <= QueryPathRequest->PathName.Length && if (Prefix.Length <= QueryPathRequest->PathName.Length &&
RtlEqualMemory(Prefix.Buffer, QueryPathRequest->PathName.Buffer, Prefix.Length) && RtlEqualMemory(Prefix.Buffer, QueryPathRequest->PathName.Buffer, Prefix.Length) &&
(Prefix.Length == QueryPathRequest->PathName.Length || (Prefix.Length == QueryPathRequest->PathName.Length ||
'\\' == QueryPathRequest->PathName.Buffer[Prefix.Length])) '\\' == QueryPathRequest->PathName.Buffer[Prefix.Length / 2]))
{ {
QueryPathResponse->LengthAccepted = Prefix.Length; QueryPathResponse->LengthAccepted = Prefix.Length;

View File

@ -55,7 +55,7 @@ void mount_create_volume_dotest(PWSTR DeviceName)
VolumeParams.SectorSize = 16384; VolumeParams.SectorSize = 16384;
VolumeParams.SerialNumber = 0x12345678; VolumeParams.SerialNumber = 0x12345678;
wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\\\winfsp-tests"); wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\winfsp-tests\\share");
Result = FspFsctlCreateVolume(DeviceName, &VolumeParams, Result = FspFsctlCreateVolume(DeviceName, &VolumeParams,
VolumePath, sizeof VolumePath, &VolumeHandle); VolumePath, sizeof VolumePath, &VolumeHandle);
ASSERT(STATUS_SUCCESS == Result); ASSERT(STATUS_SUCCESS == Result);
@ -100,7 +100,7 @@ void mount_volume_cancel_dotest(PWSTR DeviceName)
VolumeParams.SectorSize = 16384; VolumeParams.SectorSize = 16384;
VolumeParams.SerialNumber = 0x12345678; VolumeParams.SerialNumber = 0x12345678;
wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\\\winfsp-tests"); wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\winfsp-tests\\share");
Result = FspFsctlCreateVolume(DeviceName, &VolumeParams, Result = FspFsctlCreateVolume(DeviceName, &VolumeParams,
VolumePath, sizeof VolumePath, &VolumeHandle); VolumePath, sizeof VolumePath, &VolumeHandle);
ASSERT(STATUS_SUCCESS == Result); ASSERT(STATUS_SUCCESS == Result);
@ -144,7 +144,7 @@ static unsigned __stdcall mount_volume_transact_dotest_thread(void *FilePath)
return 0; return 0;
} }
void mount_volume_transact_dotest(PWSTR DeviceName) void mount_volume_transact_dotest(PWSTR DeviceName, PWSTR Prefix)
{ {
NTSTATUS Result; NTSTATUS Result;
BOOL Success; BOOL Success;
@ -155,9 +155,10 @@ void mount_volume_transact_dotest(PWSTR DeviceName)
HANDLE Thread; HANDLE Thread;
DWORD ExitCode; DWORD ExitCode;
VolumeParams.TransactTimeout = 10000; /* allow for longer transact timeout to handle MUP redir */
VolumeParams.SectorSize = 16384; VolumeParams.SectorSize = 16384;
VolumeParams.SerialNumber = 0x12345678; VolumeParams.SerialNumber = 0x12345678;
wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\\\winfsp-tests"); wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\winfsp-tests\\share");
Result = FspFsctlCreateVolume(DeviceName, &VolumeParams, Result = FspFsctlCreateVolume(DeviceName, &VolumeParams,
VolumePath, sizeof VolumePath, &VolumeHandle); VolumePath, sizeof VolumePath, &VolumeHandle);
ASSERT(STATUS_SUCCESS == Result); ASSERT(STATUS_SUCCESS == Result);
@ -165,6 +166,8 @@ void mount_volume_transact_dotest(PWSTR DeviceName)
ASSERT(INVALID_HANDLE_VALUE != VolumeHandle); ASSERT(INVALID_HANDLE_VALUE != VolumeHandle);
StringCbPrintfW(FilePath, sizeof FilePath, L"\\\\?\\GLOBALROOT%s\\file0", VolumePath); StringCbPrintfW(FilePath, sizeof FilePath, L"\\\\?\\GLOBALROOT%s\\file0", VolumePath);
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : VolumePath);
Thread = (HANDLE)_beginthreadex(0, 0, mount_volume_transact_dotest_thread, FilePath, 0, 0); Thread = (HANDLE)_beginthreadex(0, 0, mount_volume_transact_dotest_thread, FilePath, 0, 0);
ASSERT(0 != Thread); ASSERT(0 != Thread);
@ -206,6 +209,9 @@ void mount_volume_transact_dotest(PWSTR DeviceName)
ASSERT(Request->Req.Create.HasTraversePrivilege); ASSERT(Request->Req.Create.HasTraversePrivilege);
ASSERT(!Request->Req.Create.OpenTargetDirectory); ASSERT(!Request->Req.Create.OpenTargetDirectory);
ASSERT(!Request->Req.Create.CaseSensitive); ASSERT(!Request->Req.Create.CaseSensitive);
ASSERT(0 == Request->FileName.Offset);
ASSERT((wcslen((PVOID)Request->Buffer) + 1) * sizeof(WCHAR) == Request->FileName.Size);
ASSERT(0 == wcscmp((PVOID)Request->Buffer, L"\\file0"));
ASSERT(FspFsctlTransactCanProduceResponse(Response, ResponseBufEnd)); ASSERT(FspFsctlTransactCanProduceResponse(Response, ResponseBufEnd));
@ -241,9 +247,12 @@ void mount_volume_transact_dotest(PWSTR DeviceName)
void mount_volume_transact_test(void) void mount_volume_transact_test(void)
{ {
if (WinFspDiskTests) if (WinFspDiskTests)
mount_volume_transact_dotest(L"WinFsp.Disk"); mount_volume_transact_dotest(L"WinFsp.Disk", 0);
if (WinFspNetTests) if (WinFspNetTests)
mount_volume_transact_dotest(L"WinFsp.Net"); {
mount_volume_transact_dotest(L"WinFsp.Net", 0);
mount_volume_transact_dotest(L"WinFsp.Net", L"\\\\winfsp-tests\\share");
}
} }
void mount_tests(void) void mount_tests(void)

View File

@ -33,7 +33,7 @@ void timeout_pending_dotest(PWSTR DeviceName)
VolumeParams.IrpTimeout = FspFsctlIrpTimeoutDebug; VolumeParams.IrpTimeout = FspFsctlIrpTimeoutDebug;
VolumeParams.SectorSize = 16384; VolumeParams.SectorSize = 16384;
VolumeParams.SerialNumber = 0x12345678; VolumeParams.SerialNumber = 0x12345678;
wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\\\winfsp-tests"); wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\winfsp-tests\\share");
Result = FspFsctlCreateVolume(DeviceName, &VolumeParams, Result = FspFsctlCreateVolume(DeviceName, &VolumeParams,
VolumePath, sizeof VolumePath, &VolumeHandle); VolumePath, sizeof VolumePath, &VolumeHandle);
ASSERT(STATUS_SUCCESS == Result); ASSERT(STATUS_SUCCESS == Result);
@ -89,7 +89,7 @@ void timeout_transact_dotest(PWSTR DeviceName)
VolumeParams.TransactTimeout = 1000; VolumeParams.TransactTimeout = 1000;
VolumeParams.SectorSize = 16384; VolumeParams.SectorSize = 16384;
VolumeParams.SerialNumber = 0x12345678; VolumeParams.SerialNumber = 0x12345678;
wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\\\winfsp-tests"); wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\winfsp-tests\\share");
Result = FspFsctlCreateVolume(DeviceName, &VolumeParams, Result = FspFsctlCreateVolume(DeviceName, &VolumeParams,
VolumePath, sizeof VolumePath, &VolumeHandle); VolumePath, sizeof VolumePath, &VolumeHandle);
ASSERT(STATUS_SUCCESS == Result); ASSERT(STATUS_SUCCESS == Result);