[NETAPI32]
authorEric Kohl <eric.kohl@reactos.org>
Wed, 7 Jun 2017 22:27:34 +0000 (22:27 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Wed, 7 Jun 2017 22:27:34 +0000 (22:27 +0000)
- Implement NetServerDiskEnum, NetServerGetInfo and NetServerSetInfo. These functions call their counterparts in the server service.
- The new NetServerGetInfo function is disabled because its server side (NetrServerGetInfo) must be implemented before we can replace the Wine implemenation without loss of functionality.

svn path=/trunk/; revision=74948

reactos/dll/win32/netapi32/netapi32.c
reactos/dll/win32/netapi32/netapi32.spec
reactos/dll/win32/netapi32/srvsvc.c

index c58308c..aedaacd 100644 (file)
@@ -84,24 +84,6 @@ NET_API_STATUS WINAPI NetServerEnumEx(
     return ERROR_NO_BROWSER_SERVERS_FOUND;
 }
 
-/************************************************************
- *                NetServerDiskEnum (NETAPI32.@)
- */
-NET_API_STATUS WINAPI NetServerDiskEnum(
-    LMSTR ServerName,
-    DWORD Level,
-    LPBYTE *Bufptr,
-    DWORD PrefMaxlen,
-    LPDWORD EntriesRead,
-    LPDWORD totalentries,
-    LPDWORD Resume_Handle)
-{
-    FIXME("Stub (%s %d %p %d %p %p %p)\n", debugstr_w(ServerName),
-     Level, Bufptr, PrefMaxlen, EntriesRead, totalentries, Resume_Handle);
-
-    return ERROR_NO_BROWSER_SERVERS_FOUND;
-}
-
 /************************************************************
  *                NetServerGetInfo  (NETAPI32.@)
  */
index 38b6902..f2cba4b 100644 (file)
 @ stdcall NetServerEnum(wstr long ptr long ptr ptr long wstr ptr)
 @ stdcall NetServerEnumEx(wstr long ptr long ptr ptr long wstr wstr)
 @ stdcall NetServerGetInfo(wstr long ptr)
-@ stub NetServerSetInfo
+@ stdcall NetServerSetInfo(wstr long ptr ptr)
 @ stub NetServerTransportAdd
 @ stub NetServerTransportAddEx
 @ stub NetServerTransportDel
index 6b3374d..0d4495e 100644 (file)
@@ -232,6 +232,126 @@ NetRemoteTOD(
 }
 
 
+NET_API_STATUS
+WINAPI
+NetServerDiskEnum(
+    _In_ LMSTR servername,
+    _In_ DWORD level,
+    _Out_ LPBYTE *bufptr,
+    _In_ DWORD prefmaxlen,
+    _Out_ LPDWORD entriesread,
+    _Out_ LPDWORD totalentries,
+    _Inout_ LPDWORD resume_handle)
+{
+    DISK_ENUM_CONTAINER EnumContainer;
+    NET_API_STATUS status;
+
+    TRACE("NetServerDiskEnum(%s %lu %p %lu %p %p %p)\n",
+          debugstr_w(servername), level, bufptr, prefmaxlen,
+          entriesread, totalentries, resume_handle);
+
+    EnumContainer.EntriesRead = 0;
+    EnumContainer.Buffer = NULL;
+
+    RpcTryExcept
+    {
+        status = NetrServerDiskEnum(servername,
+                                    level,
+                                    &EnumContainer,
+                                    prefmaxlen,
+                                    totalentries,
+                                    resume_handle);
+
+        if (EnumContainer.Buffer != NULL)
+        {
+            *bufptr = (LPBYTE)EnumContainer.Buffer;
+        }
+        else
+        {
+            *bufptr = NULL;
+        }
+
+        if (EnumContainer.EntriesRead > 0)
+        {
+            *entriesread = EnumContainer.EntriesRead - 1;
+        }
+        else
+        {
+            *entriesread = 0;
+        }
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
+#if 0
+NET_API_STATUS
+WINAPI
+NetServerGetInfo(
+    LMSTR servername,
+    DWORD level,
+    LPBYTE *bufptr)
+{
+    NET_API_STATUS status;
+
+    TRACE("NetServerGetInfo(%s %lu %p)\n",
+          debugstr_w(servername), level, bufptr);
+
+    *bufptr = NULL;
+
+    RpcTryExcept
+    {
+        status = NetrServerGetInfo(servername,
+                                   level,
+                                   (LPSERVER_INFO)bufptr);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+#endif
+
+
+NET_API_STATUS
+WINAPI
+NetServerSetInfo(
+    _In_ LPWSTR servername,
+    _In_ DWORD level,
+    _In_ LPBYTE buf,
+    _Out_ LPDWORD parm_err)
+{
+    NET_API_STATUS status;
+
+    TRACE("NetServerSetInfo(%s %lu %p %p)\n",
+          debugstr_w(servername), level, buf, parm_err);
+
+    RpcTryExcept
+    {
+        status = NetrServerSetInfo(servername,
+                                   level,
+                                   (LPSERVER_INFO)&buf,
+                                   parm_err);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
 NET_API_STATUS
 WINAPI
 NetSessionDel(