[PATCH 1/2] kernel32: Return a non-empty username from GetNamedPipeHandleState.

Hans Leidekker hans at codeweavers.com
Wed Mar 7 09:59:39 CST 2018


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/kernel32/sync.c | 35 ++++++++++++++++++++++-------------
 1 file changed, 22 insertions(+), 13 deletions(-)

diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c
index b92c88de0f..972dbcc795 100644
--- a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -40,6 +40,7 @@
 #include "winioctl.h"
 #include "ddk/wdm.h"
 
+#include "wine/library.h"
 #include "wine/unicode.h"
 #include "kernel_private.h"
 
@@ -1784,16 +1785,22 @@ BOOL WINAPI GetNamedPipeHandleStateA(
     LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout,
     LPSTR lpUsername, DWORD nUsernameMaxSize)
 {
-    WARN("%p %p %p %p %p %p %d: semi-stub\n",
-         hNamedPipe, lpState, lpCurInstances,
-         lpMaxCollectionCount, lpCollectDataTimeout,
-         lpUsername, nUsernameMaxSize);
+    WCHAR *username = NULL;
+    BOOL ret;
 
-    if (lpUsername && nUsernameMaxSize)
-        *lpUsername = 0;
+    WARN("%p %p %p %p %p %p %d: semi-stub\n", hNamedPipe, lpState, lpCurInstances,
+         lpMaxCollectionCount, lpCollectDataTimeout, lpUsername, nUsernameMaxSize);
+
+    if (lpUsername && nUsernameMaxSize &&
+        !(username = HeapAlloc(GetProcessHeap(), 0, nUsernameMaxSize * sizeof(WCHAR)))) return FALSE;
+
+    ret = GetNamedPipeHandleStateW(hNamedPipe, lpState, lpCurInstances, lpMaxCollectionCount,
+                                   lpCollectDataTimeout, username, nUsernameMaxSize);
+    if (ret && username)
+        WideCharToMultiByte(CP_ACP, 0, username, -1, lpUsername, nUsernameMaxSize, NULL, NULL);
 
-    return GetNamedPipeHandleStateW(hNamedPipe, lpState, lpCurInstances,
-                                    lpMaxCollectionCount, lpCollectDataTimeout, NULL, 0);
+    HeapFree(GetProcessHeap(), 0, username);
+    return ret;
 }
 
 /***********************************************************************
@@ -1807,10 +1814,8 @@ BOOL WINAPI GetNamedPipeHandleStateW(
     IO_STATUS_BLOCK iosb;
     NTSTATUS status;
 
-    FIXME("%p %p %p %p %p %p %d: semi-stub\n",
-          hNamedPipe, lpState, lpCurInstances,
-          lpMaxCollectionCount, lpCollectDataTimeout,
-          lpUsername, nUsernameMaxSize);
+    FIXME("%p %p %p %p %p %p %d: semi-stub\n", hNamedPipe, lpState, lpCurInstances,
+          lpMaxCollectionCount, lpCollectDataTimeout, lpUsername, nUsernameMaxSize);
 
     if (lpMaxCollectionCount)
         *lpMaxCollectionCount = 0;
@@ -1819,7 +1824,11 @@ BOOL WINAPI GetNamedPipeHandleStateW(
         *lpCollectDataTimeout = 0;
 
     if (lpUsername && nUsernameMaxSize)
-        *lpUsername = 0;
+    {
+        const char *username = wine_get_user_name();
+        int len = MultiByteToWideChar(CP_UNIXCP, 0, username, -1, lpUsername, nUsernameMaxSize);
+        if (!len) *lpUsername = 0;
+    }
 
     if (lpState)
     {
-- 
2.11.0




More information about the wine-devel mailing list