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