Sebastian Lackner : ntdll: Implement FileAccessInformation class in NtQueryInformationFile.

Alexandre Julliard julliard at winehq.org
Tue Mar 7 15:44:00 CST 2017


Module: wine
Branch: master
Commit: 2c733057e9e7e3b482fd52c86506dcd53949bf22
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2c733057e9e7e3b482fd52c86506dcd53949bf22

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Tue Mar  7 17:01:52 2017 +0100

ntdll: Implement FileAccessInformation class in NtQueryInformationFile.

Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/file.c       | 13 +++++++++++++
 dlls/ntdll/tests/file.c | 24 ++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index e2cfe7f..c2678d5 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -2446,6 +2446,19 @@ 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/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 09bf688..091142a 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -3433,6 +3433,29 @@ static void test_file_id_information(void)
     CloseHandle( h );
 }
 
+static void test_file_access_information(void)
+{
+    FILE_ACCESS_INFORMATION info;
+    IO_STATUS_BLOCK io;
+    NTSTATUS status;
+    HANDLE h;
+
+    if (!(h = create_temp_file(0))) return;
+
+    status = pNtQueryInformationFile( h, &io, &info, sizeof(info) - 1, FileAccessInformation );
+    ok( status == STATUS_INFO_LENGTH_MISMATCH, "expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status );
+
+    status = pNtQueryInformationFile( (HANDLE)0xdeadbeef, &io, &info, sizeof(info), FileAccessInformation );
+    ok( status == STATUS_INVALID_HANDLE, "expected STATUS_INVALID_HANDLE, got %08x\n", status );
+
+    memset(&info, 0x11, sizeof(info));
+    status = pNtQueryInformationFile( h, &io, &info, sizeof(info), FileAccessInformation );
+    ok( status == STATUS_SUCCESS, "expected STATUS_SUCCESS, got %08x\n", status );
+    ok( info.AccessFlags == 0x13019f, "got %08x\n", info.AccessFlags );
+
+    CloseHandle( h );
+}
+
 static void test_query_volume_information_file(void)
 {
     NTSTATUS status;
@@ -4506,6 +4529,7 @@ START_TEST(file)
     test_file_disposition_information();
     test_file_completion_information();
     test_file_id_information();
+    test_file_access_information();
     test_query_volume_information_file();
     test_query_attribute_information_file();
     test_ioctl();




More information about the wine-cvs mailing list