Hans Leidekker : netapi32: Add a partial implementation of NetUserEnum.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Feb 16 10:01:21 CST 2015


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Mon Feb 16 14:42:29 2015 +0100

netapi32: Add a partial implementation of NetUserEnum.

---

 dlls/netapi32/netapi32.c | 63 ++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 58 insertions(+), 5 deletions(-)

diff --git a/dlls/netapi32/netapi32.c b/dlls/netapi32/netapi32.c
index d2a61fa..3823fa9 100644
--- a/dlls/netapi32/netapi32.c
+++ b/dlls/netapi32/netapi32.c
@@ -2287,13 +2287,66 @@ NetUserGetLocalGroups(LPCWSTR servername, LPCWSTR username, DWORD level,
  */
 NET_API_STATUS WINAPI
 NetUserEnum(LPCWSTR servername, DWORD level, DWORD filter, LPBYTE* bufptr,
-	    DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries,
-	    LPDWORD resume_handle)
+            DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries,
+            LPDWORD resume_handle)
 {
-  FIXME("(%s,%d, 0x%d,%p,%d,%p,%p,%p) stub!\n", debugstr_w(servername), level,
-        filter, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
+    NET_API_STATUS status;
+    USER_INFO_0 *info;
+    WCHAR *user;
+    DWORD size;
+
+    TRACE("(%s, %u, 0x%x, %p, %u, %p, %p, %p)\n", debugstr_w(servername), level,
+          filter, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
+
+    status = NETAPI_ValidateServername(servername);
+    if (status != NERR_Success)
+        return status;
 
-  return ERROR_ACCESS_DENIED;
+    if (!NETAPI_IsLocalComputer(servername))
+    {
+        FIXME("Only implemented for local computer, but remote server"
+              "%s was requested.\n", debugstr_w(servername));
+        return NERR_InvalidComputer;
+    }
+
+    if (level)
+    {
+        FIXME("level %u not supported\n", level);
+        return ERROR_INVALID_LEVEL;
+    }
+
+    size = UNLEN + 1;
+    status = NetApiBufferAllocate(size * sizeof(WCHAR), (void **)&user);
+    if (status != NERR_Success)
+        return status;
+
+    if (!GetUserNameW(user, &size))
+    {
+        NetApiBufferFree(user);
+        return ERROR_NOT_ENOUGH_MEMORY;
+    }
+
+    size = sizeof(*info) + (strlenW(user) + 1) * sizeof(WCHAR);
+
+    if (prefmaxlen < size)
+        status = ERROR_MORE_DATA;
+    else
+        status = NetApiBufferAllocate(size, (void **)&info);
+
+    if (status != NERR_Success)
+    {
+        NetApiBufferFree(user);
+        return status;
+    }
+
+    info->usri0_name = (WCHAR *)((char *)info + sizeof(*info));
+    strcpyW(info->usri0_name, user);
+
+    *bufptr = (BYTE *)info;
+    *entriesread = *totalentries = 1;
+
+    NetApiBufferFree(user);
+    return NERR_Success;
 }
 
 /************************************************************




More information about the wine-cvs mailing list