Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: NetAPI DLL * FILE: dll/win32/netapi32/browser.c * PURPOSE: Computer Browser service interface code * PROGRAMMERS: Eric Kohl (eric.kohl@reactos.org) */
/* INCLUDES ******************************************************************/
#include "netapi32.h"
#include <rpc.h>#include <lmbrowsr.h>#include <lmserver.h>#include "browser_c.h"
WINE_DEFAULT_DEBUG_CHANNEL(netapi32);
/* FUNCTIONS *****************************************************************/
handle_t __RPC_USERBROWSER_IDENTIFY_HANDLE_bind(BROWSER_IDENTIFY_HANDLE pszSystemName){ handle_t hBinding = NULL; LPWSTR pszStringBinding; RPC_STATUS status;
TRACE("BROWSER_IDENTIFY_HANDLE_bind() called\n");
status = RpcStringBindingComposeW(NULL, L"ncacn_np", pszSystemName, L"\\pipe\\browser", NULL, &pszStringBinding); if (status) { TRACE("RpcStringBindingCompose returned 0x%x\n", status); return NULL; }
/* Set the binding handle that will be used to bind to the server. */ status = RpcBindingFromStringBindingW(pszStringBinding, &hBinding); if (status) { TRACE("RpcBindingFromStringBinding returned 0x%x\n", status); }
status = RpcStringFreeW(&pszStringBinding); if (status) {// TRACE("RpcStringFree returned 0x%x\n", status); }
return hBinding;}
void __RPC_USERBROWSER_IDENTIFY_HANDLE_unbind(BROWSER_IDENTIFY_HANDLE pszSystemName, handle_t hBinding){ RPC_STATUS status;
TRACE("BROWSER_IDENTIFY_HANDLE_unbind() called\n");
status = RpcBindingFree(&hBinding); if (status) { TRACE("RpcBindingFree returned 0x%x\n", status); }}
NET_API_STATUSWINAPII_BrowserDebugTrace( _In_opt_ LPWSTR ServerName, _In_ PCHAR Buffer){ NET_API_STATUS status;
TRACE("I_BrowserDebugTrace(%s %s)\n", debugstr_w(ServerName), Buffer);
RpcTryExcept { status = I_BrowserrDebugTrace(ServerName, Buffer); } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { status = I_RpcMapWin32Status(RpcExceptionCode()); } RpcEndExcept;
return status;}
NET_API_STATUSWINAPII_BrowserQueryEmulatedDomains( _In_opt_ LPWSTR ServerName, _Out_ PBROWSER_EMULATED_DOMAIN *EmulatedDomains, _Out_ LPDWORD EntriesRead){ BROWSER_EMULATED_DOMAIN_CONTAINER Container = {0, NULL}; NET_API_STATUS status;
TRACE("I_BrowserQueryEmulatedDomains(%s %p %p)\n", debugstr_w(ServerName), EmulatedDomains, EntriesRead);
*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_STATUSWINAPII_BrowserQueryOtherDomains( _In_opt_ LPCWSTR ServerName, _Out_ LPBYTE *BufPtr, _Out_ LPDWORD EntriesRead, _Out_ LPDWORD TotalEntries){ SERVER_INFO_100_CONTAINER Level100Container = {0, NULL}; SERVER_ENUM_STRUCT EnumStruct; NET_API_STATUS status;
TRACE("I_BrowserQueryOtherDomains(%s %p %p %p)\n", debugstr_w(ServerName), BufPtr, EntriesRead, TotalEntries);
EnumStruct.Level = 100; EnumStruct.ServerInfo.Level100 = &Level100Container;
RpcTryExcept { status = I_BrowserrQueryOtherDomains((PWSTR)ServerName, &EnumStruct, TotalEntries);
if (status == NERR_Success || status == ERROR_MORE_DATA) { *BufPtr = (LPBYTE)EnumStruct.ServerInfo.Level100->Buffer; *EntriesRead = EnumStruct.ServerInfo.Level100->EntriesRead; } } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { status = I_RpcMapWin32Status(RpcExceptionCode()); } RpcEndExcept;
return status;}
NET_API_STATUSWINAPII_BrowserServerEnum( _In_opt_ LPCWSTR ServerName, _In_opt_ LPCWSTR Transport, _In_opt_ LPCWSTR ClientName, _In_ DWORD Level, _Out_ LPBYTE *BufPtr, _In_ DWORD PrefMaxLen, _Out_ LPDWORD EntriesRead, _Out_ LPDWORD TotalEntries, _In_ DWORD ServerType, _In_opt_ LPCWSTR Domain, _Inout_opt_ LPDWORD ResumeHandle){ SERVER_INFO_100_CONTAINER Level100Container = {0, NULL}; SERVER_ENUM_STRUCT EnumStruct; NET_API_STATUS status;
TRACE("I_BrowserServerEnum(%s %s %s %lu %p %lu %p %p %lu %s %p)\n", debugstr_w(ServerName), debugstr_w(Transport), debugstr_w(ClientName), Level, BufPtr, PrefMaxLen, EntriesRead, TotalEntries, ServerType, debugstr_w(Domain), ResumeHandle);
EnumStruct.Level = 100; EnumStruct.ServerInfo.Level100 = &Level100Container;
RpcTryExcept { status = I_BrowserrServerEnum((PWSTR)ServerName, (PWSTR)Transport, (PWSTR)ClientName, &EnumStruct, PrefMaxLen, TotalEntries, ServerType, (PWSTR)Domain, ResumeHandle);
if (status == NERR_Success || status == ERROR_MORE_DATA) { *BufPtr = (LPBYTE)EnumStruct.ServerInfo.Level100->Buffer; *EntriesRead = EnumStruct.ServerInfo.Level100->EntriesRead; } } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { status = I_RpcMapWin32Status(RpcExceptionCode()); } RpcEndExcept;
return status;}
NET_API_STATUSWINAPII_BrowserQueryStatistics( _In_opt_ LPCWSTR ServerName, _Inout_ LPBROWSER_STATISTICS *Statistics){ NET_API_STATUS status;
TRACE("I_BrowserQueryStatistics(%s %p)\n", debugstr_w(ServerName), Statistics);
RpcTryExcept { status = I_BrowserrQueryStatistics((PWSTR)ServerName, Statistics); } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { status = I_RpcMapWin32Status(RpcExceptionCode()); } RpcEndExcept;
return status;}
NET_API_STATUSWINAPII_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;}
NET_API_STATUSWINAPII_BrowserResetNetlogonState( _In_ LPCWSTR ServerName){ NET_API_STATUS status;
TRACE("I_BrowserResetNetlogonState(%s)\n", debugstr_w(ServerName));
RpcTryExcept { status = I_BrowserrResetNetlogonState((PWSTR)ServerName); } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { status = I_RpcMapWin32Status(RpcExceptionCode()); } RpcEndExcept;
return status;}
NET_API_STATUSWINAPII_BrowserSetNetlogonState( _In_ LPWSTR ServerName, _In_ LPWSTR DomainName, _In_ LPWSTR EmulatedServerName, _In_ DWORD Role){ NET_API_STATUS status;
TRACE("I_BrowserSetNetlogonState(%s %s %s %lu)\n", debugstr_w(ServerName), debugstr_w(ServerName), debugstr_w(EmulatedServerName), Role);
RpcTryExcept { status = I_BrowserrSetNetlogonState(ServerName, DomainName, EmulatedServerName, Role); } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { status = I_RpcMapWin32Status(RpcExceptionCode()); } RpcEndExcept;
return status;}
NET_API_STATUSWINAPINetBrowserStatisticsGet( _In_ LPWSTR ServerName, _In_ DWORD Level, _Out_ LPBYTE *Buffer){ BROWSER_STATISTICS_STRUCT StatisticsStruct; BROWSER_STATISTICS_100_CONTAINER Level100Container = {0, NULL}; BROWSER_STATISTICS_101_CONTAINER Level101Container = {0, NULL}; NET_API_STATUS status;
TRACE("NetBrowserStatisticsGet(%s %lu %p)\n", debugstr_w(ServerName), Level, Buffer);
if (Level != 100 && Level != 101) return ERROR_INVALID_LEVEL;
StatisticsStruct.Level = Level; switch (Level) { case 100: StatisticsStruct.Statistics.Level100 = &Level100Container; break;
case 101: StatisticsStruct.Statistics.Level101 = &Level101Container; break; }
RpcTryExcept { status = NetrBrowserStatisticsGet(ServerName, Level, &StatisticsStruct);
switch (Level) { case 100: if (StatisticsStruct.Statistics.Level100->Buffer != NULL) { *Buffer = (LPBYTE)StatisticsStruct.Statistics.Level100->Buffer; } break;
case 101: if (StatisticsStruct.Statistics.Level101->Buffer != NULL) { *Buffer = (LPBYTE)StatisticsStruct.Statistics.Level101->Buffer; } break; } } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { status = I_RpcMapWin32Status(RpcExceptionCode()); } RpcEndExcept;
return status;}
NET_API_STATUSWINAPINetServerEnum( _In_opt_ LMCSTR servername, _In_ DWORD level, _Out_ LPBYTE *bufptr, _In_ DWORD prefmaxlen, _Out_ LPDWORD entriesread, _Out_ LPDWORD totalentries, _In_ DWORD servertype, _In_opt_ LMCSTR domain, _Inout_opt_ LPDWORD resume_handle){ TRACE("NetServerEnum(%s %lu %p %lu %p %p %lu %s %p)\n", debugstr_w(servername), level, bufptr, prefmaxlen, entriesread, totalentries, servertype, debugstr_w(domain), resume_handle);
if (resume_handle != NULL) *resume_handle = 0;
return NetServerEnumEx(servername, level, bufptr, prefmaxlen, entriesread, totalentries, servertype, domain, NULL);}
NET_API_STATUSWINAPINetServerEnumEx( _In_opt_ LMCSTR ServerName, _In_ DWORD Level, _Out_ LPBYTE *Bufptr, _In_ DWORD PrefMaxlen, _Out_ LPDWORD EntriesRead, _Out_ LPDWORD totalentries, _In_ DWORD servertype, _In_opt_ LMCSTR domain, _In_opt_ LMCSTR FirstNameToReturn){ FIXME("NetServerEnumEx(%s %lu %p %lu %p %p %lu %s %s)\n", debugstr_w(ServerName), Level, Bufptr, PrefMaxlen, EntriesRead, totalentries, servertype, debugstr_w(domain), debugstr_w(FirstNameToReturn));
return ERROR_NO_BROWSER_SERVERS_FOUND;}
/* EOF */