From 544223fa5aec916851b4b1e666f4ee0660dd8e47 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Wed, 7 Jun 2017 23:35:09 +0000 Subject: [PATCH] [NETAPI32] Implement NetServerTransportAdd, NetServerTransportAddEx, NetServerTransportDel and NetServertransportEnum. These functions call their counterparts in the server service. svn path=/trunk/; revision=74949 --- reactos/dll/win32/netapi32/netapi32.spec | 8 +- reactos/dll/win32/netapi32/srvsvc.c | 153 +++++++++++++++++++++++ 2 files changed, 157 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/netapi32/netapi32.spec b/reactos/dll/win32/netapi32/netapi32.spec index f2cba4b3721..95356075877 100644 --- a/reactos/dll/win32/netapi32/netapi32.spec +++ b/reactos/dll/win32/netapi32/netapi32.spec @@ -212,10 +212,10 @@ @ stdcall NetServerEnumEx(wstr long ptr long ptr ptr long wstr wstr) @ stdcall NetServerGetInfo(wstr long ptr) @ stdcall NetServerSetInfo(wstr long ptr ptr) -@ stub NetServerTransportAdd -@ stub NetServerTransportAddEx -@ stub NetServerTransportDel -@ stub NetServerTransportEnum +@ stdcall NetServerTransportAdd(wstr long ptr) +@ stdcall NetServerTransportAddEx(wstr long ptr) +@ stdcall NetServerTransportDel(wstr long ptr) +@ stdcall NetServerTransportEnum(wstr long ptr long ptr ptr ptr) @ stub NetServiceControl @ stub NetServiceEnum @ stub NetServiceGetInfo diff --git a/reactos/dll/win32/netapi32/srvsvc.c b/reactos/dll/win32/netapi32/srvsvc.c index 0d4495e5af1..a932592425f 100644 --- a/reactos/dll/win32/netapi32/srvsvc.c +++ b/reactos/dll/win32/netapi32/srvsvc.c @@ -352,6 +352,159 @@ NetServerSetInfo( } +NET_API_STATUS +WINAPI +NetServerTransportAdd( + _In_ LPWSTR servername, + _In_ DWORD level, + _In_ LPBYTE bufptr) +{ + NET_API_STATUS status; + + TRACE("NetServerTransportAdd(%s %lu %p)\n", + debugstr_w(servername), level, bufptr); + + RpcTryExcept + { + status = NetrServerTransportAdd(servername, + level, + (LPSERVER_TRANSPORT_INFO_0)bufptr); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetServerTransportAddEx( + _In_ LPWSTR servername, + _In_ DWORD level, + _In_ LPBYTE bufptr) +{ + NET_API_STATUS status; + + TRACE("NetServerTransportAddEx(%s %lu %p)\n", + debugstr_w(servername), level, bufptr); + + RpcTryExcept + { + status = NetrServerTransportAddEx(servername, + level, + (LPTRANSPORT_INFO)bufptr); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetServerTransportDel( + _In_ LPWSTR servername, + _In_ DWORD level, + _In_ LPBYTE bufptr) +{ + NET_API_STATUS status; + + TRACE("NetServerTransportDel(%s %lu %p)\n", + debugstr_w(servername), level, bufptr); + + RpcTryExcept + { + status = NetrServerTransportDel(servername, + level, + (LPSERVER_TRANSPORT_INFO_0)bufptr); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + +NET_API_STATUS +WINAPI +NetServerTransportEnum( + _In_ LPWSTR servername, + _In_ DWORD level, + _Out_ LPBYTE *bufptr, + _In_ DWORD prefmaxlen, + _Out_ LPDWORD entriesread, + _Out_ LPDWORD totalentries, + _Inout_ LPDWORD resume_handle) +{ + SERVER_XPORT_ENUM_STRUCT EnumStruct; + SERVER_XPORT_INFO_0_CONTAINER Level0Container = {0, NULL}; + SERVER_XPORT_INFO_1_CONTAINER Level1Container = {0, NULL}; + NET_API_STATUS status; + + TRACE("NetServerTransportEnum(%s %lu %p %lu %p %p %p)\n", + debugstr_w(servername), level, bufptr, prefmaxlen, + entriesread, totalentries, resume_handle); + + EnumStruct.Level = level; + switch (level) + { + case 0: + EnumStruct.XportInfo.Level0 = &Level0Container; + break; + + case 1: + EnumStruct.XportInfo.Level1 = &Level1Container; + break; + } + + RpcTryExcept + { + status = NetrServerTransportEnum(servername, + &EnumStruct, + prefmaxlen, + totalentries, + resume_handle); + + switch (level) + { + case 0: + if (EnumStruct.XportInfo.Level0->Buffer != NULL) + { + *bufptr = (LPBYTE)EnumStruct.XportInfo.Level0->Buffer; + *entriesread = EnumStruct.XportInfo.Level0->EntriesRead; + } + break; + + case 1: + if (EnumStruct.XportInfo.Level1->Buffer != NULL) + { + *bufptr = (LPBYTE)EnumStruct.XportInfo.Level1->Buffer; + *entriesread = EnumStruct.XportInfo.Level1->EntriesRead; + } + break; + } + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return status; +} + + NET_API_STATUS WINAPI NetSessionDel(