From 437c3633916e2a471660066abb12bf7cb4b790d3 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 24 Jan 2016 12:06:16 -0800 Subject: [PATCH] winfsp-tests: getinfo_test --- src/sys/fileinfo.c | 9 ++++++--- tst/winfsp-tests/fileinfo-test.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/sys/fileinfo.c b/src/sys/fileinfo.c index 7545051e..e461f9ff 100644 --- a/src/sys/fileinfo.c +++ b/src/sys/fileinfo.c @@ -108,7 +108,8 @@ static NTSTATUS FspFsvolQueryAttributeTagInformation(PFILE_OBJECT FileObject, PFILE_ATTRIBUTE_TAG_INFORMATION Info = (PFILE_ATTRIBUTE_TAG_INFORMATION)*PBuffer; - Info->FileAttributes = FileInfo->FileAttributes; + Info->FileAttributes = 0 != FileInfo->FileAttributes ? + FileInfo->FileAttributes : FILE_ATTRIBUTE_NORMAL; Info->ReparseTag = FileInfo->ReparseTag; *PBuffer += sizeof(FILE_ATTRIBUTE_TAG_INFORMATION); @@ -132,7 +133,8 @@ static NTSTATUS FspFsvolQueryBasicInformation(PFILE_OBJECT FileObject, Info->LastAccessTime.QuadPart = FileInfo->LastAccessTime; Info->LastWriteTime.QuadPart = FileInfo->LastWriteTime; Info->ChangeTime.QuadPart = FileInfo->ChangeTime; - Info->FileAttributes = FileInfo->FileAttributes; + Info->FileAttributes = 0 != FileInfo->FileAttributes ? + FileInfo->FileAttributes : FILE_ATTRIBUTE_NORMAL; *PBuffer += sizeof(FILE_BASIC_INFORMATION); @@ -226,7 +228,8 @@ static NTSTATUS FspFsvolQueryNetworkOpenInformation(PFILE_OBJECT FileObject, Info->LastAccessTime.QuadPart = FileInfo->LastAccessTime; Info->LastWriteTime.QuadPart = FileInfo->LastWriteTime; Info->ChangeTime.QuadPart = FileInfo->ChangeTime; - Info->FileAttributes = FileInfo->FileAttributes; + Info->FileAttributes = 0 != FileInfo->FileAttributes ? + FileInfo->FileAttributes : FILE_ATTRIBUTE_NORMAL; *PBuffer += sizeof(FILE_BASIC_INFORMATION); diff --git a/tst/winfsp-tests/fileinfo-test.c b/tst/winfsp-tests/fileinfo-test.c index 7e5eb7c6..2c8407eb 100644 --- a/tst/winfsp-tests/fileinfo-test.c +++ b/tst/winfsp-tests/fileinfo-test.c @@ -17,7 +17,14 @@ void getinfo_dotest(ULONG Flags, PWSTR Prefix) void *memfs = memfs_start(Flags); HANDLE Handle; + BOOL Success; WCHAR FilePath[MAX_PATH]; + FILE_ATTRIBUTE_TAG_INFO AttributeTagInfo; + FILE_BASIC_INFO BasicInfo; + FILE_STANDARD_INFO StandardInfo; + PUINT8 NameInfoBuf[sizeof(FILE_NAME_INFO) + MAX_PATH]; + PFILE_NAME_INFO PNameInfo = (PVOID)NameInfoBuf; + BY_HANDLE_FILE_INFORMATION FileInfo; StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0", Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs)); @@ -26,6 +33,27 @@ void getinfo_dotest(ULONG Flags, PWSTR Prefix) GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); ASSERT(INVALID_HANDLE_VALUE != Handle); + + Success = GetFileInformationByHandleEx(Handle, FileAttributeTagInfo, &AttributeTagInfo, sizeof AttributeTagInfo); + ASSERT(Success); + + Success = GetFileInformationByHandleEx(Handle, FileBasicInfo, &BasicInfo, sizeof BasicInfo); + ASSERT(Success); + + Success = GetFileInformationByHandleEx(Handle, FileStandardInfo, &StandardInfo, sizeof StandardInfo); + ASSERT(Success); + + Success = GetFileInformationByHandleEx(Handle, FileNameInfo, PNameInfo, sizeof *PNameInfo); + ASSERT(!Success); + ASSERT(ERROR_MORE_DATA == GetLastError()); + ASSERT(L'\\' == PNameInfo->FileName[0]); + + Success = GetFileInformationByHandleEx(Handle, FileNameInfo, PNameInfo, sizeof NameInfoBuf); + ASSERT(Success); + + Success = GetFileInformationByHandle(Handle, &FileInfo); + ASSERT(Success); + CloseHandle(Handle); memfs_stop(memfs);