Juan Lang | e7fd6fd | 2003-11-29 00:19:19 +0000 | [diff] [blame] | 1 | /* Copyright 2001 Mike McCormack |
| 2 | * Copyright 2003 Juan Lang |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 3 | * |
| 4 | * This library is free software; you can redistribute it and/or |
| 5 | * modify it under the terms of the GNU Lesser General Public |
| 6 | * License as published by the Free Software Foundation; either |
| 7 | * version 2.1 of the License, or (at your option) any later version. |
| 8 | * |
| 9 | * This library is distributed in the hope that it will be useful, |
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 | * Lesser General Public License for more details. |
| 13 | * |
| 14 | * You should have received a copy of the GNU Lesser General Public |
| 15 | * License along with this library; if not, write to the Free Software |
Jonathan Ernst | 360a3f9 | 2006-05-18 14:49:52 +0200 | [diff] [blame] | 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
Mike McCormack | 2e40b96 | 2001-11-06 17:52:36 +0000 | [diff] [blame] | 17 | */ |
| 18 | |
François Gouget | 2663b80 | 2001-11-06 19:01:05 +0000 | [diff] [blame] | 19 | #include "config.h" |
| 20 | |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 21 | #include "wine/debug.h" |
Vincent Béron | 74a4e59 | 2005-11-30 12:04:18 +0100 | [diff] [blame] | 22 | #include "lm.h" |
Juan Lang | e7fd6fd | 2003-11-29 00:19:19 +0000 | [diff] [blame] | 23 | #include "netbios.h" |
Mike McCormack | 2e40b96 | 2001-11-06 17:52:36 +0000 | [diff] [blame] | 24 | |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 25 | WINE_DEFAULT_DEBUG_CHANNEL(netbios); |
Mike McCormack | 2e40b96 | 2001-11-06 17:52:36 +0000 | [diff] [blame] | 26 | |
Andrew Talbot | 9d70a6e | 2007-01-16 21:11:37 +0000 | [diff] [blame] | 27 | static HMODULE NETAPI32_hModule; |
Mike McCormack | 2e40b96 | 2001-11-06 17:52:36 +0000 | [diff] [blame] | 28 | |
Jason Edmeades | c6be6a4 | 2010-01-16 14:55:20 -0800 | [diff] [blame] | 29 | BOOL NETAPI_IsLocalComputer(LMCSTR ServerName); |
| 30 | |
Alexandre Julliard | 1e1313d | 2002-11-04 23:53:41 +0000 | [diff] [blame] | 31 | BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) |
Mike McCormack | 2e40b96 | 2001-11-06 17:52:36 +0000 | [diff] [blame] | 32 | { |
Hans Leidekker | 9f71ae8 | 2006-10-12 20:56:59 +0200 | [diff] [blame] | 33 | TRACE("%p,%x,%p\n", hinstDLL, fdwReason, lpvReserved); |
Mike McCormack | 2e40b96 | 2001-11-06 17:52:36 +0000 | [diff] [blame] | 34 | |
| 35 | switch (fdwReason) { |
Juan Lang | e7fd6fd | 2003-11-29 00:19:19 +0000 | [diff] [blame] | 36 | case DLL_PROCESS_ATTACH: |
| 37 | { |
Dmitry Timoshkov | 4e1ef0c | 2003-06-30 20:53:48 +0000 | [diff] [blame] | 38 | DisableThreadLibraryCalls(hinstDLL); |
Mike McCormack | 2e40b96 | 2001-11-06 17:52:36 +0000 | [diff] [blame] | 39 | NETAPI32_hModule = hinstDLL; |
Juan Lang | e7fd6fd | 2003-11-29 00:19:19 +0000 | [diff] [blame] | 40 | NetBIOSInit(); |
| 41 | NetBTInit(); |
| 42 | break; |
| 43 | } |
| 44 | case DLL_PROCESS_DETACH: |
| 45 | { |
| 46 | NetBIOSShutdown(); |
| 47 | break; |
| 48 | } |
Mike McCormack | 2e40b96 | 2001-11-06 17:52:36 +0000 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | return TRUE; |
| 52 | } |
| 53 | |
Robert Reif | 65dd874 | 2006-06-07 07:42:24 -0400 | [diff] [blame] | 54 | /************************************************************ |
| 55 | * NetServerEnum (NETAPI32.@) |
| 56 | */ |
Aric Stewart | 3e53d11 | 2003-05-19 23:06:35 +0000 | [diff] [blame] | 57 | NET_API_STATUS WINAPI NetServerEnum( |
Francois Gouget | 9fae03b | 2007-08-08 10:41:51 +0200 | [diff] [blame] | 58 | LMCSTR servername, |
Aric Stewart | 3e53d11 | 2003-05-19 23:06:35 +0000 | [diff] [blame] | 59 | DWORD level, |
| 60 | LPBYTE* bufptr, |
| 61 | DWORD prefmaxlen, |
| 62 | LPDWORD entriesread, |
| 63 | LPDWORD totalentries, |
| 64 | DWORD servertype, |
Francois Gouget | 9fae03b | 2007-08-08 10:41:51 +0200 | [diff] [blame] | 65 | LMCSTR domain, |
Aric Stewart | 3e53d11 | 2003-05-19 23:06:35 +0000 | [diff] [blame] | 66 | LPDWORD resume_handle |
| 67 | ) |
| 68 | { |
Hans Leidekker | 9f71ae8 | 2006-10-12 20:56:59 +0200 | [diff] [blame] | 69 | FIXME("Stub (%s %d %p %d %p %p %d %s %p)\n", debugstr_w(servername), |
Juan Lang | 1ad8180 | 2004-04-05 20:17:45 +0000 | [diff] [blame] | 70 | level, bufptr, prefmaxlen, entriesread, totalentries, servertype, |
| 71 | debugstr_w(domain), resume_handle); |
Aric Stewart | 3e53d11 | 2003-05-19 23:06:35 +0000 | [diff] [blame] | 72 | |
| 73 | return ERROR_NO_BROWSER_SERVERS_FOUND; |
| 74 | } |
Geoff Thorpe | 23609d2 | 2003-09-11 03:09:19 +0000 | [diff] [blame] | 75 | |
Robert Reif | 65dd874 | 2006-06-07 07:42:24 -0400 | [diff] [blame] | 76 | /************************************************************ |
| 77 | * NetServerEnumEx (NETAPI32.@) |
| 78 | */ |
| 79 | NET_API_STATUS WINAPI NetServerEnumEx( |
Francois Gouget | 9fae03b | 2007-08-08 10:41:51 +0200 | [diff] [blame] | 80 | LMCSTR ServerName, |
Robert Reif | 65dd874 | 2006-06-07 07:42:24 -0400 | [diff] [blame] | 81 | DWORD Level, |
| 82 | LPBYTE *Bufptr, |
| 83 | DWORD PrefMaxlen, |
| 84 | LPDWORD EntriesRead, |
| 85 | LPDWORD totalentries, |
| 86 | DWORD servertype, |
Francois Gouget | 9fae03b | 2007-08-08 10:41:51 +0200 | [diff] [blame] | 87 | LMCSTR domain, |
| 88 | LMCSTR FirstNameToReturn) |
Robert Reif | 65dd874 | 2006-06-07 07:42:24 -0400 | [diff] [blame] | 89 | { |
Hans Leidekker | 9f71ae8 | 2006-10-12 20:56:59 +0200 | [diff] [blame] | 90 | FIXME("Stub (%s %d %p %d %p %p %d %s %p)\n", debugstr_w(ServerName), |
Robert Reif | 65dd874 | 2006-06-07 07:42:24 -0400 | [diff] [blame] | 91 | Level, Bufptr, PrefMaxlen, EntriesRead, totalentries, servertype, |
| 92 | debugstr_w(domain), debugstr_w(FirstNameToReturn)); |
| 93 | |
| 94 | return ERROR_NO_BROWSER_SERVERS_FOUND; |
| 95 | } |
Geoff Thorpe | 23609d2 | 2003-09-11 03:09:19 +0000 | [diff] [blame] | 96 | |
| 97 | /************************************************************ |
Hans Leidekker | 7e8e124 | 2004-04-02 19:17:42 +0000 | [diff] [blame] | 98 | * NetServerGetInfo (NETAPI32.@) |
| 99 | */ |
Ge van Geldorp | 2f57b9f | 2005-11-21 11:59:27 +0000 | [diff] [blame] | 100 | NET_API_STATUS WINAPI NetServerGetInfo(LMSTR servername, DWORD level, LPBYTE* bufptr) |
Hans Leidekker | 7e8e124 | 2004-04-02 19:17:42 +0000 | [diff] [blame] | 101 | { |
Jason Edmeades | c6be6a4 | 2010-01-16 14:55:20 -0800 | [diff] [blame] | 102 | NET_API_STATUS ret; |
| 103 | |
| 104 | TRACE("%s %d %p\n", debugstr_w( servername ), level, bufptr ); |
| 105 | if (servername) |
| 106 | { |
| 107 | if (!NETAPI_IsLocalComputer(servername)) |
| 108 | { |
| 109 | FIXME("remote computers not supported\n"); |
| 110 | return ERROR_INVALID_LEVEL; |
| 111 | } |
| 112 | } |
| 113 | if (!bufptr) return ERROR_INVALID_PARAMETER; |
| 114 | |
| 115 | switch (level) |
| 116 | { |
| 117 | case 100: |
| 118 | case 101: |
| 119 | { |
| 120 | DWORD computerNameLen, size; |
| 121 | WCHAR computerName[MAX_COMPUTERNAME_LENGTH + 1]; |
| 122 | |
| 123 | computerNameLen = MAX_COMPUTERNAME_LENGTH + 1; |
| 124 | GetComputerNameW(computerName, &computerNameLen); |
| 125 | computerNameLen++; /* include NULL terminator */ |
| 126 | |
| 127 | size = sizeof(SERVER_INFO_101) + computerNameLen * sizeof(WCHAR); |
| 128 | ret = NetApiBufferAllocate(size, (LPVOID *)bufptr); |
| 129 | if (ret == NERR_Success) |
| 130 | { |
| 131 | /* INFO_100 structure is a subset of INFO_101 */ |
| 132 | PSERVER_INFO_101 info = (PSERVER_INFO_101)*bufptr; |
| 133 | OSVERSIONINFOW verInfo; |
| 134 | |
| 135 | info->sv101_platform_id = PLATFORM_ID_NT; |
| 136 | info->sv101_name = (LMSTR)(*bufptr + sizeof(SERVER_INFO_101)); |
| 137 | memcpy(info->sv101_name, computerName, |
| 138 | computerNameLen * sizeof(WCHAR)); |
| 139 | verInfo.dwOSVersionInfoSize = sizeof(verInfo); |
| 140 | GetVersionExW(&verInfo); |
| 141 | info->sv101_version_major = verInfo.dwMajorVersion; |
| 142 | info->sv101_version_minor = verInfo.dwMinorVersion; |
| 143 | /* Use generic type as no wine equivalent of DC / Server */ |
| 144 | info->sv101_type = SV_TYPE_NT; |
| 145 | info->sv101_comment = NULL; |
| 146 | } |
| 147 | break; |
| 148 | } |
| 149 | |
| 150 | default: |
| 151 | FIXME("level %d unimplemented\n", level); |
| 152 | ret = ERROR_INVALID_LEVEL; |
| 153 | } |
| 154 | return ret; |
Hans Leidekker | 7e8e124 | 2004-04-02 19:17:42 +0000 | [diff] [blame] | 155 | } |
| 156 | |
| 157 | |
| 158 | /************************************************************ |
Geoff Thorpe | 23609d2 | 2003-09-11 03:09:19 +0000 | [diff] [blame] | 159 | * NetStatisticsGet (NETAPI32.@) |
| 160 | */ |
Francois Gouget | 9fae03b | 2007-08-08 10:41:51 +0200 | [diff] [blame] | 161 | NET_API_STATUS WINAPI NetStatisticsGet(LMSTR server, LMSTR service, |
Geoff Thorpe | 23609d2 | 2003-09-11 03:09:19 +0000 | [diff] [blame] | 162 | DWORD level, DWORD options, |
| 163 | LPBYTE *bufptr) |
| 164 | { |
Hans Leidekker | 9f71ae8 | 2006-10-12 20:56:59 +0200 | [diff] [blame] | 165 | TRACE("(%p, %p, %d, %d, %p)\n", server, service, level, options, bufptr); |
Geoff Thorpe | 23609d2 | 2003-09-11 03:09:19 +0000 | [diff] [blame] | 166 | return NERR_InternalError; |
| 167 | } |
Juan Lang | 93e268e | 2004-03-01 21:23:51 +0000 | [diff] [blame] | 168 | |
| 169 | DWORD WINAPI NetpNetBiosStatusToApiStatus(DWORD nrc) |
| 170 | { |
| 171 | DWORD ret; |
| 172 | |
| 173 | switch (nrc) |
| 174 | { |
| 175 | case NRC_GOODRET: |
| 176 | ret = NO_ERROR; |
| 177 | break; |
| 178 | case NRC_NORES: |
| 179 | ret = NERR_NoNetworkResource; |
| 180 | break; |
| 181 | case NRC_DUPNAME: |
| 182 | ret = NERR_AlreadyExists; |
| 183 | break; |
| 184 | case NRC_NAMTFUL: |
| 185 | ret = NERR_TooManyNames; |
| 186 | break; |
| 187 | case NRC_ACTSES: |
| 188 | ret = NERR_DeleteLater; |
| 189 | break; |
| 190 | case NRC_REMTFUL: |
| 191 | ret = ERROR_REM_NOT_LIST; |
| 192 | break; |
| 193 | case NRC_NOCALL: |
| 194 | ret = NERR_NameNotFound; |
| 195 | break; |
| 196 | case NRC_NOWILD: |
| 197 | ret = ERROR_INVALID_PARAMETER; |
| 198 | break; |
| 199 | case NRC_INUSE: |
| 200 | ret = NERR_DuplicateName; |
| 201 | break; |
| 202 | case NRC_NAMERR: |
| 203 | ret = ERROR_INVALID_PARAMETER; |
| 204 | break; |
| 205 | case NRC_NAMCONF: |
| 206 | ret = NERR_DuplicateName; |
| 207 | break; |
| 208 | default: |
| 209 | ret = NERR_NetworkError; |
| 210 | } |
| 211 | return ret; |
| 212 | } |
Tim Schwartz | db994bf | 2007-10-30 15:34:48 -0500 | [diff] [blame] | 213 | |
| 214 | NET_API_STATUS WINAPI NetUseEnum(LMSTR server, DWORD level, LPBYTE* bufptr, DWORD prefmaxsize, |
| 215 | LPDWORD entriesread, LPDWORD totalentries, LPDWORD resumehandle) |
| 216 | { |
| 217 | FIXME("stub (%p, %d, %p, %d, %p, %p, %p)\n", server, level, bufptr, prefmaxsize, |
| 218 | entriesread, totalentries, resumehandle); |
| 219 | return ERROR_NOT_SUPPORTED; |
| 220 | } |