Zebediah Figura : server: FSCTL_PIPE_LISTEN on a pipe client should return STATUS_ILLEGAL_FUNCTION.

Alexandre Julliard julliard at winehq.org
Tue Oct 10 14:41:20 CDT 2017


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

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Tue Oct 10 18:40:43 2017 +0200

server: FSCTL_PIPE_LISTEN on a pipe client should return STATUS_ILLEGAL_FUNCTION.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/pipe.c | 6 ++++++
 dlls/ntdll/tests/pipe.c    | 3 +++
 server/named_pipe.c        | 4 ++++
 3 files changed, 13 insertions(+)

diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index 13afa10..9ecb916 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -224,6 +224,12 @@ static void test_CreateNamedPipe(int pipemode)
 
     ok(GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError());
 
+    /* Test ConnectNamedPipe() in both directions */
+    ok(!ConnectNamedPipe(hnp, NULL), "ConnectNamedPipe(server) succeeded\n");
+    ok(GetLastError() == ERROR_PIPE_CONNECTED, "expected ERROR_PIPE_CONNECTED, got %u\n", GetLastError());
+    ok(!ConnectNamedPipe(hFile, NULL), "ConnectNamedPipe(client) succeeded\n");
+    ok(GetLastError() == ERROR_INVALID_FUNCTION, "expected ERROR_INVALID_FUNCTION, got %u\n", GetLastError());
+
     /* don't try to do i/o if one side couldn't be opened, as it hangs */
     if (hFile != INVALID_HANDLE_VALUE) {
         HANDLE hFile2;
diff --git a/dlls/ntdll/tests/pipe.c b/dlls/ntdll/tests/pipe.c
index acead4e..824eed7 100644
--- a/dlls/ntdll/tests/pipe.c
+++ b/dlls/ntdll/tests/pipe.c
@@ -256,6 +256,9 @@ static void test_create(void)
                    res, access[k], sharing[j]);
                 ok(info.NamedPipeConfiguration == pipe_config[j], "wrong duplex status for pipe: %d, expected %d\n",
                    info.NamedPipeConfiguration, pipe_config[j]);
+
+                res = listen_pipe(hclient, hEvent, &iosb, FALSE);
+                ok(res == STATUS_ILLEGAL_FUNCTION, "expected STATUS_ILLEGAL_FUNCTION, got %x\n", res);
                 CloseHandle(hclient);
             }
 
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 5796089..f594664 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -876,6 +876,10 @@ static int pipe_client_ioctl( struct fd *fd, ioctl_code_t code, struct async *as
 
     switch(code)
     {
+    case FSCTL_PIPE_LISTEN:
+        set_error( STATUS_ILLEGAL_FUNCTION );
+        return 0;
+
     case FSCTL_PIPE_PEEK:
         return pipe_end_peek( &client->pipe_end );
 




More information about the wine-cvs mailing list