From af0a104d59348d436979a6d74bc363e0b5775367 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Wed, 25 Feb 2015 22:11:41 +0000 Subject: [PATCH] [INCLUDE] wkssvc.idl: Add NetrWkstaUserGetInfo and NetrWkstaUserSetInfo definitions based on the Samba wkssvc.idl and MSDN. [NETAPI32] - Implement NetWkstaUserGetInfo and NetWkstaUserSetInfo. - Add some debug output. [WKSSVC] Add NetrWkstaUserGetInfo and NetrWkstaUserSetInfo stubs. CORE-9248 svn path=/trunk/; revision=66459 --- reactos/base/services/wkssvc/rpcserver.c | 21 +++++-- reactos/dll/win32/netapi32/netapi32.spec | 2 +- reactos/dll/win32/netapi32/wksta.c | 2 + reactos/dll/win32/netapi32/wksta_new.c | 77 +++++++++++++++++++++++- reactos/include/reactos/idl/wkssvc.idl | 28 +++++++-- 5 files changed, 117 insertions(+), 13 deletions(-) diff --git a/reactos/base/services/wkssvc/rpcserver.c b/reactos/base/services/wkssvc/rpcserver.c index dbc3065314f..4de805c98ad 100644 --- a/reactos/base/services/wkssvc/rpcserver.c +++ b/reactos/base/services/wkssvc/rpcserver.c @@ -121,22 +121,31 @@ NetrWkstaUserEnum( /* Function 3 */ -void +unsigned long __stdcall -Opnum3NotUsedOnWire(void) +NetrWkstaUserGetInfo( + WKSSVC_IDENTIFY_HANDLE Unused, + unsigned long Level, + LPWKSTA_USER_INFO UserInfo) { + FIXME("(%s, %d, %p)\n", debugstr_w(Unused), Level, UserInfo); + UNIMPLEMENTED; -// return 0; + return 0; } /* Function 4 */ -void +unsigned long __stdcall -Opnum4NotUsedOnWire(void) +NetrWkstaUserSetInfo ( + WKSSVC_IDENTIFY_HANDLE Unused, + unsigned long Level, + LPWKSTA_USER_INFO UserInfo, + unsigned long *ErrorParameter) { UNIMPLEMENTED; -// return 0; + return 0; } diff --git a/reactos/dll/win32/netapi32/netapi32.spec b/reactos/dll/win32/netapi32/netapi32.spec index 3f1a89b7c85..6ad4825a399 100644 --- a/reactos/dll/win32/netapi32/netapi32.spec +++ b/reactos/dll/win32/netapi32/netapi32.spec @@ -260,7 +260,7 @@ @ 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 +@ stdcall NetWkstaUserSetInfo(wstr long ptr ptr) @ stdcall NetapipBufferAllocate(long ptr) NetApiBufferAllocate @ stdcall Netbios(ptr) @ stub NetpAccessCheck diff --git a/reactos/dll/win32/netapi32/wksta.c b/reactos/dll/win32/netapi32/wksta.c index b910b484e21..d1551873cd0 100644 --- a/reactos/dll/win32/netapi32/wksta.c +++ b/reactos/dll/win32/netapi32/wksta.c @@ -276,6 +276,7 @@ NetWkstaTransportEnum(LMSTR ServerName, DWORD level, PBYTE* pbuf, /************************************************************ * NetWkstaUserGetInfo (NETAPI32.@) */ +#if 0 NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level, PBYTE* bufptr) { @@ -413,6 +414,7 @@ NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level, } return NERR_Success; } +#endif /************************************************************ * NetWkstaUserEnum (NETAPI32.@) diff --git a/reactos/dll/win32/netapi32/wksta_new.c b/reactos/dll/win32/netapi32/wksta_new.c index b9ad15967f0..7ca7cdd7763 100644 --- a/reactos/dll/win32/netapi32/wksta_new.c +++ b/reactos/dll/win32/netapi32/wksta_new.c @@ -147,7 +147,8 @@ NetGetJoinInformation( { NET_API_STATUS status; - FIXME("Stub %s %p %p\n", wine_dbgstr_w(Server), Name, type); + TRACE("NetGetJoinInformation(%s %p %p)\n", wine_dbgstr_w(Server), + Name, type); if (Name == NULL || type == NULL) return ERROR_INVALID_PARAMETER; @@ -177,6 +178,9 @@ NetWkstaGetInfo( { NET_API_STATUS status; + TRACE("NetWkstaGetInfo(%s, %d, %p)\n", debugstr_w(servername), + level, bufptr); + *bufptr = NULL; RpcTryExcept @@ -205,6 +209,9 @@ NetWkstaSetInfo( { NET_API_STATUS status; + TRACE("NetWkstaSetInfo(%s, %d, %p, %p)\n", debugstr_w(servername), + level, buffer, parm_err); + RpcTryExcept { status = NetrWkstaSetInfo(servername, @@ -238,7 +245,7 @@ NetWkstaUserEnum( WKSTA_USER_INFO_1_CONTAINER Level1; NET_API_STATUS status; - TRACE("(%s, %d, %p, %d, %p, %p, %p): stub!\n", debugstr_w(servername), + TRACE("NetWkstaUserEnum(%s, %d, %p, %d, %p, %p, %p)\n", debugstr_w(servername), level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle); UserEnumInfo.Level = level; @@ -292,4 +299,70 @@ NetWkstaUserEnum( return status; } + +NET_API_STATUS +WINAPI +NetWkstaUserGetInfo( + LPWSTR reserved, + DWORD level, + PBYTE *bufptr) +{ + NET_API_STATUS status; + + TRACE("NetWkstaUserGetInfo(%s, %d, %p)\n", debugstr_w(reserved), + level, bufptr); + + if (reserved != NULL) + return ERROR_INVALID_PARAMETER; + + *bufptr = NULL; + + RpcTryExcept + { + status = NetrWkstaUserGetInfo(NULL, + level, + (LPWKSTA_USER_INFO)bufptr); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetWkstaUserSetInfo( + LPWSTR reserved, + DWORD level, + LPBYTE buf, + LPDWORD parm_err) +{ + NET_API_STATUS status; + + TRACE("NetWkstaSetInfo(%s, %d, %p, %p)\n", debugstr_w(reserved), + level, buf, parm_err); + + if (reserved != NULL) + return ERROR_INVALID_PARAMETER; + + RpcTryExcept + { + status = NetrWkstaUserSetInfo(NULL, + level, + (LPWKSTA_USER_INFO)&buf, + parm_err); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + /* EOF */ diff --git a/reactos/include/reactos/idl/wkssvc.idl b/reactos/include/reactos/idl/wkssvc.idl index 2cfeef4af68..32568a41386 100644 --- a/reactos/include/reactos/idl/wkssvc.idl +++ b/reactos/include/reactos/idl/wkssvc.idl @@ -174,6 +174,19 @@ typedef struct _WKSTA_USER_INFO_1 [string] wchar_t *wkui1_logon_server; } WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1; +typedef struct _WKSTA_USER_INFO_1101 +{ + [string] wchar_t *wkui1101_oth_domains; +} WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101; + +typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO +{ + [case(0)] LPWKSTA_USER_INFO_0 UserInfo0; + [case(1)] LPWKSTA_USER_INFO_1 UserInfo1; + [case(1101)] LPWKSTA_USER_INFO_1101 UserInfo1101; + [default] ; +} WKSTA_USER_INFO, *PWKSTA_USER_INFO, *LPWKSTA_USER_INFO; + typedef struct _WKSTA_TRANSPORT_INFO_0 { unsigned long wkti0_quality_of_service; @@ -373,14 +386,21 @@ interface wkssvc [in, out, unique] unsigned long *ResumeHandle); /* Function 3 */ - void + unsigned long __stdcall - Opnum3NotUsedOnWire(void); + NetrWkstaUserGetInfo( + [in, string, unique] WKSSVC_IDENTIFY_HANDLE Unused, + [in] unsigned long Level, + [out, switch_is(Level)] LPWKSTA_USER_INFO UserInfo); /* Function 4 */ - void + unsigned long __stdcall - Opnum4NotUsedOnWire(void); + NetrWkstaUserSetInfo ( + [in, string, unique] WKSSVC_IDENTIFY_HANDLE Unused, + [in] unsigned long Level, + [in, switch_is(Level)] LPWKSTA_USER_INFO UserInfo, + [in, out, unique] unsigned long *ErrorParameter); /* Function 5 */ unsigned long