Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53590
-- v2: kernelbase: Forward some more classes in GetFileInformationByHandleEx(). kernelbase: Make sure to provide a message for missing information classes in GetFileInformationByHandleEx(). kernelbase: Forward some directory info classes in GetFileInformationByHandleEx().
From: Nikolay Sivov nsivov@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53590 Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/kernelbase/file.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index 3e1fd5aec4e..c0cdfdcdf84 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -2967,12 +2967,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandleEx( HANDLE handle, FILE_ case FileStreamInfo: case FileCompressionInfo: case FileRemoteProtocolInfo: - case FileFullDirectoryInfo: - case FileFullDirectoryRestartInfo: case FileStorageInfo: case FileAlignmentInfo: - case FileIdExtdDirectoryInfo: - case FileIdExtdDirectoryRestartInfo: FIXME( "%p, %u, %p, %lu\n", handle, class, info, size ); SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); return FALSE; @@ -3004,6 +3000,20 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandleEx( HANDLE handle, FILE_ (class == FileIdBothDirectoryRestartInfo) ); break;
+ case FileFullDirectoryInfo: + case FileFullDirectoryRestartInfo: + status = NtQueryDirectoryFile( handle, NULL, NULL, NULL, &io, info, size, + FileFullDirectoryInformation, FALSE, NULL, + (class == FileFullDirectoryRestartInfo) ); + break; + + case FileIdExtdDirectoryInfo: + case FileIdExtdDirectoryRestartInfo: + status = NtQueryDirectoryFile( handle, NULL, NULL, NULL, &io, info, size, + FileIdExtdDirectoryInformation, FALSE, NULL, + (class == FileIdExtdDirectoryRestartInfo) ); + break; + case FileRenameInfo: case FileDispositionInfo: case FileAllocationInfo:
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/kernelbase/file.c | 4 ++++ include/winbase.h | 4 ++++ 2 files changed, 8 insertions(+)
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index c0cdfdcdf84..5e6d271c3b0 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -2969,6 +2969,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandleEx( HANDLE handle, FILE_ case FileRemoteProtocolInfo: case FileStorageInfo: case FileAlignmentInfo: + case FileDispositionInfoEx: + case FileRenameInfoEx: + case FileCaseSensitiveInfo: + case FileNormalizedNameInfo: FIXME( "%p, %u, %p, %lu\n", handle, class, info, size ); SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); return FALSE; diff --git a/include/winbase.h b/include/winbase.h index 277f981982d..58f21a1361a 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -802,6 +802,10 @@ typedef enum _FILE_INFO_BY_HANDLE_CLASS { FileIdInfo, FileIdExtdDirectoryInfo, FileIdExtdDirectoryRestartInfo, + FileDispositionInfoEx, + FileRenameInfoEx, + FileCaseSensitiveInfo, + FileNormalizedNameInfo, MaximumFileInfoByHandlesClass } FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/kernelbase/file.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index 5e6d271c3b0..661bc0c2778 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -2964,11 +2964,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandleEx( HANDLE handle, FILE_
switch (class) { - case FileStreamInfo: - case FileCompressionInfo: case FileRemoteProtocolInfo: case FileStorageInfo: - case FileAlignmentInfo: case FileDispositionInfoEx: case FileRenameInfoEx: case FileCaseSensitiveInfo: @@ -2977,6 +2974,18 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandleEx( HANDLE handle, FILE_ SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); return FALSE;
+ case FileStreamInfo: + status = NtQueryInformationFile( handle, &io, info, size, FileStreamInformation ); + break; + + case FileCompressionInfo: + status = NtQueryInformationFile( handle, &io, info, size, FileCompressionInformation ); + break; + + case FileAlignmentInfo: + status = NtQueryInformationFile( handle, &io, info, size, FileAlignmentInformation ); + break; + case FileAttributeTagInfo: status = NtQueryInformationFile( handle, &io, info, size, FileAttributeTagInformation ); break;