2 * COPYRIGHT: See COPYING in the top level directory
4 * FILE: dll/win32/netapi32/browser.c
5 * PURPOSE: Computer Browser service interface code
6 * PROGRAMMERS: Eric Kohl (eric.kohl@reactos.org)
9 /* INCLUDES ******************************************************************/
16 #include "browser_c.h"
19 WINE_DEFAULT_DEBUG_CHANNEL(netapi32
);
21 /* FUNCTIONS *****************************************************************/
24 BROWSER_IDENTIFY_HANDLE_bind(BROWSER_IDENTIFY_HANDLE pszSystemName
)
26 handle_t hBinding
= NULL
;
27 LPWSTR pszStringBinding
;
30 TRACE("BROWSER_IDENTIFY_HANDLE_bind() called\n");
32 status
= RpcStringBindingComposeW(NULL
,
40 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
44 /* Set the binding handle that will be used to bind to the server. */
45 status
= RpcBindingFromStringBindingW(pszStringBinding
,
49 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
52 status
= RpcStringFreeW(&pszStringBinding
);
55 // TRACE("RpcStringFree returned 0x%x\n", status);
63 BROWSER_IDENTIFY_HANDLE_unbind(BROWSER_IDENTIFY_HANDLE pszSystemName
,
68 TRACE("BROWSER_IDENTIFY_HANDLE_unbind() called\n");
70 status
= RpcBindingFree(&hBinding
);
73 TRACE("RpcBindingFree returned 0x%x\n", status
);
81 _In_opt_ LPWSTR ServerName
,
84 NET_API_STATUS status
;
86 TRACE("I_BrowserDebugTrace(%s %s)\n",
87 debugstr_w(ServerName
), Buffer
);
91 status
= I_BrowserrDebugTrace(ServerName
,
94 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
96 status
= I_RpcMapWin32Status(RpcExceptionCode());
106 I_BrowserQueryEmulatedDomains(
107 _In_opt_ LPWSTR ServerName
,
108 _Out_ PBROWSER_EMULATED_DOMAIN
*EmulatedDomains
,
109 _Out_ LPDWORD EntriesRead
)
111 BROWSER_EMULATED_DOMAIN_CONTAINER Container
= {0, NULL
};
112 NET_API_STATUS status
;
114 TRACE("I_BrowserQueryEmulatedDomains(%s %p %p)\n",
115 debugstr_w(ServerName
), EmulatedDomains
, EntriesRead
);
117 *EmulatedDomains
= NULL
;
122 status
= I_BrowserrQueryEmulatedDomains(ServerName
,
125 if (status
== NERR_Success
)
127 *EmulatedDomains
= (PBROWSER_EMULATED_DOMAIN
)Container
.Buffer
;
128 *EntriesRead
= Container
.EntriesRead
;
131 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
133 status
= I_RpcMapWin32Status(RpcExceptionCode());
143 I_BrowserQueryOtherDomains(
144 _In_opt_ LPCWSTR ServerName
,
145 _Out_ LPBYTE
*BufPtr
,
146 _Out_ LPDWORD EntriesRead
,
147 _Out_ LPDWORD TotalEntries
)
149 SERVER_INFO_100_CONTAINER Level100Container
= {0, NULL
};
150 SERVER_ENUM_STRUCT EnumStruct
;
151 NET_API_STATUS status
;
153 TRACE("I_BrowserQueryOtherDomains(%s %p %p %p)\n",
154 debugstr_w(ServerName
), BufPtr
, EntriesRead
, TotalEntries
);
156 EnumStruct
.Level
= 100;
157 EnumStruct
.ServerInfo
.Level100
= &Level100Container
;
161 status
= I_BrowserrQueryOtherDomains((PWSTR
)ServerName
,
165 if (status
== NERR_Success
|| status
== ERROR_MORE_DATA
)
167 *BufPtr
= (LPBYTE
)EnumStruct
.ServerInfo
.Level100
->Buffer
;
168 *EntriesRead
= EnumStruct
.ServerInfo
.Level100
->EntriesRead
;
171 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
173 status
= I_RpcMapWin32Status(RpcExceptionCode());
184 _In_opt_ LPCWSTR ServerName
,
185 _In_opt_ LPCWSTR Transport
,
186 _In_opt_ LPCWSTR ClientName
,
188 _Out_ LPBYTE
*BufPtr
,
189 _In_ DWORD PrefMaxLen
,
190 _Out_ LPDWORD EntriesRead
,
191 _Out_ LPDWORD TotalEntries
,
192 _In_ DWORD ServerType
,
193 _In_opt_ LPCWSTR Domain
,
194 _Inout_opt_ LPDWORD ResumeHandle
)
196 SERVER_INFO_100_CONTAINER Level100Container
= {0, NULL
};
197 SERVER_ENUM_STRUCT EnumStruct
;
198 NET_API_STATUS status
;
200 TRACE("I_BrowserServerEnum(%s %s %s %lu %p %lu %p %p %lu %s %p)\n",
201 debugstr_w(ServerName
), debugstr_w(Transport
), debugstr_w(ClientName
),
202 Level
, BufPtr
, PrefMaxLen
, EntriesRead
, TotalEntries
, ServerType
,
203 debugstr_w(Domain
), ResumeHandle
);
205 EnumStruct
.Level
= 100;
206 EnumStruct
.ServerInfo
.Level100
= &Level100Container
;
210 status
= I_BrowserrServerEnum((PWSTR
)ServerName
,
220 if (status
== NERR_Success
|| status
== ERROR_MORE_DATA
)
222 *BufPtr
= (LPBYTE
)EnumStruct
.ServerInfo
.Level100
->Buffer
;
223 *EntriesRead
= EnumStruct
.ServerInfo
.Level100
->EntriesRead
;
226 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
228 status
= I_RpcMapWin32Status(RpcExceptionCode());
238 I_BrowserQueryStatistics(
239 _In_opt_ LPCWSTR ServerName
,
240 _Inout_ LPBROWSER_STATISTICS
*Statistics
)
242 NET_API_STATUS status
;
244 TRACE("I_BrowserQueryStatistics(%s %p)\n",
245 debugstr_w(ServerName
), Statistics
);
249 status
= I_BrowserrQueryStatistics((PWSTR
)ServerName
,
252 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
254 status
= I_RpcMapWin32Status(RpcExceptionCode());
264 I_BrowserResetStatistics(
265 _In_opt_ LPCWSTR ServerName
)
267 NET_API_STATUS status
;
269 TRACE("I_BrowserResetStatistics(%s)\n",
270 debugstr_w(ServerName
));
274 status
= I_BrowserrResetStatistics((PWSTR
)ServerName
);
276 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
278 status
= I_RpcMapWin32Status(RpcExceptionCode());
288 I_BrowserResetNetlogonState(
289 _In_ LPCWSTR ServerName
)
291 NET_API_STATUS status
;
293 TRACE("I_BrowserResetNetlogonState(%s)\n",
294 debugstr_w(ServerName
));
298 status
= I_BrowserrResetNetlogonState((PWSTR
)ServerName
);
300 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
302 status
= I_RpcMapWin32Status(RpcExceptionCode());
312 I_BrowserSetNetlogonState(
313 _In_ LPWSTR ServerName
,
314 _In_ LPWSTR DomainName
,
315 _In_ LPWSTR EmulatedServerName
,
318 NET_API_STATUS status
;
320 TRACE("I_BrowserSetNetlogonState(%s %s %s %lu)\n",
321 debugstr_w(ServerName
), debugstr_w(ServerName
),
322 debugstr_w(EmulatedServerName
), Role
);
326 status
= I_BrowserrSetNetlogonState(ServerName
,
331 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
333 status
= I_RpcMapWin32Status(RpcExceptionCode());
343 NetBrowserStatisticsGet(
344 _In_ LPWSTR ServerName
,
346 _Out_ LPBYTE
*Buffer
)
348 BROWSER_STATISTICS_STRUCT StatisticsStruct
;
349 BROWSER_STATISTICS_100_CONTAINER Level100Container
= {0, NULL
};
350 BROWSER_STATISTICS_101_CONTAINER Level101Container
= {0, NULL
};
351 NET_API_STATUS status
;
353 TRACE("NetBrowserStatisticsGet(%s %lu %p)\n",
354 debugstr_w(ServerName
), Level
, Buffer
);
356 if (Level
!= 100 && Level
!= 101)
357 return ERROR_INVALID_LEVEL
;
359 StatisticsStruct
.Level
= Level
;
363 StatisticsStruct
.Statistics
.Level100
= &Level100Container
;
367 StatisticsStruct
.Statistics
.Level101
= &Level101Container
;
373 status
= NetrBrowserStatisticsGet(ServerName
,
380 if (StatisticsStruct
.Statistics
.Level100
->Buffer
!= NULL
)
382 *Buffer
= (LPBYTE
)StatisticsStruct
.Statistics
.Level100
->Buffer
;
387 if (StatisticsStruct
.Statistics
.Level101
->Buffer
!= NULL
)
389 *Buffer
= (LPBYTE
)StatisticsStruct
.Statistics
.Level101
->Buffer
;
394 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
396 status
= I_RpcMapWin32Status(RpcExceptionCode());
407 _In_opt_ LMCSTR servername
,
409 _Out_ LPBYTE
*bufptr
,
410 _In_ DWORD prefmaxlen
,
411 _Out_ LPDWORD entriesread
,
412 _Out_ LPDWORD totalentries
,
413 _In_ DWORD servertype
,
414 _In_opt_ LMCSTR domain
,
415 _Inout_opt_ LPDWORD resume_handle
)
417 TRACE("NetServerEnum(%s %lu %p %lu %p %p %lu %s %p)\n",
418 debugstr_w(servername
), level
, bufptr
, prefmaxlen
, entriesread
,
419 totalentries
, servertype
, debugstr_w(domain
), resume_handle
);
421 if (resume_handle
!= NULL
)
424 return NetServerEnumEx(servername
,
439 _In_opt_ LMCSTR ServerName
,
441 _Out_ LPBYTE
*Bufptr
,
442 _In_ DWORD PrefMaxlen
,
443 _Out_ LPDWORD EntriesRead
,
444 _Out_ LPDWORD totalentries
,
445 _In_ DWORD servertype
,
446 _In_opt_ LMCSTR domain
,
447 _In_opt_ LMCSTR FirstNameToReturn
)
449 FIXME("NetServerEnumEx(%s %lu %p %lu %p %p %lu %s %s)\n",
450 debugstr_w(ServerName
), Level
, Bufptr
, PrefMaxlen
, EntriesRead
, totalentries
,
451 servertype
, debugstr_w(domain
), debugstr_w(FirstNameToReturn
));
453 return ERROR_NO_BROWSER_SERVERS_FOUND
;