https://git.reactos.org/?p=reactos.git;a=commitdiff;h=455f33077599729c27f1f1347ad2f6329d50d1f3

commit 455f33077599729c27f1f1347ad2f6329d50d1f3
Author:     Timo Kreuzer <timo.kreu...@reactos.org>
AuthorDate: Mon Oct 16 16:11:58 2023 +0300
Commit:     Timo Kreuzer <timo.kreu...@reactos.org>
CommitDate: Sat Nov 18 17:53:42 2023 +0200

    [KERNEL32_VISTA] Sync GetFileInformationByHandleEx with wine head
---
 .../kernel32_vista/GetFileInformationByHandleEx.c  |  88 ++++++++----
 sdk/include/ndk/iotypes.h                          | 149 +++++++++++++--------
 sdk/include/psdk/winbase.h                         |  15 ++-
 3 files changed, 171 insertions(+), 81 deletions(-)

diff --git a/dll/win32/kernel32/kernel32_vista/GetFileInformationByHandleEx.c 
b/dll/win32/kernel32/kernel32_vista/GetFileInformationByHandleEx.c
index e515d30952e..1f671595eb0 100644
--- a/dll/win32/kernel32/kernel32_vista/GetFileInformationByHandleEx.c
+++ b/dll/win32/kernel32/kernel32_vista/GetFileInformationByHandleEx.c
@@ -4,51 +4,86 @@
 #include <ndk/rtlfuncs.h>
 #include <ndk/iofuncs.h>
 
+#define NDEBUG
+#include <debug.h>
+
+#undef FIXME
+#define FIXME DPRINT1
+
 /* Taken from Wine kernel32/file.c */
 
 /***********************************************************************
-*             GetFileInformationByHandleEx (KERNEL32.@)
-*/
-BOOL WINAPI GetFileInformationByHandleEx( HANDLE handle, 
FILE_INFO_BY_HANDLE_CLASS class,
-                                          LPVOID info, DWORD size )
+ *     GetFileInformationByHandleEx   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandleEx(HANDLE handle, 
FILE_INFO_BY_HANDLE_CLASS class,
+    LPVOID info, DWORD size)
 {
     NTSTATUS status;
     IO_STATUS_BLOCK io;
 
     switch (class)
     {
-    case FileStreamInfo:
-    case FileCompressionInfo:
-    case FileAttributeTagInfo:
     case FileRemoteProtocolInfo:
-    case FileFullDirectoryInfo:
-    case FileFullDirectoryRestartInfo:
     case FileStorageInfo:
-    case FileAlignmentInfo:
-    case FileIdInfo:
-    case FileIdExtdDirectoryInfo:
-    case FileIdExtdDirectoryRestartInfo:
-        //FIXME( "%p, %u, %p, %u\n", handle, class, info, size );
-        SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
+    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;
 
+    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;
+
     case FileBasicInfo:
-        status = NtQueryInformationFile( handle, &io, info, size, 
FileBasicInformation );
+        status = NtQueryInformationFile(handle, &io, info, size, 
FileBasicInformation);
         break;
 
     case FileStandardInfo:
-        status = NtQueryInformationFile( handle, &io, info, size, 
FileStandardInformation );
+        status = NtQueryInformationFile(handle, &io, info, size, 
FileStandardInformation);
         break;
 
     case FileNameInfo:
-        status = NtQueryInformationFile( handle, &io, info, size, 
FileNameInformation );
+        status = NtQueryInformationFile(handle, &io, info, size, 
FileNameInformation);
+        break;
+
+    case FileIdInfo:
+        status = NtQueryInformationFile(handle, &io, info, size, 
FileIdInformation);
         break;
 
     case FileIdBothDirectoryRestartInfo:
     case FileIdBothDirectoryInfo:
-        status = NtQueryDirectoryFile( handle, NULL, NULL, NULL, &io, info, 
size,
-                                       FileIdBothDirectoryInformation, FALSE, 
NULL,
-                                       (class == 
FileIdBothDirectoryRestartInfo) );
+        status = NtQueryDirectoryFile(handle, NULL, NULL, NULL, &io, info, 
size,
+            FileIdBothDirectoryInformation, FALSE, NULL,
+            (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:
@@ -57,14 +92,19 @@ BOOL WINAPI GetFileInformationByHandleEx( HANDLE handle, 
FILE_INFO_BY_HANDLE_CLA
     case FileIoPriorityHintInfo:
     case FileEndOfFileInfo:
     default:
-        SetLastError( ERROR_INVALID_PARAMETER );
+        SetLastError(ERROR_INVALID_PARAMETER);
         return FALSE;
     }
 
-    if (status != STATUS_SUCCESS)
+#ifdef __REACTOS__
+    if (!NT_SUCCESS(status))
     {
-        SetLastError( RtlNtStatusToDosError( status ) );
+        SetLastError(RtlNtStatusToDosError(status));
         return FALSE;
     }
+
     return TRUE;
+#else
+    return set_ntstatus(status);
+#endif
 }
diff --git a/sdk/include/ndk/iotypes.h b/sdk/include/ndk/iotypes.h
index 36914d364a3..6f5ef0bbaea 100644
--- a/sdk/include/ndk/iotypes.h
+++ b/sdk/include/ndk/iotypes.h
@@ -284,63 +284,100 @@ typedef enum _BUS_DATA_TYPE
 typedef enum _FILE_INFORMATION_CLASS
 {
     FileDirectoryInformation = 1,
-    FileFullDirectoryInformation,
-    FileBothDirectoryInformation,
-    FileBasicInformation,
-    FileStandardInformation,
-    FileInternalInformation,
-    FileEaInformation,
-    FileAccessInformation,
-    FileNameInformation,
-    FileRenameInformation,
-    FileLinkInformation,
-    FileNamesInformation,
-    FileDispositionInformation,
-    FilePositionInformation,
-    FileFullEaInformation,
-    FileModeInformation,
-    FileAlignmentInformation,
-    FileAllInformation,
-    FileAllocationInformation,
-    FileEndOfFileInformation,
-    FileAlternateNameInformation,
-    FileStreamInformation,
-    FilePipeInformation,
-    FilePipeLocalInformation,
-    FilePipeRemoteInformation,
-    FileMailslotQueryInformation,
-    FileMailslotSetInformation,
-    FileCompressionInformation,
-    FileObjectIdInformation,
-    FileCompletionInformation,
-    FileMoveClusterInformation,
-    FileQuotaInformation,
-    FileReparsePointInformation,
-    FileNetworkOpenInformation,
-    FileAttributeTagInformation,
-    FileTrackingInformation,
-    FileIdBothDirectoryInformation,
-    FileIdFullDirectoryInformation,
-    FileValidDataLengthInformation,
-    FileShortNameInformation,
-    FileIoCompletionNotificationInformation,
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-    FileIoStatusBlockRangeInformation,
-    FileIoPriorityHintInformation,
-    FileSfioReserveInformation,
-    FileSfioVolumeInformation,
-    FileHardLinkInformation,
-    FileProcessIdsUsingFileInformation,
-    FileNormalizedNameInformation,
-    FileNetworkPhysicalNameInformation,
+    FileFullDirectoryInformation = 2,
+    FileBothDirectoryInformation = 3,
+    FileBasicInformation = 4,
+    FileStandardInformation = 5,
+    FileInternalInformation = 6,
+    FileEaInformation = 7,
+    FileAccessInformation = 8,
+    FileNameInformation = 9,
+    FileRenameInformation = 10,
+    FileLinkInformation = 11,
+    FileNamesInformation = 12,
+    FileDispositionInformation = 13,
+    FilePositionInformation = 14,
+    FileFullEaInformation = 15,
+    FileModeInformation = 16,
+    FileAlignmentInformation = 17,
+    FileAllInformation = 18,
+    FileAllocationInformation = 19,
+    FileEndOfFileInformation = 20,
+    FileAlternateNameInformation = 21,
+    FileStreamInformation = 22,
+    FilePipeInformation = 23,
+    FilePipeLocalInformation = 24,
+    FilePipeRemoteInformation = 25,
+    FileMailslotQueryInformation = 26,
+    FileMailslotSetInformation = 27,
+    FileCompressionInformation = 28,
+    FileObjectIdInformation = 29,
+    FileCompletionInformation = 30,
+    FileMoveClusterInformation = 31,
+    FileQuotaInformation = 32,
+    FileReparsePointInformation = 33,
+    FileNetworkOpenInformation = 34,
+    FileAttributeTagInformation = 35,
+    FileTrackingInformation = 36,
+    FileIdBothDirectoryInformation = 37,
+    FileIdFullDirectoryInformation = 38,
+    FileValidDataLengthInformation = 39,
+    FileShortNameInformation = 40,
+    FileIoCompletionNotificationInformation = 41,
+#if (NTDDI_VERSION >= NTDDI_VISTA) || defined(__REACTOS__)
+    FileIoStatusBlockRangeInformation = 42,
+    FileIoPriorityHintInformation = 43,
+    FileSfioReserveInformation = 44,
+    FileSfioVolumeInformation = 45,
+    FileHardLinkInformation = 46,
+    FileProcessIdsUsingFileInformation = 47,
+    FileNormalizedNameInformation = 48,
+    FileNetworkPhysicalNameInformation = 49,
 #endif
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-    FileIdGlobalTxDirectoryInformation,
-    FileIsRemoteDeviceInformation,
-    FileUnusedInformation,
-    FileNumaNodeInformation,
-    FileStandardLinkInformation,
-    FileRemoteProtocolInformation,
+#if (NTDDI_VERSION >= NTDDI_WIN7) || defined(__REACTOS__)
+    FileIdGlobalTxDirectoryInformation = 50,
+    FileIsRemoteDeviceInformation = 51,
+    FileAttributeCacheInformation = 52, // FileUnusedInformation since Windows 
8.1
+    FileNumaNodeInformation = 53,
+    FileStandardLinkInformation = 54,
+    FileRemoteProtocolInformation = 55,
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN8) || defined(__REACTOS__)
+    FileRenameInformationBypassAccessCheck = 56,
+    FileLinkInformationBypassAccessCheck = 57,
+    FileVolumeNameInformation = 58,
+    FileIdInformation = 59,
+    FileIdExtdDirectoryInformation = 60,
+#endif
+#if (NTDDI_VERSION >= NTDDI_WINBLUE) || defined(__REACTOS__)
+    FileReplaceCompletionInformation = 61,
+    FileHardLinkFullIdInformation = 62,
+    FileIdExtdBothDirectoryInformation = 63, // Update 1
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN10_RS1) || defined(__REACTOS__)
+    FileDispositionInformationEx = 64,
+    FileRenameInformationEx = 65,
+    FileRenameInformationExBypassAccessCheck = 66,
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN10_RS2) || defined(__REACTOS__)
+    FileDesiredStorageClassInformation = 67,
+    FileStatInformation = 68,
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN10_RS3) || defined(__REACTOS__)
+    FileMemoryPartitionInformation = 69,
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN10_RS4) || defined(__REACTOS__)
+    FileStatLxInformation = 70,
+    FileCaseSensitiveInformation = 71,
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN10_RS5) || defined(__REACTOS__)
+    FileLinkInformationEx = 72,
+    FileLinkInformationExBypassAccessCheck = 73,
+    FileStorageReserveIdInformation = 74,
+    FileCaseSensitiveInformationForceAccessCheck = 75,
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN11) || defined(__REACTOS__) // 10.0.20150.1000
+    FileKnownFolderInformation = 76,
 #endif
     FileMaximumInformation
 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
diff --git a/sdk/include/psdk/winbase.h b/sdk/include/psdk/winbase.h
index 397ad4d92cc..fa634127695 100644
--- a/sdk/include/psdk/winbase.h
+++ b/sdk/include/psdk/winbase.h
@@ -985,6 +985,7 @@ typedef struct _FILE_ID_DESCRIPTOR {
     } DUMMYUNIONNAME;
 } FILE_ID_DESCRIPTOR, *LPFILE_ID_DESCRIPTOR;
 
+#if (NTDDI_VERSION >= NTDDI_LONGHORN) || defined(__REACTOS__)
 typedef enum _FILE_INFO_BY_HANDLE_CLASS {
     FileBasicInfo,
     FileStandardInfo,
@@ -1002,13 +1003,25 @@ typedef enum _FILE_INFO_BY_HANDLE_CLASS {
     FileRemoteProtocolInfo,
     FileFullDirectoryInfo,
     FileFullDirectoryRestartInfo,
+#if (NTDDI_VERSION >= NTDDI_WIN8) || defined(__REACTOS__)
     FileStorageInfo,
     FileAlignmentInfo,
     FileIdInfo,
     FileIdExtdDirectoryInfo,
     FileIdExtdDirectoryRestartInfo,
-    MaximumFileInfoByHandlesClass
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN10_RS1) || defined(__REACTOS__)
+    FileDispositionInfoEx,
+    FileRenameInfoEx,
+#endif
+#if (NTDDI_VERSION >= NTDDI_WIN10_19H1) || defined(__REACTOS__)
+    FileCaseSensitiveInfo,
+    FileNormalizedNameInfo,
+#endif
+    MaximumFileInfoByHandleClass,
+    MaximumFileInfoByHandlesClass = MaximumFileInfoByHandleClass // Old name
 } FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
+#endif
 
 typedef struct _FILE_ID_BOTH_DIR_INFO {
     DWORD         NextEntryOffset;

Reply via email to