From 82d88e2af8e3af7e2ba4f0befd2594d5f5a50ecd Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 25 Jan 2016 15:26:40 -0800 Subject: [PATCH] dll, winfsp-tests: ensure that all tests pass as IRP_MJ_CREATE is no longer the first IRP seen during tests (it is not IRP_MJ_QUERY_VOLUME_INFORMATION) --- src/dll/create.c | 17 ++++++++++++++ src/dll/fileinfo.c | 1 + src/dll/volinfo.c | 1 + tst/winfsp-tests/memfs-test.c | 2 +- tst/winfsp-tests/mount-test.c | 40 ++++++++++++++++++--------------- tst/winfsp-tests/timeout-test.c | 32 ++++++++++++++------------ 6 files changed, 60 insertions(+), 33 deletions(-) diff --git a/src/dll/create.c b/src/dll/create.c index ffa9d41e..e575d7b4 100644 --- a/src/dll/create.c +++ b/src/dll/create.c @@ -313,6 +313,8 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem, if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + FileNode = 0; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Create(FileSystem, Request, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, Request->Req.Create.FileAttributes, ObjectDescriptor, Request->Req.Create.AllocationSize, @@ -337,6 +339,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem, if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + FileNode = 0; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Open(FileSystem, Request, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, &FileNode, &FileInfo); @@ -367,6 +371,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem, if (!Create) { + FileNode = 0; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Open(FileSystem, Request, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, &FileNode, &FileInfo); @@ -389,6 +395,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem, if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + FileNode = 0; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Create(FileSystem, Request, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, Request->Req.Create.FileAttributes, ObjectDescriptor, Request->Req.Create.AllocationSize, @@ -415,6 +423,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem, if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + FileNode = 0; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Open(FileSystem, Request, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, &FileNode, &FileInfo); @@ -445,6 +455,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste if (!Create) { + FileNode = 0; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Open(FileSystem, Request, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, &FileNode, &FileInfo); @@ -467,6 +479,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + FileNode = 0; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Create(FileSystem, Request, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, Request->Req.Create.FileAttributes, ObjectDescriptor, Request->Req.Create.AllocationSize, @@ -496,6 +510,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenTargetDirectory(FSP_FILE_SYSTEM *F return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); FspPathSuffix((PWSTR)Request->Buffer, &Parent, &Suffix); + FileNode = 0; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Open(FileSystem, Request, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, &FileNode, &FileInfo); @@ -550,6 +566,7 @@ FSP_API NTSTATUS FspFileSystemOpOverwrite(FSP_FILE_SYSTEM *FileSystem, NTSTATUS Result; FSP_FSCTL_FILE_INFO FileInfo; + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->Overwrite(FileSystem, Request, (PVOID)Request->Req.Overwrite.UserContext, Request->Req.Overwrite.FileAttributes, diff --git a/src/dll/fileinfo.c b/src/dll/fileinfo.c index 26629eac..f7e8f7c0 100644 --- a/src/dll/fileinfo.c +++ b/src/dll/fileinfo.c @@ -15,6 +15,7 @@ FSP_API NTSTATUS FspFileSystemOpQueryInformation(FSP_FILE_SYSTEM *FileSystem, if (0 == FileSystem->Interface->GetFileInfo) return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST); + memset(&FileInfo, 0, sizeof FileInfo); Result = FileSystem->Interface->GetFileInfo(FileSystem, Request, (PVOID)Request->Req.Close.UserContext, &FileInfo); if (!NT_SUCCESS(Result)) diff --git a/src/dll/volinfo.c b/src/dll/volinfo.c index 6315264b..171dcc6a 100644 --- a/src/dll/volinfo.c +++ b/src/dll/volinfo.c @@ -15,6 +15,7 @@ FSP_API NTSTATUS FspFileSystemOpQueryVolumeInformation(FSP_FILE_SYSTEM *FileSyst if (0 == FileSystem->Interface->GetVolumeInfo) return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST); + memset(&VolumeInfo, 0, sizeof VolumeInfo); Result = FileSystem->Interface->GetVolumeInfo(FileSystem, Request, &VolumeInfo); if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); diff --git a/tst/winfsp-tests/memfs-test.c b/tst/winfsp-tests/memfs-test.c index d7956251..71273f03 100644 --- a/tst/winfsp-tests/memfs-test.c +++ b/tst/winfsp-tests/memfs-test.c @@ -46,7 +46,7 @@ void *memfs_start_ex(ULONG Flags, ULONG FileInfoTimeout) void *memfs_start(ULONG Flags) { - return memfs_start_ex(Flags, 0); + return memfs_start_ex(Flags, 1000); } void memfs_stop(void *data) diff --git a/tst/winfsp-tests/mount-test.c b/tst/winfsp-tests/mount-test.c index 59dec876..6b121df2 100644 --- a/tst/winfsp-tests/mount-test.c +++ b/tst/winfsp-tests/mount-test.c @@ -195,23 +195,27 @@ void mount_volume_transact_dotest(PWSTR DeviceName, PWSTR Prefix) ASSERT(0 == Request->Version); ASSERT(FSP_FSCTL_TRANSACT_REQ_SIZEMAX >= Request->Size); ASSERT(0 != Request->Hint); - ASSERT(FspFsctlTransactCreateKind == Request->Kind); - ASSERT(FILE_CREATE == ((Request->Req.Create.CreateOptions >> 24) & 0xff)); - ASSERT(0 == Request->Req.Create.FileAttributes); - ASSERT(0 == Request->Req.Create.SecurityDescriptor.Offset); - ASSERT(0 == Request->Req.Create.SecurityDescriptor.Size); - ASSERT(0 == Request->Req.Create.AllocationSize); - ASSERT(FILE_GENERIC_READ == Request->Req.Create.DesiredAccess); - ASSERT((FILE_SHARE_READ | FILE_SHARE_WRITE) == Request->Req.Create.ShareAccess); - ASSERT(0 == Request->Req.Create.Ea.Offset); - ASSERT(0 == Request->Req.Create.Ea.Size); - ASSERT(Request->Req.Create.UserMode); - ASSERT(Request->Req.Create.HasTraversePrivilege); - ASSERT(!Request->Req.Create.OpenTargetDirectory); - 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(FspFsctlTransactCreateKind == Request->Kind || + FspFsctlTransactQueryVolumeInformationKind == Request->Kind); + if (FspFsctlTransactCreateKind == Request->Kind) + { + ASSERT(FILE_CREATE == ((Request->Req.Create.CreateOptions >> 24) & 0xff)); + ASSERT(0 == Request->Req.Create.FileAttributes); + ASSERT(0 == Request->Req.Create.SecurityDescriptor.Offset); + ASSERT(0 == Request->Req.Create.SecurityDescriptor.Size); + ASSERT(0 == Request->Req.Create.AllocationSize); + ASSERT(FILE_GENERIC_READ == Request->Req.Create.DesiredAccess); + ASSERT((FILE_SHARE_READ | FILE_SHARE_WRITE) == Request->Req.Create.ShareAccess); + ASSERT(0 == Request->Req.Create.Ea.Offset); + ASSERT(0 == Request->Req.Create.Ea.Size); + ASSERT(Request->Req.Create.UserMode); + ASSERT(Request->Req.Create.HasTraversePrivilege); + ASSERT(!Request->Req.Create.OpenTargetDirectory); + 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)); @@ -241,7 +245,7 @@ void mount_volume_transact_dotest(PWSTR DeviceName, PWSTR Prefix) GetExitCodeThread(Thread, &ExitCode); CloseHandle(Thread); - ASSERT(ERROR_ACCESS_DENIED == ExitCode); + ASSERT(ERROR_ACCESS_DENIED == ExitCode || ERROR_OPERATION_ABORTED == ExitCode); } void mount_volume_transact_test(void) diff --git a/tst/winfsp-tests/timeout-test.c b/tst/winfsp-tests/timeout-test.c index 633fec9d..d8df01b9 100644 --- a/tst/winfsp-tests/timeout-test.c +++ b/tst/winfsp-tests/timeout-test.c @@ -201,20 +201,24 @@ void timeout_transact_dotest(PWSTR DeviceName, PWSTR Prefix) ASSERT(0 == Request->Version); ASSERT(FSP_FSCTL_TRANSACT_REQ_SIZEMAX >= Request->Size); ASSERT(0 != Request->Hint); - ASSERT(FspFsctlTransactCreateKind == Request->Kind); - ASSERT(FILE_CREATE == ((Request->Req.Create.CreateOptions >> 24) & 0xff)); - ASSERT(0 == Request->Req.Create.FileAttributes); - ASSERT(0 == Request->Req.Create.SecurityDescriptor.Offset); - ASSERT(0 == Request->Req.Create.SecurityDescriptor.Size); - ASSERT(0 == Request->Req.Create.AllocationSize); - ASSERT(FILE_GENERIC_READ == Request->Req.Create.DesiredAccess); - ASSERT((FILE_SHARE_READ | FILE_SHARE_WRITE) == Request->Req.Create.ShareAccess); - ASSERT(0 == Request->Req.Create.Ea.Offset); - ASSERT(0 == Request->Req.Create.Ea.Size); - ASSERT(Request->Req.Create.UserMode); - ASSERT(Request->Req.Create.HasTraversePrivilege); - ASSERT(!Request->Req.Create.OpenTargetDirectory); - ASSERT(!Request->Req.Create.CaseSensitive); + ASSERT(FspFsctlTransactCreateKind == Request->Kind || + FspFsctlTransactQueryVolumeInformationKind == Request->Kind); + if (FspFsctlTransactCreateKind == Request->Kind) + { + ASSERT(FILE_CREATE == ((Request->Req.Create.CreateOptions >> 24) & 0xff)); + ASSERT(0 == Request->Req.Create.FileAttributes); + ASSERT(0 == Request->Req.Create.SecurityDescriptor.Offset); + ASSERT(0 == Request->Req.Create.SecurityDescriptor.Size); + ASSERT(0 == Request->Req.Create.AllocationSize); + ASSERT(FILE_GENERIC_READ == Request->Req.Create.DesiredAccess); + ASSERT((FILE_SHARE_READ | FILE_SHARE_WRITE) == Request->Req.Create.ShareAccess); + ASSERT(0 == Request->Req.Create.Ea.Offset); + ASSERT(0 == Request->Req.Create.Ea.Size); + ASSERT(Request->Req.Create.UserMode); + ASSERT(Request->Req.Create.HasTraversePrivilege); + ASSERT(!Request->Req.Create.OpenTargetDirectory); + ASSERT(!Request->Req.Create.CaseSensitive); + } ResponseBufSize = 0; RequestBufSize = sizeof RequestBuf;