[NETAPI32]
authorEric Kohl <eric.kohl@reactos.org>
Mon, 19 Jun 2017 14:06:04 +0000 (14:06 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Mon, 19 Jun 2017 14:06:04 +0000 (14:06 +0000)
Implement I_BrowserQueryEmulatedDomains, I_BrowserResetStatistics and I_BrowserSetNetlogonState. This functions calls their counterpart in the computer browser service.

svn path=/trunk/; revision=75124

reactos/dll/win32/netapi32/browser.c
reactos/dll/win32/netapi32/netapi32.spec
reactos/sdk/include/reactos/idl/browser.idl

index 6d606d8..0b8c99b 100644 (file)
@@ -81,10 +81,57 @@ I_BrowserQueryEmulatedDomains(
     _Out_ PBROWSER_EMULATED_DOMAIN *EmulatedDomains,
     _Out_ LPDWORD EntriesRead)
 {
     _Out_ PBROWSER_EMULATED_DOMAIN *EmulatedDomains,
     _Out_ LPDWORD EntriesRead)
 {
-    FIXME("I_BrowserQueryEmulatedDomains(%s %p %p)\n",
+    BROWSER_EMULATED_DOMAIN_CONTAINER Container = {0, NULL};
+    NET_API_STATUS status;
+
+    TRACE("I_BrowserQueryEmulatedDomains(%s %p %p)\n",
           debugstr_w(ServerName), EmulatedDomains, EntriesRead);
 
           debugstr_w(ServerName), EmulatedDomains, EntriesRead);
 
-    return ERROR_NOT_SUPPORTED;
+    *EmulatedDomains = NULL;
+    *EntriesRead = 0;
+
+    RpcTryExcept
+    {
+        status = I_BrowserrQueryEmulatedDomains(ServerName,
+                                                &Container);
+
+        if (status == NERR_Success)
+        {
+            *EmulatedDomains = (PBROWSER_EMULATED_DOMAIN)Container.Buffer;
+            *EntriesRead = Container.EntriesRead;
+        }
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
+NET_API_STATUS
+WINAPI
+I_BrowserResetStatistics(
+    _In_opt_ LPCWSTR ServerName)
+{
+    NET_API_STATUS status;
+
+    TRACE("I_BrowserResetStatistics(%s)\n",
+          debugstr_w(ServerName));
+
+    RpcTryExcept
+    {
+        status = I_BrowserrResetStatistics((PWSTR)ServerName);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
 }
 
 
 }
 
 
@@ -96,11 +143,26 @@ I_BrowserSetNetlogonState(
     _In_ LPWSTR EmulatedServerName,
     _In_ DWORD Role)
 {
     _In_ LPWSTR EmulatedServerName,
     _In_ DWORD Role)
 {
-    FIXME("I_BrowserSetNetlogonState(%s %s %s %lu)\n",
+    NET_API_STATUS status;
+
+    TRACE("I_BrowserSetNetlogonState(%s %s %s %lu)\n",
           debugstr_w(ServerName), debugstr_w(ServerName),
           debugstr_w(EmulatedServerName), Role);
 
           debugstr_w(ServerName), debugstr_w(ServerName),
           debugstr_w(EmulatedServerName), Role);
 
-    return ERROR_NOT_SUPPORTED;
+    RpcTryExcept
+    {
+        status = I_BrowserrSetNetlogonState(ServerName,
+                                            DomainName,
+                                            EmulatedServerName,
+                                            Role);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
 }
 
 
 }
 
 
index 68f47b9..43fe230 100644 (file)
@@ -44,7 +44,7 @@
 @ stub I_BrowserQueryOtherDomains
 @ stub I_BrowserQueryStatistics
 @ stub I_BrowserResetNetlogonState
 @ stub I_BrowserQueryOtherDomains
 @ stub I_BrowserQueryStatistics
 @ stub I_BrowserResetNetlogonState
-@ stub I_BrowserResetStatistics
+@ stdcall I_BrowserResetStatistics(wstr)
 @ stub I_BrowserServerEnum
 @ stdcall I_BrowserSetNetlogonState(wstr wstr wstr long)
 @ stub I_NetAccountDeltas
 @ stub I_BrowserServerEnum
 @ stdcall I_BrowserSetNetlogonState(wstr wstr wstr long)
 @ stub I_NetAccountDeltas
index 943953d..abd7e16 100644 (file)
@@ -6,6 +6,21 @@
 
 typedef [handle] wchar_t *BROWSER_IDENTIFY_HANDLE;
 
 
 typedef [handle] wchar_t *BROWSER_IDENTIFY_HANDLE;
 
+cpp_quote("#ifndef _LMBROWSR_")
+typedef struct _BROWSER_EMULATED_DOMAIN
+{
+    LPWSTR DomainName;
+    LPWSTR EmulatedServerName;
+    DWORD Role;
+} BROWSER_EMULATED_DOMAIN, *PBROWSER_EMULATED_DOMAIN;
+cpp_quote("#endif")
+
+typedef struct _BROWSER_EMULATED_DOMAIN_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] PBROWSER_EMULATED_DOMAIN Buffer;
+} BROWSER_EMULATED_DOMAIN_CONTAINER, *PBROWSER_EMULATED_DOMAIN_CONTAINER;
+
 typedef struct _SERVER_INFO_100
 {
     DWORD sv100_platform_id;
 typedef struct _SERVER_INFO_100
 {
     DWORD sv100_platform_id;
@@ -76,10 +91,11 @@ interface browser
     __stdcall
     BrowserOpnum5NotUsedOnWire(void);
 
     __stdcall
     BrowserOpnum5NotUsedOnWire(void);
 
-    /* Function 6 (BrowserrResetStatistics) */
+    /* Function 6 */
     NET_API_STATUS
     __stdcall
     NET_API_STATUS
     __stdcall
-    BrowserOpnum6NotUsedOnWire(void);
+    I_BrowserrResetStatistics(
+         [in, string, unique] BROWSER_IDENTIFY_HANDLE ServerName);
 
     /* Function 7 (NetrBrowserStatisticsClear) */
     NET_API_STATUS
 
     /* Function 7 (NetrBrowserStatisticsClear) */
     NET_API_STATUS
@@ -91,15 +107,21 @@ interface browser
     __stdcall
     BrowserOpnum8NotUsedOnWire(void);
 
     __stdcall
     BrowserOpnum8NotUsedOnWire(void);
 
-    /* Function 9 (BrowserrSetNetlogonState) */
+    /* Function 9 */
     NET_API_STATUS
     __stdcall
     NET_API_STATUS
     __stdcall
-    BrowserOpnum9NotUsedOnWire(void);
+    I_BrowserrSetNetlogonState(
+        [in, string, unique] BROWSER_IDENTIFY_HANDLE ServerName,
+        [in, string] LPWSTR DomainName,
+        [in, string, unique] LPWSTR EmulatedComputerName,
+        [in] DWORD Role);
 
 
-    /* Function 10 (BrowserrQueryEmulatedDomains) */
+    /* Function 10 */
     NET_API_STATUS
     __stdcall
     NET_API_STATUS
     __stdcall
-    BrowserOpnum10NotUsedOnWire(void);
+    I_BrowserrQueryEmulatedDomains(
+        [in, string, unique] BROWSER_IDENTIFY_HANDLE ServerName,
+        [in, out] PBROWSER_EMULATED_DOMAIN_CONTAINER EmulatedDomains);
 
     /* Function 11 (BrowserrServerEnumEx) */
     NET_API_STATUS
 
     /* Function 11 (BrowserrServerEnumEx) */
     NET_API_STATUS