Rob Shearman : kernel32: Implement CallNamedPipeW.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 5 13:10:25 CST 2007


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Mon Mar  5 12:06:02 2007 +0000

kernel32: Implement CallNamedPipeW.

---

 dlls/kernel32/sync.c |   37 +++++++++++++++++++++++++++++++++----
 1 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c
index eaa0f70..d3f2f4b 100644
--- a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -1515,10 +1515,39 @@ BOOL WINAPI CallNamedPipeW(
     LPVOID lpOutput, DWORD lpOutputSize,
     LPDWORD lpBytesRead, DWORD nTimeout)
 {
-    FIXME("%s %p %d %p %d %p %d\n",
-           debugstr_w(lpNamedPipeName), lpInput, lpInputSize,
-           lpOutput, lpOutputSize, lpBytesRead, nTimeout);
-    return FALSE;
+    HANDLE pipe;
+    BOOL ret;
+    DWORD mode;
+
+    TRACE("%s %p %d %p %d %p %d\n",
+          debugstr_w(lpNamedPipeName), lpInput, lpInputSize,
+          lpOutput, lpOutputSize, lpBytesRead, nTimeout);
+
+    pipe = CreateFileW(lpNamedPipeName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
+    if (pipe == INVALID_HANDLE_VALUE)
+    {
+        ret = WaitNamedPipeW(lpNamedPipeName, nTimeout);
+        if (!ret)
+            return FALSE;
+        pipe = CreateFileW(lpNamedPipeName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
+        if (pipe == INVALID_HANDLE_VALUE)
+            return FALSE;
+    }
+
+    mode = PIPE_READMODE_MESSAGE;
+    ret = SetNamedPipeHandleState(pipe, &mode, NULL, NULL);
+    if (!ret)
+    {
+        CloseHandle(pipe);
+        return FALSE;
+    }
+
+    ret = TransactNamedPipe(pipe, lpInput, lpInputSize, lpOutput, lpOutputSize, lpBytesRead, NULL);
+    CloseHandle(pipe);
+    if (!ret)
+        return FALSE;
+
+    return TRUE;
 }
 
 /******************************************************************




More information about the wine-cvs mailing list