From 5d32abc29b0a9019ca70262f32ec11ea747e53a3 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Tue, 24 Feb 2015 22:15:58 +0000 Subject: [PATCH] [NETAPI32] Implement the client side of NetWkstaSetInfo and NetWkstaUserEnum. svn path=/trunk/; revision=66441 --- reactos/dll/win32/netapi32/netapi32.spec | 4 +- reactos/dll/win32/netapi32/wksta.c | 2 + reactos/dll/win32/netapi32/wksta_new.c | 100 ++++++++++++++++++++++- 3 files changed, 103 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/netapi32/netapi32.spec b/reactos/dll/win32/netapi32/netapi32.spec index f9556c5b48b..3f1a89b7c85 100644 --- a/reactos/dll/win32/netapi32/netapi32.spec +++ b/reactos/dll/win32/netapi32/netapi32.spec @@ -254,10 +254,10 @@ @ stub NetValidatePasswordPolicy @ stub NetValidatePasswordPolicyFree @ stdcall NetWkstaGetInfo(wstr long ptr) -@ stub NetWkstaSetInfo +@ stdcall NetWkstaSetInfo(wstr long ptr ptr) @ stub NetWkstaTransportAdd @ stub NetWkstaTransportDel -@ stdcall NetWkstaTransportEnum (wstr long ptr long ptr ptr ptr) +@ stdcall NetWkstaTransportEnum(wstr long ptr long ptr ptr ptr) @ stdcall NetWkstaUserEnum(wstr long ptr long ptr ptr ptr) @ stdcall NetWkstaUserGetInfo(wstr long ptr) @ stub NetWkstaUserSetInfo diff --git a/reactos/dll/win32/netapi32/wksta.c b/reactos/dll/win32/netapi32/wksta.c index fca7e4095b1..b910b484e21 100644 --- a/reactos/dll/win32/netapi32/wksta.c +++ b/reactos/dll/win32/netapi32/wksta.c @@ -417,6 +417,7 @@ NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level, /************************************************************ * NetWkstaUserEnum (NETAPI32.@) */ +#if 0 NET_API_STATUS WINAPI NetWkstaUserEnum(LMSTR servername, DWORD level, LPBYTE* bufptr, DWORD prefmaxlen, LPDWORD entriesread, @@ -426,6 +427,7 @@ NetWkstaUserEnum(LMSTR servername, DWORD level, LPBYTE* bufptr, level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle); return ERROR_INVALID_PARAMETER; } +#endif /************************************************************ * NetpGetComputerName (NETAPI32.@) diff --git a/reactos/dll/win32/netapi32/wksta_new.c b/reactos/dll/win32/netapi32/wksta_new.c index 2500b193860..b9ad15967f0 100644 --- a/reactos/dll/win32/netapi32/wksta_new.c +++ b/reactos/dll/win32/netapi32/wksta_new.c @@ -171,7 +171,7 @@ NetGetJoinInformation( NET_API_STATUS WINAPI NetWkstaGetInfo( - LMSTR servername, + LPWSTR servername, DWORD level, LPBYTE *bufptr) { @@ -194,4 +194,102 @@ NetWkstaGetInfo( return status; } + +NET_API_STATUS +WINAPI +NetWkstaSetInfo( + LPWSTR servername, + DWORD level, + LPBYTE buffer, + LPDWORD parm_err) +{ + NET_API_STATUS status; + + RpcTryExcept + { + status = NetrWkstaSetInfo(servername, + level, + (LPWKSTA_INFO)buffer, + parm_err); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetWkstaUserEnum( + LMSTR servername, + DWORD level, + LPBYTE *bufptr, + DWORD prefmaxlen, + LPDWORD entriesread, + LPDWORD totalentries, + LPDWORD resumehandle) +{ + WKSTA_USER_ENUM_STRUCT UserEnumInfo; + WKSTA_USER_INFO_0_CONTAINER Level0; + WKSTA_USER_INFO_1_CONTAINER Level1; + NET_API_STATUS status; + + TRACE("(%s, %d, %p, %d, %p, %p, %p): stub!\n", debugstr_w(servername), + level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle); + + UserEnumInfo.Level = level; + switch (level) + { + case 0: + UserEnumInfo.WkstaUserInfo.Level0 = &Level0; + UserEnumInfo.WkstaUserInfo.Level0->EntriesRead = 0; + UserEnumInfo.WkstaUserInfo.Level0->Buffer = NULL; + break; + + case 1: + UserEnumInfo.WkstaUserInfo.Level1 = &Level1; + UserEnumInfo.WkstaUserInfo.Level1->EntriesRead = 0; + UserEnumInfo.WkstaUserInfo.Level1->Buffer = NULL; + break; + + default: + return ERROR_INVALID_PARAMETER; + } + + RpcTryExcept + { + status = NetrWkstaUserEnum(servername, + &UserEnumInfo, + prefmaxlen, + totalentries, + resumehandle); + if (status == NERR_Success || status == ERROR_MORE_DATA) + { + switch (level) + { + case 0: + *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level0->Buffer; + *entriesread = UserEnumInfo.WkstaUserInfo.Level0->EntriesRead; + break; + + case 1: + *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level1->Buffer; + *entriesread = UserEnumInfo.WkstaUserInfo.Level1->EntriesRead; + break; + } + } + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + /* EOF */