[NETAPI32]
authorEric Kohl <eric.kohl@reactos.org>
Mon, 23 Mar 2015 21:47:50 +0000 (21:47 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Mon, 23 Mar 2015 21:47:50 +0000 (21:47 +0000)
Implement NetWkstaTransportAdd, NetWkstaTransportDel and NetWkstaTransportEnum.

svn path=/trunk/; revision=66865

reactos/dll/win32/netapi32/netapi32.spec
reactos/dll/win32/netapi32/wksta.c
reactos/dll/win32/netapi32/wksta_new.c

index 18e2f79..62f3129 100644 (file)
 @ 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)
index d155187..bfc9f3d 100644 (file)
@@ -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
 
 
 /************************************************************
index 4b8240e..6228047 100644 (file)
@@ -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,