Jacek Caban : server: Use default_fd_get_file_info for FileAccessInformation implementation.

Alexandre Julliard julliard at winehq.org
Wed Oct 24 15:13:54 CDT 2018


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Oct 23 17:45:21 2018 +0200

server: Use default_fd_get_file_info for FileAccessInformation implementation.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/file.c | 24 ++++--------------------
 server/fd.c       | 18 +++++++++++++++++-
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index c784ee6..b571284 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -2236,7 +2236,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
         sizeof(FILE_STANDARD_INFORMATION),             /* FileStandardInformation */
         sizeof(FILE_INTERNAL_INFORMATION),             /* FileInternalInformation */
         sizeof(FILE_EA_INFORMATION),                   /* FileEaInformation */
-        sizeof(FILE_ACCESS_INFORMATION),               /* FileAccessInformation */
+        0,                                             /* FileAccessInformation */
         sizeof(FILE_NAME_INFORMATION),                 /* FileNameInformation */
         sizeof(FILE_RENAME_INFORMATION)-sizeof(WCHAR), /* FileRenameInformation */
         0,                                             /* FileLinkInformation */
@@ -2309,13 +2309,10 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
     if (len < info_sizes[class])
         return io->u.Status = STATUS_INFO_LENGTH_MISMATCH;
 
-    if (class != FileAccessInformation)
+    if ((io->u.Status = server_get_unix_fd( hFile, 0, &fd, &needs_close, NULL, NULL )))
     {
-        if ((io->u.Status = server_get_unix_fd( hFile, 0, &fd, &needs_close, NULL, NULL )))
-        {
-            if (io->u.Status != STATUS_BAD_DEVICE_TYPE) return io->u.Status;
-            return server_get_file_info( hFile, io, ptr, len, class );
-        }
+        if (io->u.Status != STATUS_BAD_DEVICE_TYPE) return io->u.Status;
+        return server_get_file_info( hFile, io, ptr, len, class );
     }
 
     switch (class)
@@ -2358,19 +2355,6 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
             info->EaSize = 0;
         }
         break;
-    case FileAccessInformation:
-        {
-            FILE_ACCESS_INFORMATION *info = ptr;
-            SERVER_START_REQ( get_object_info )
-            {
-                req->handle = wine_server_obj_handle( hFile );
-                io->u.Status = wine_server_call( req );
-                if (io->u.Status == STATUS_SUCCESS)
-                    info->AccessFlags = reply->access;
-            }
-            SERVER_END_REQ;
-        }
-        break;
     case FileEndOfFileInformation:
         if (fd_get_file_info( fd, &st, &attr ) == -1) io->u.Status = FILE_GetNtStatus();
         else fill_file_info( &st, attr, ptr, class );
diff --git a/server/fd.c b/server/fd.c
index 85d15d9..65dc8a2 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -2178,7 +2178,23 @@ void no_fd_get_file_info( struct fd *fd, obj_handle_t handle, unsigned int info_
 /* default get_file_info() routine */
 void default_fd_get_file_info( struct fd *fd, obj_handle_t handle, unsigned int info_class )
 {
-    set_error( STATUS_NOT_IMPLEMENTED );
+    switch (info_class)
+    {
+    case FileAccessInformation:
+        {
+            FILE_ACCESS_INFORMATION info;
+            if (get_reply_max_size() < sizeof(info))
+            {
+                set_error( STATUS_INFO_LENGTH_MISMATCH );
+                return;
+            }
+            info.AccessFlags = get_handle_access( current->process, handle );
+            set_reply_data( &info, sizeof(info) );
+            break;
+        }
+    default:
+        set_error( STATUS_NOT_IMPLEMENTED );
+    }
 }
 
 /* default get_volume_info() routine */




More information about the wine-cvs mailing list