mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
Major refactoring: testing
This commit is contained in:
parent
838adc67bb
commit
e6bf7156b7
@ -28,9 +28,6 @@ static NTSTATUS FspFsctlClose(
|
|||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
FspFree(IrpSp->FileObject->FsContext2);
|
|
||||||
IrpSp->FileObject->FsContext2 = 0;
|
|
||||||
|
|
||||||
Irp->IoStatus.Information = 0;
|
Irp->IoStatus.Information = 0;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ NTSTATUS FspDeviceCreateSecure(UINT32 Kind, ULONG ExtraSize,
|
|||||||
break;
|
break;
|
||||||
case FspFsvrtDeviceExtensionKind:
|
case FspFsvrtDeviceExtensionKind:
|
||||||
case FspFsctlDeviceExtensionKind:
|
case FspFsctlDeviceExtensionKind:
|
||||||
DeviceExtensionSize = 0;
|
DeviceExtensionSize = sizeof(FSP_DEVICE_EXTENSION);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
|
@ -41,6 +41,14 @@ NTSTATUS FspVolumeCreate(
|
|||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
|
ASSERT(IRP_MJ_CREATE == IrpSp->MajorFunction);
|
||||||
|
ASSERT(0 == IrpSp->FileObject->RelatedFileObject);
|
||||||
|
ASSERT(PREFIXW_SIZE <= IrpSp->FileObject->FileName.Length &&
|
||||||
|
RtlEqualMemory(PREFIXW, IrpSp->FileObject->FileName.Buffer, PREFIXW_SIZE));
|
||||||
|
ASSERT(
|
||||||
|
FILE_DEVICE_DISK_FILE_SYSTEM == FsctlDeviceObject->DeviceType ||
|
||||||
|
FILE_DEVICE_NETWORK_FILE_SYSTEM == FsctlDeviceObject->DeviceType);
|
||||||
|
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||||
FSP_FSCTL_VOLUME_PARAMS VolumeParams = { 0 };
|
FSP_FSCTL_VOLUME_PARAMS VolumeParams = { 0 };
|
||||||
@ -54,23 +62,14 @@ NTSTATUS FspVolumeCreate(
|
|||||||
HANDLE MupHandle = 0;
|
HANDLE MupHandle = 0;
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension;
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension;
|
||||||
|
|
||||||
ASSERT(IRP_MJ_CREATE == IrpSp->MajorFunction);
|
|
||||||
ASSERT(0 == FileObject->RelatedFileObject);
|
|
||||||
ASSERT(PREFIXW_SIZE <= FileObject->FileName.Length &&
|
|
||||||
RtlEqualMemory(PREFIXW, FileObject->FileName.Buffer, PREFIXW_SIZE));
|
|
||||||
ASSERT(
|
|
||||||
FILE_DEVICE_DISK_FILE_SYSTEM == FsctlDeviceObject->DeviceType ||
|
|
||||||
FILE_DEVICE_NETWORK_FILE_SYSTEM == FsctlDeviceObject->DeviceType);
|
|
||||||
|
|
||||||
/* check parameters */
|
/* check parameters */
|
||||||
if (PREFIXW_SIZE + sizeof(FSP_FSCTL_VOLUME_PARAMS) * sizeof(WCHAR) > FileObject->FileName.Length)
|
if (PREFIXW_SIZE + sizeof(FSP_FSCTL_VOLUME_PARAMS) * sizeof(WCHAR) > FileObject->FileName.Length)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
/* copy the VolumeParams */
|
/* copy the VolumeParams */
|
||||||
for (USHORT Index = PREFIXW_SIZE / sizeof(WCHAR), Length = FileObject->FileName.Length / 2;
|
for (USHORT Index = 0, Length = sizeof(FSP_FSCTL_VOLUME_PARAMS); Length > Index; Index++)
|
||||||
Length > Index; Index++)
|
|
||||||
{
|
{
|
||||||
WCHAR Value = FileObject->FileName.Buffer[Index];
|
WCHAR Value = FileObject->FileName.Buffer[PREFIXW_SIZE / sizeof(WCHAR) + Index];
|
||||||
if (0xF000 != (Value & 0xFF00))
|
if (0xF000 != (Value & 0xFF00))
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
((PUINT8)&VolumeParams)[Index] = Value & 0xFF;
|
((PUINT8)&VolumeParams)[Index] = Value & 0xFF;
|
||||||
@ -94,16 +93,17 @@ NTSTATUS FspVolumeCreate(
|
|||||||
if (FspFsctlIrpCapacityMinimum > VolumeParams.IrpCapacity ||
|
if (FspFsctlIrpCapacityMinimum > VolumeParams.IrpCapacity ||
|
||||||
VolumeParams.IrpCapacity > FspFsctlIrpCapacityMaximum)
|
VolumeParams.IrpCapacity > FspFsctlIrpCapacityMaximum)
|
||||||
VolumeParams.IrpCapacity = FspFsctlIrpCapacityDefault;
|
VolumeParams.IrpCapacity = FspFsctlIrpCapacityDefault;
|
||||||
|
if (FILE_DEVICE_NETWORK_FILE_SYSTEM == FsctlDeviceObject->DeviceType)
|
||||||
|
{
|
||||||
VolumeParams.Prefix[sizeof VolumeParams.Prefix / 2 - 1] = L'\0';
|
VolumeParams.Prefix[sizeof VolumeParams.Prefix / 2 - 1] = L'\0';
|
||||||
while (L'\0' != VolumeParams.Prefix[PrefixLength++])
|
while (L'\0' != VolumeParams.Prefix[PrefixLength++])
|
||||||
;
|
;
|
||||||
while (0 < PrefixLength && L'\\' == VolumeParams.Prefix[--PrefixLength])
|
while (0 < PrefixLength && L'\\' == VolumeParams.Prefix[--PrefixLength])
|
||||||
;
|
;
|
||||||
VolumeParams.Prefix[PrefixLength] = L'\0';
|
VolumeParams.Prefix[PrefixLength] = L'\0';
|
||||||
if (FILE_DEVICE_DISK_FILE_SYSTEM == FsctlDeviceObject->DeviceType && 0 != PrefixLength)
|
if (0 == PrefixLength)
|
||||||
return STATUS_INVALID_PARAMETER;
|
|
||||||
if (FILE_DEVICE_NETWORK_FILE_SYSTEM == FsctlDeviceObject->DeviceType && 0 == PrefixLength)
|
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
/* create volume guid */
|
/* create volume guid */
|
||||||
Result = FspCreateGuid(&Guid);
|
Result = FspCreateGuid(&Guid);
|
||||||
|
@ -22,38 +22,58 @@ void mount_invalid_test(void)
|
|||||||
ASSERT(INVALID_HANDLE_VALUE == VolumeHandle);
|
ASSERT(INVALID_HANDLE_VALUE == VolumeHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
void mount_open_device_dotest(PWSTR DeviceName)
|
||||||
void mount_create_delete_dotest(PWSTR DeviceName)
|
{
|
||||||
|
BOOL Success;
|
||||||
|
HANDLE DeviceHandle;
|
||||||
|
WCHAR DevicePath[MAX_PATH];
|
||||||
|
|
||||||
|
StringCbPrintfW(DevicePath, sizeof DevicePath, L"\\\\?\\GLOBALROOT\\Device\\%s", DeviceName);
|
||||||
|
DeviceHandle = CreateFileW(DevicePath,
|
||||||
|
0, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
|
||||||
|
ASSERT(INVALID_HANDLE_VALUE != DeviceHandle);
|
||||||
|
|
||||||
|
Success = CloseHandle(DeviceHandle);
|
||||||
|
ASSERT(Success);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mount_open_device_test(void)
|
||||||
|
{
|
||||||
|
if (WinFspDiskTests)
|
||||||
|
mount_open_device_dotest(L"WinFsp.Disk");
|
||||||
|
if (WinFspNetTests)
|
||||||
|
mount_open_device_dotest(L"WinFsp.Net");
|
||||||
|
}
|
||||||
|
|
||||||
|
void mount_create_volume_dotest(PWSTR DeviceName)
|
||||||
{
|
{
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
BOOL Success;
|
BOOL Success;
|
||||||
FSP_FSCTL_VOLUME_PARAMS Params = { 0 };
|
FSP_FSCTL_VOLUME_PARAMS VolumeParams = { 0 };
|
||||||
WCHAR VolumePath[MAX_PATH];
|
WCHAR VolumePath[MAX_PATH];
|
||||||
HANDLE VolumeHandle;
|
HANDLE VolumeHandle;
|
||||||
|
|
||||||
Params.SectorSize = 16384;
|
VolumeParams.SectorSize = 16384;
|
||||||
Params.SerialNumber = 0x12345678;
|
VolumeParams.SerialNumber = 0x12345678;
|
||||||
Result = FspFsctlCreateVolume(DeviceName, &Params, 0, VolumePath, sizeof VolumePath);
|
Result = FspFsctlCreateVolume(DeviceName, &VolumeParams,
|
||||||
ASSERT(STATUS_SUCCESS == Result);
|
VolumePath, sizeof VolumePath, &VolumeHandle);
|
||||||
|
|
||||||
Result = FspFsctlOpenVolume(VolumePath, &VolumeHandle);
|
|
||||||
ASSERT(STATUS_SUCCESS == Result);
|
|
||||||
|
|
||||||
Result = FspFsctlDeleteVolume(VolumeHandle);
|
|
||||||
ASSERT(STATUS_SUCCESS == Result);
|
ASSERT(STATUS_SUCCESS == Result);
|
||||||
|
ASSERT(0 == wcsncmp(L"\\Device\\Volume{", VolumePath, 15));
|
||||||
|
ASSERT(INVALID_HANDLE_VALUE != VolumeHandle);
|
||||||
|
|
||||||
Success = CloseHandle(VolumeHandle);
|
Success = CloseHandle(VolumeHandle);
|
||||||
ASSERT(Success);
|
ASSERT(Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mount_create_delete_test(void)
|
void mount_create_volume_test(void)
|
||||||
{
|
{
|
||||||
if (WinFspDiskTests)
|
if (WinFspDiskTests)
|
||||||
mount_create_delete_dotest(L"WinFsp.Disk");
|
mount_create_volume_dotest(L"WinFsp.Disk");
|
||||||
if (WinFspNetTests)
|
if (WinFspNetTests)
|
||||||
mount_create_delete_dotest(L"WinFsp.Net");
|
mount_create_volume_dotest(L"WinFsp.Net");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static unsigned __stdcall mount_volume_cancel_dotest_thread(void *FilePath)
|
static unsigned __stdcall mount_volume_cancel_dotest_thread(void *FilePath)
|
||||||
{
|
{
|
||||||
FspDebugLog(__FUNCTION__ ": \"%S\"\n", FilePath);
|
FspDebugLog(__FUNCTION__ ": \"%S\"\n", FilePath);
|
||||||
@ -234,8 +254,9 @@ void mount_volume_transact_test(void)
|
|||||||
void mount_tests(void)
|
void mount_tests(void)
|
||||||
{
|
{
|
||||||
TEST(mount_invalid_test);
|
TEST(mount_invalid_test);
|
||||||
|
TEST(mount_open_device_test);
|
||||||
|
TEST(mount_create_volume_test);
|
||||||
#if 0
|
#if 0
|
||||||
TEST(mount_create_delete_test);
|
|
||||||
TEST(mount_volume_cancel_test);
|
TEST(mount_volume_cancel_test);
|
||||||
TEST(mount_volume_transact_test);
|
TEST(mount_volume_transact_test);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user