diff --git a/dlls/ntdll/tests/pipe.c b/dlls/ntdll/tests/pipe.c
index 358e7020698598655890a444aa6d9b6378417d97..26c38b0b385e1ceea73442473ea4f6fc25211d1a 100644
--- a/dlls/ntdll/tests/pipe.c
+++ b/dlls/ntdll/tests/pipe.c
@@ -160,7 +160,7 @@ static void test_create_invalid(void)
     ok(!res, "NtCreateNamedPipeFile returned %x\n", res);
 
     res = pNtQueryInformationFile(handle, &iosb, &info, sizeof(info), (FILE_INFORMATION_CLASS)24);
-    todo_wine ok(res == STATUS_ACCESS_DENIED, "NtQueryInformationFile returned %x\n", res);
+    ok(res == STATUS_ACCESS_DENIED, "NtQueryInformationFile returned %x\n", res);
 
 /* test FILE_CREATE creation disposition */
     res = pNtCreateNamedPipeFile(&handle2, SYNCHRONIZE, &attr, &iosb, FILE_SHARE_READ | FILE_SHARE_WRITE, 2 /*FILE_CREATE*/,
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 66664bbc30189e9cf999692b14b46ee005528876..750f3bc87dbec0743e36d0b7c940c69064d42e90 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -1005,9 +1005,12 @@ DECL_HANDLER(get_named_pipe_info)
     server = get_pipe_server_obj( current->process, req->handle, FILE_READ_ATTRIBUTES );
     if (!server)
     {
+        if (get_error() != STATUS_OBJECT_TYPE_MISMATCH)
+            return;
+
         clear_error();
         client = (struct pipe_client *)get_handle_obj( current->process, req->handle,
-                                                       FILE_READ_ATTRIBUTES, &pipe_client_ops );
+                                                       0, &pipe_client_ops );
         if (!client) return;
         server = client->server;
     }