Jacek Caban : ntdll/tests: Add more NtQueryInformationFile tests.

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


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

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

ntdll/tests: Add more NtQueryInformationFile tests.

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

---

 dlls/ntdll/tests/om.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
index 7eef55c..c340839 100644
--- a/dlls/ntdll/tests/om.c
+++ b/dlls/ntdll/tests/om.c
@@ -69,6 +69,7 @@ static NTSTATUS (WINAPI *pNtWaitForKeyedEvent)( HANDLE, const void *, BOOLEAN, c
 static NTSTATUS (WINAPI *pNtReleaseKeyedEvent)( HANDLE, const void *, BOOLEAN, const LARGE_INTEGER * );
 static NTSTATUS (WINAPI *pNtCreateIoCompletion)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG);
 static NTSTATUS (WINAPI *pNtOpenIoCompletion)( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES );
+static NTSTATUS (WINAPI *pNtQueryInformationFile)(HANDLE, PIO_STATUS_BLOCK, void *, ULONG, FILE_INFORMATION_CLASS);
 
 #define KEYEDEVENT_WAIT       0x0001
 #define KEYEDEVENT_WAKE       0x0002
@@ -1270,6 +1271,37 @@ static void test_symboliclink(void)
     pNtClose(dir);
 }
 
+#define test_file_info(a) _test_file_info(__LINE__,a)
+static void _test_file_info(unsigned line, HANDLE handle)
+{
+    IO_STATUS_BLOCK io;
+    char buf[256];
+    NTSTATUS status;
+
+    status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf), 0xdeadbeef);
+    ok_(__FILE__,line)(status == STATUS_INVALID_INFO_CLASS || status == STATUS_NOT_IMPLEMENTED,
+                       "expected STATUS_NOT_IMPLEMENTED, got %x\n", status);
+
+    status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf), FileAccessInformation);
+    ok_(__FILE__,line)(status == STATUS_SUCCESS, "FileAccessInformation returned %x\n", status);
+}
+
+#define test_no_file_info(a) _test_no_file_info(__LINE__,a)
+static void _test_no_file_info(unsigned line, HANDLE handle)
+{
+    IO_STATUS_BLOCK io;
+    char buf[256];
+    NTSTATUS status;
+
+    status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf), 0xdeadbeef);
+    ok_(__FILE__,line)(status == STATUS_INVALID_INFO_CLASS || status == STATUS_NOT_IMPLEMENTED,
+                       "expected STATUS_NOT_IMPLEMENTED, got %x\n", status);
+
+    status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf), FileAccessInformation);
+    ok_(__FILE__,line)(status == STATUS_OBJECT_TYPE_MISMATCH,
+                       "FileAccessInformation returned %x\n", status);
+}
+
 static void test_query_object(void)
 {
     static const WCHAR name[] = {'\\','B','a','s','e','N','a','m','e','d','O','b','j','e','c','t','s',
@@ -1351,6 +1383,7 @@ static void test_query_object(void)
     ok( status == STATUS_INFO_LENGTH_MISMATCH, "NtQueryObject failed %x\n", status );
     ok( len >= sizeof(OBJECT_TYPE_INFORMATION) + sizeof(type_event) + sizeof(WCHAR), "unexpected len %u\n", len );
 
+    test_no_file_info( handle );
     pNtClose( handle );
 
     handle = CreateEventA( NULL, FALSE, FALSE, NULL );
@@ -1361,6 +1394,7 @@ static void test_query_object(void)
     str = (UNICODE_STRING *)buffer;
     ok( str->Length == 0, "unexpected len %u\n", len );
     ok( str->Buffer == NULL, "unexpected ptr %p\n", str->Buffer );
+    test_no_file_info( handle );
     pNtClose( handle );
 
     GetWindowsDirectoryA( dir, MAX_PATH );
@@ -1401,6 +1435,7 @@ static void test_query_object(void)
     ok( len >= expected_len, "unexpected len %u\n", len );
     ok( str->Buffer && !memcmp( str->Buffer, type_file, sizeof(type_file) ),
                   "wrong/bad type name %s (%p)\n", wine_dbgstr_w(str->Buffer), str->Buffer );
+    test_file_info( handle );
 
     pNtClose( handle );
 
@@ -1418,6 +1453,7 @@ static void test_query_object(void)
     ok( str->Buffer && !memcmp( str->Buffer, type_file, sizeof(type_file) ),
                   "wrong/bad type name %s (%p)\n", wine_dbgstr_w(str->Buffer), str->Buffer );
     DeleteFileA( file1 );
+    test_file_info( handle );
     pNtClose( handle );
 
     status = pNtCreateIoCompletion( &handle, IO_COMPLETION_ALL_ACCESS, NULL, 0 );
@@ -1432,6 +1468,7 @@ static void test_query_object(void)
     ok( len >= expected_len, "unexpected len %u\n", len );
     ok( str->Buffer && !memcmp( str->Buffer, type_iocompletion, sizeof(type_iocompletion) ),
                   "wrong/bad type name %s (%p)\n", wine_dbgstr_w(str->Buffer), str->Buffer );
+    test_no_file_info( handle );
     pNtClose( handle );
 
     status = pNtCreateDirectoryObject( &handle, DIRECTORY_QUERY, NULL );
@@ -1446,6 +1483,7 @@ static void test_query_object(void)
     ok( len >= expected_len, "unexpected len %u\n", len );
     ok( str->Buffer && !memcmp( str->Buffer, type_directory, sizeof(type_directory) ),
                   "wrong/bad type name %s (%p)\n", wine_dbgstr_w(str->Buffer), str->Buffer );
+    test_no_file_info( handle );
     pNtClose( handle );
 
     size.u.LowPart = 256;
@@ -1462,6 +1500,7 @@ static void test_query_object(void)
     ok( len >= expected_len, "unexpected len %u\n", len );
     ok( str->Buffer && !memcmp( str->Buffer, type_section, sizeof(type_section) ),
                   "wrong/bad type name %s (%p)\n", wine_dbgstr_w(str->Buffer), str->Buffer );
+    test_no_file_info( handle );
     pNtClose( handle );
 
     handle = CreateMailslotA( "\\\\.\\mailslot\\test_mailslot", 100, 1000, NULL );
@@ -1478,6 +1517,7 @@ static void test_query_object(void)
     ok( len > sizeof(UNICODE_STRING) + sizeof("\\test_mailslot") * sizeof(WCHAR),
         "name too short %s\n", wine_dbgstr_w(str->Buffer) );
     trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len );
+    test_file_info( handle );
     pNtClose( handle );
 
     handle = CreateNamedPipeA( "\\\\.\\pipe\\test_pipe", PIPE_ACCESS_DUPLEX, PIPE_READMODE_BYTE,
@@ -1508,6 +1548,7 @@ static void test_query_object(void)
     ok( len >= sizeof(OBJECT_TYPE_INFORMATION) + str->Length + sizeof(WCHAR), "unexpected len %u\n", len );
     ok( str->Buffer && !memcmp( str->Buffer, type_file, sizeof(type_file) ),
                   "wrong/bad type name %s (%p)\n", wine_dbgstr_w(str->Buffer), str->Buffer );
+    test_file_info( handle );
 
     client = CreateFileA( "\\\\.\\pipe\\test_pipe", GENERIC_READ | GENERIC_WRITE,
                           0, NULL, OPEN_EXISTING, 0, 0 );
@@ -1522,6 +1563,7 @@ static void test_query_object(void)
     ok( len >= sizeof(OBJECT_TYPE_INFORMATION) + str->Length + sizeof(WCHAR), "unexpected len %u\n", len );
     ok( str->Buffer && !memcmp( str->Buffer, type_file, sizeof(type_file) ),
                   "wrong/bad type name %s (%p)\n", wine_dbgstr_w(str->Buffer), str->Buffer );
+    test_file_info( client );
 
     pNtClose( client );
     pNtClose( handle );
@@ -2064,6 +2106,7 @@ START_TEST(om)
     pNtReleaseKeyedEvent    =  (void *)GetProcAddress(hntdll, "NtReleaseKeyedEvent");
     pNtCreateIoCompletion   =  (void *)GetProcAddress(hntdll, "NtCreateIoCompletion");
     pNtOpenIoCompletion     =  (void *)GetProcAddress(hntdll, "NtOpenIoCompletion");
+    pNtQueryInformationFile =  (void *)GetProcAddress(hntdll, "NtQueryInformationFile");
 
     test_case_sensitive();
     test_namespace_pipe();




More information about the wine-cvs mailing list