Zebediah Figura : kernelbase: Return the volume serial number in GetFileInformationByHandle().

Alexandre Julliard julliard at winehq.org
Thu Apr 9 16:04:44 CDT 2020


Module: wine
Branch: master
Commit: dab50548e0a2a22d498af0fa2b287c5e25b91bf3
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=dab50548e0a2a22d498af0fa2b287c5e25b91bf3

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Wed Apr  8 16:06:03 2020 -0500

kernelbase: Return the volume serial number in GetFileInformationByHandle().

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernelbase/file.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c
index 18b8682036..9ca184a5d0 100644
--- a/dlls/kernelbase/file.c
+++ b/dlls/kernelbase/file.c
@@ -2201,6 +2201,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH FlushFileBuffers( HANDLE file )
  */
 BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandle( HANDLE file, BY_HANDLE_FILE_INFORMATION *info )
 {
+    FILE_FS_VOLUME_INFORMATION volume_info;
     FILE_ALL_INFORMATION all_info;
     IO_STATUS_BLOCK io;
     NTSTATUS status;
@@ -2216,12 +2217,17 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandle( HANDLE file, BY_HANDLE
     info->ftLastAccessTime.dwLowDateTime  = all_info.BasicInformation.LastAccessTime.u.LowPart;
     info->ftLastWriteTime.dwHighDateTime  = all_info.BasicInformation.LastWriteTime.u.HighPart;
     info->ftLastWriteTime.dwLowDateTime   = all_info.BasicInformation.LastWriteTime.u.LowPart;
-    info->dwVolumeSerialNumber            = 0;  /* FIXME */
+    info->dwVolumeSerialNumber            = 0;
     info->nFileSizeHigh                   = all_info.StandardInformation.EndOfFile.u.HighPart;
     info->nFileSizeLow                    = all_info.StandardInformation.EndOfFile.u.LowPart;
     info->nNumberOfLinks                  = all_info.StandardInformation.NumberOfLinks;
     info->nFileIndexHigh                  = all_info.InternalInformation.IndexNumber.u.HighPart;
     info->nFileIndexLow                   = all_info.InternalInformation.IndexNumber.u.LowPart;
+
+    status = NtQueryVolumeInformationFile( file, &io, &volume_info, sizeof(volume_info), FileFsVolumeInformation );
+    if (status == STATUS_SUCCESS || status == STATUS_BUFFER_OVERFLOW)
+        info->dwVolumeSerialNumber = volume_info.VolumeSerialNumber;
+
     return TRUE;
 }
 




More information about the wine-cvs mailing list