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)

This commit is contained in:
Bill Zissimopoulos 2016-01-25 15:26:40 -08:00
parent f7ce154278
commit 82d88e2af8
6 changed files with 60 additions and 33 deletions

View File

@ -313,6 +313,8 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
FileNode = 0;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Create(FileSystem, Request, Result = FileSystem->Interface->Create(FileSystem, Request,
(PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions,
Request->Req.Create.FileAttributes, ObjectDescriptor, Request->Req.Create.AllocationSize, 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)) if (!NT_SUCCESS(Result))
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
FileNode = 0;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Open(FileSystem, Request, Result = FileSystem->Interface->Open(FileSystem, Request,
(PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions,
&FileNode, &FileInfo); &FileNode, &FileInfo);
@ -367,6 +371,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
if (!Create) if (!Create)
{ {
FileNode = 0;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Open(FileSystem, Request, Result = FileSystem->Interface->Open(FileSystem, Request,
(PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions,
&FileNode, &FileInfo); &FileNode, &FileInfo);
@ -389,6 +395,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
FileNode = 0;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Create(FileSystem, Request, Result = FileSystem->Interface->Create(FileSystem, Request,
(PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions,
Request->Req.Create.FileAttributes, ObjectDescriptor, Request->Req.Create.AllocationSize, 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)) if (!NT_SUCCESS(Result))
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
FileNode = 0;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Open(FileSystem, Request, Result = FileSystem->Interface->Open(FileSystem, Request,
(PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions,
&FileNode, &FileInfo); &FileNode, &FileInfo);
@ -445,6 +455,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
if (!Create) if (!Create)
{ {
FileNode = 0;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Open(FileSystem, Request, Result = FileSystem->Interface->Open(FileSystem, Request,
(PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions,
&FileNode, &FileInfo); &FileNode, &FileInfo);
@ -467,6 +479,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
FileNode = 0;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Create(FileSystem, Request, Result = FileSystem->Interface->Create(FileSystem, Request,
(PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions,
Request->Req.Create.FileAttributes, ObjectDescriptor, Request->Req.Create.AllocationSize, 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); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
FspPathSuffix((PWSTR)Request->Buffer, &Parent, &Suffix); FspPathSuffix((PWSTR)Request->Buffer, &Parent, &Suffix);
FileNode = 0;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Open(FileSystem, Request, Result = FileSystem->Interface->Open(FileSystem, Request,
(PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions, (PWSTR)Request->Buffer, Request->Req.Create.CaseSensitive, Request->Req.Create.CreateOptions,
&FileNode, &FileInfo); &FileNode, &FileInfo);
@ -550,6 +566,7 @@ FSP_API NTSTATUS FspFileSystemOpOverwrite(FSP_FILE_SYSTEM *FileSystem,
NTSTATUS Result; NTSTATUS Result;
FSP_FSCTL_FILE_INFO FileInfo; FSP_FSCTL_FILE_INFO FileInfo;
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->Overwrite(FileSystem, Request, Result = FileSystem->Interface->Overwrite(FileSystem, Request,
(PVOID)Request->Req.Overwrite.UserContext, (PVOID)Request->Req.Overwrite.UserContext,
Request->Req.Overwrite.FileAttributes, Request->Req.Overwrite.FileAttributes,

View File

@ -15,6 +15,7 @@ FSP_API NTSTATUS FspFileSystemOpQueryInformation(FSP_FILE_SYSTEM *FileSystem,
if (0 == FileSystem->Interface->GetFileInfo) if (0 == FileSystem->Interface->GetFileInfo)
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST); return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST);
memset(&FileInfo, 0, sizeof FileInfo);
Result = FileSystem->Interface->GetFileInfo(FileSystem, Request, Result = FileSystem->Interface->GetFileInfo(FileSystem, Request,
(PVOID)Request->Req.Close.UserContext, &FileInfo); (PVOID)Request->Req.Close.UserContext, &FileInfo);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))

View File

@ -15,6 +15,7 @@ FSP_API NTSTATUS FspFileSystemOpQueryVolumeInformation(FSP_FILE_SYSTEM *FileSyst
if (0 == FileSystem->Interface->GetVolumeInfo) if (0 == FileSystem->Interface->GetVolumeInfo)
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST); return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST);
memset(&VolumeInfo, 0, sizeof VolumeInfo);
Result = FileSystem->Interface->GetVolumeInfo(FileSystem, Request, &VolumeInfo); Result = FileSystem->Interface->GetVolumeInfo(FileSystem, Request, &VolumeInfo);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);

View File

@ -46,7 +46,7 @@ void *memfs_start_ex(ULONG Flags, ULONG FileInfoTimeout)
void *memfs_start(ULONG Flags) void *memfs_start(ULONG Flags)
{ {
return memfs_start_ex(Flags, 0); return memfs_start_ex(Flags, 1000);
} }
void memfs_stop(void *data) void memfs_stop(void *data)

View File

@ -195,7 +195,10 @@ void mount_volume_transact_dotest(PWSTR DeviceName, PWSTR Prefix)
ASSERT(0 == Request->Version); ASSERT(0 == Request->Version);
ASSERT(FSP_FSCTL_TRANSACT_REQ_SIZEMAX >= Request->Size); ASSERT(FSP_FSCTL_TRANSACT_REQ_SIZEMAX >= Request->Size);
ASSERT(0 != Request->Hint); ASSERT(0 != Request->Hint);
ASSERT(FspFsctlTransactCreateKind == Request->Kind); ASSERT(FspFsctlTransactCreateKind == Request->Kind ||
FspFsctlTransactQueryVolumeInformationKind == Request->Kind);
if (FspFsctlTransactCreateKind == Request->Kind)
{
ASSERT(FILE_CREATE == ((Request->Req.Create.CreateOptions >> 24) & 0xff)); ASSERT(FILE_CREATE == ((Request->Req.Create.CreateOptions >> 24) & 0xff));
ASSERT(0 == Request->Req.Create.FileAttributes); ASSERT(0 == Request->Req.Create.FileAttributes);
ASSERT(0 == Request->Req.Create.SecurityDescriptor.Offset); ASSERT(0 == Request->Req.Create.SecurityDescriptor.Offset);
@ -212,6 +215,7 @@ void mount_volume_transact_dotest(PWSTR DeviceName, PWSTR Prefix)
ASSERT(0 == Request->FileName.Offset); ASSERT(0 == Request->FileName.Offset);
ASSERT((wcslen((PVOID)Request->Buffer) + 1) * sizeof(WCHAR) == Request->FileName.Size); ASSERT((wcslen((PVOID)Request->Buffer) + 1) * sizeof(WCHAR) == Request->FileName.Size);
ASSERT(0 == wcscmp((PVOID)Request->Buffer, L"\\file0")); ASSERT(0 == wcscmp((PVOID)Request->Buffer, L"\\file0"));
}
ASSERT(FspFsctlTransactCanProduceResponse(Response, ResponseBufEnd)); ASSERT(FspFsctlTransactCanProduceResponse(Response, ResponseBufEnd));
@ -241,7 +245,7 @@ void mount_volume_transact_dotest(PWSTR DeviceName, PWSTR Prefix)
GetExitCodeThread(Thread, &ExitCode); GetExitCodeThread(Thread, &ExitCode);
CloseHandle(Thread); CloseHandle(Thread);
ASSERT(ERROR_ACCESS_DENIED == ExitCode); ASSERT(ERROR_ACCESS_DENIED == ExitCode || ERROR_OPERATION_ABORTED == ExitCode);
} }
void mount_volume_transact_test(void) void mount_volume_transact_test(void)

View File

@ -201,7 +201,10 @@ void timeout_transact_dotest(PWSTR DeviceName, PWSTR Prefix)
ASSERT(0 == Request->Version); ASSERT(0 == Request->Version);
ASSERT(FSP_FSCTL_TRANSACT_REQ_SIZEMAX >= Request->Size); ASSERT(FSP_FSCTL_TRANSACT_REQ_SIZEMAX >= Request->Size);
ASSERT(0 != Request->Hint); ASSERT(0 != Request->Hint);
ASSERT(FspFsctlTransactCreateKind == Request->Kind); ASSERT(FspFsctlTransactCreateKind == Request->Kind ||
FspFsctlTransactQueryVolumeInformationKind == Request->Kind);
if (FspFsctlTransactCreateKind == Request->Kind)
{
ASSERT(FILE_CREATE == ((Request->Req.Create.CreateOptions >> 24) & 0xff)); ASSERT(FILE_CREATE == ((Request->Req.Create.CreateOptions >> 24) & 0xff));
ASSERT(0 == Request->Req.Create.FileAttributes); ASSERT(0 == Request->Req.Create.FileAttributes);
ASSERT(0 == Request->Req.Create.SecurityDescriptor.Offset); ASSERT(0 == Request->Req.Create.SecurityDescriptor.Offset);
@ -215,6 +218,7 @@ void timeout_transact_dotest(PWSTR DeviceName, PWSTR Prefix)
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);
}
ResponseBufSize = 0; ResponseBufSize = 0;
RequestBufSize = sizeof RequestBuf; RequestBufSize = sizeof RequestBuf;