From 4f573a59dc46e0c158a7f8ce04001f5d4d4fc655 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 23 Mar 2015 21:47:50 +0000 Subject: [PATCH] [NETAPI32] Implement NetWkstaTransportAdd, NetWkstaTransportDel and NetWkstaTransportEnum. svn path=/trunk/; revision=66865 --- reactos/dll/win32/netapi32/netapi32.spec | 4 +- reactos/dll/win32/netapi32/wksta.c | 8 ++ reactos/dll/win32/netapi32/wksta_new.c | 119 ++++++++++++++++++++++- 3 files changed, 128 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/netapi32/netapi32.spec b/reactos/dll/win32/netapi32/netapi32.spec index 18e2f79ac83..62f3129d15c 100644 --- a/reactos/dll/win32/netapi32/netapi32.spec +++ b/reactos/dll/win32/netapi32/netapi32.spec @@ -255,8 +255,8 @@ @ stub NetValidatePasswordPolicyFree @ stdcall NetWkstaGetInfo(wstr long ptr) @ stdcall NetWkstaSetInfo(wstr long ptr ptr) -@ stub NetWkstaTransportAdd -@ stub NetWkstaTransportDel +@ stdcall NetWkstaTransportAdd(wstr long ptr ptr) +@ stdcall NetWkstaTransportDel(wstr wstr long) @ stdcall NetWkstaTransportEnum(wstr long ptr long ptr ptr ptr) @ stdcall NetWkstaUserEnum(wstr long ptr long ptr ptr ptr) @ stdcall NetWkstaUserGetInfo(wstr long ptr) diff --git a/reactos/dll/win32/netapi32/wksta.c b/reactos/dll/win32/netapi32/wksta.c index d1551873cd0..bfc9f3dbe9f 100644 --- a/reactos/dll/win32/netapi32/wksta.c +++ b/reactos/dll/win32/netapi32/wksta.c @@ -43,6 +43,7 @@ DECLSPEC_HIDDEN BOOL NETAPI_IsLocalComputer( LMCSTR name ) return ret && !strcmpiW( name, buf ); } +#if 0 static void wprint_mac(WCHAR* buffer, int len, const MIB_IFROW *ifRow) { int i; @@ -72,6 +73,7 @@ static void wprint_mac(WCHAR* buffer, int len, const MIB_IFROW *ifRow) } buffer[2*i]=0; } +#endif /* Theoretically this could be too short, except that MS defines * MAX_ADAPTER_NAME as 128, and MAX_INTERFACE_NAME_LEN as 256, and both @@ -84,6 +86,7 @@ static void wprint_mac(WCHAR* buffer, int len, const MIB_IFROW *ifRow) #define NBT_TRANSPORT_NAME_HEADER "\\Device\\NetBT_Tcpip_" #define UNKNOWN_TRANSPORT_NAME_HEADER "\\Device\\UnknownTransport_" +#if 0 static void wprint_name(WCHAR *buffer, int len, ULONG transport, PMIB_IFROW ifRow) { @@ -109,6 +112,7 @@ static void wprint_name(WCHAR *buffer, int len, ULONG transport, *ptr1 = *ptr2; *ptr1 = '\0'; } +#endif /*********************************************************************** * NetWkstaTransportEnum (NETAPI32.@) @@ -125,6 +129,7 @@ struct WkstaTransportEnumData /**********************************************************************/ +#if 0 static BOOL WkstaEnumAdaptersCallback(UCHAR totalLANAs, UCHAR lanaIndex, ULONG transport, const NetBIOSAdapterImpl *data, void *closure) { @@ -214,9 +219,11 @@ static BOOL WkstaEnumAdaptersCallback(UCHAR totalLANAs, UCHAR lanaIndex, ret = FALSE; return ret; } +#endif /**********************************************************************/ +#if 0 NET_API_STATUS WINAPI NetWkstaTransportEnum(LMSTR ServerName, DWORD level, PBYTE* pbuf, DWORD prefmaxlen, LPDWORD read_entries, @@ -271,6 +278,7 @@ NetWkstaTransportEnum(LMSTR ServerName, DWORD level, PBYTE* pbuf, } return ret; } +#endif /************************************************************ diff --git a/reactos/dll/win32/netapi32/wksta_new.c b/reactos/dll/win32/netapi32/wksta_new.c index 4b8240eb3db..62280473f94 100644 --- a/reactos/dll/win32/netapi32/wksta_new.c +++ b/reactos/dll/win32/netapi32/wksta_new.c @@ -402,10 +402,127 @@ NetWkstaSetInfo( } +NET_API_STATUS +WINAPI +NetWkstaTransportAdd( + LPWSTR servername, + DWORD level, + LPBYTE buf, + LPDWORD parm_err) +{ + NET_API_STATUS status; + + TRACE("NetWkstaTransportAdd(%s, %d, %p, %p)\n", debugstr_w(servername), + level, buf, parm_err); + + RpcTryExcept + { + status = NetrWkstaTransportAdd(servername, + level, + (LPWKSTA_TRANSPORT_INFO_0)buf, + parm_err); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetWkstaTransportDel( + LPWSTR servername, + LPWSTR transportname, + DWORD ucond) +{ + NET_API_STATUS status; + + TRACE("NetWkstaTransportDel(%s, %s, %d)\n", debugstr_w(servername), + debugstr_w(transportname), ucond); + + RpcTryExcept + { + status = NetrWkstaTransportDel(servername, + transportname, + ucond); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetWkstaTransportEnum( + LPWSTR servername, + DWORD level, + LPBYTE *bufptr, + DWORD prefmaxlen, + LPDWORD entriesread, + LPDWORD totalentries, + LPDWORD resumehandle) +{ + WKSTA_TRANSPORT_ENUM_STRUCT TransportEnumInfo; + WKSTA_TRANSPORT_INFO_0_CONTAINER Container0; + NET_API_STATUS status; + + TRACE("NetWkstaTransportEnum(%s, %d, %p, %d, %p, %p, %p)\n", debugstr_w(servername), + level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle); + + TransportEnumInfo.Level = level; + switch (level) + { + case 0: + TransportEnumInfo.WkstaTransportInfo.Level0 = &Container0; + Container0.EntriesRead = 0; + Container0.Buffer = NULL; + break; + + default: + return ERROR_INVALID_PARAMETER; + } + + RpcTryExcept + { + status = NetrWkstaTransportEnum(servername, + &TransportEnumInfo, + prefmaxlen, + totalentries, + resumehandle); + if (status == NERR_Success || status == ERROR_MORE_DATA) + { + switch (level) + { + case 0: + *bufptr = (LPBYTE)TransportEnumInfo.WkstaTransportInfo.Level0->Buffer; + *entriesread = TransportEnumInfo.WkstaTransportInfo.Level0->EntriesRead; + break; + } + } + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + NET_API_STATUS WINAPI NetWkstaUserEnum( - LMSTR servername, + LPWSTR servername, DWORD level, LPBYTE *bufptr, DWORD prefmaxlen, -- 2.17.1