ddraw: Use unsafe_impl_from_IDirect3DViewport for application provided interfaces.
[wine] / dlls / netapi32 / netapi32.c
1 /* Copyright 2001 Mike McCormack
2  * Copyright 2003 Juan Lang
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
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "config.h"
20
21 #include "wine/debug.h"
22 #include "lm.h"
23 #include "netbios.h"
24
25 WINE_DEFAULT_DEBUG_CHANNEL(netbios);
26
27 static HMODULE NETAPI32_hModule;
28
29 BOOL NETAPI_IsLocalComputer(LMCSTR ServerName);
30
31 BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
32 {
33     TRACE("%p,%x,%p\n", hinstDLL, fdwReason, lpvReserved);
34
35     switch (fdwReason) {
36         case DLL_PROCESS_ATTACH:
37         {
38             DisableThreadLibraryCalls(hinstDLL);
39             NETAPI32_hModule = hinstDLL;
40             NetBIOSInit();
41             NetBTInit();
42             break;
43         }
44         case DLL_PROCESS_DETACH:
45         {
46             NetBIOSShutdown();
47             break;
48         }
49     }
50
51     return TRUE;
52 }
53
54 /************************************************************
55  *                NetServerEnum (NETAPI32.@)
56  */
57 NET_API_STATUS  WINAPI NetServerEnum(
58   LMCSTR servername,
59   DWORD level,
60   LPBYTE* bufptr,
61   DWORD prefmaxlen,
62   LPDWORD entriesread,
63   LPDWORD totalentries,
64   DWORD servertype,
65   LMCSTR domain,
66   LPDWORD resume_handle
67 )
68 {
69     FIXME("Stub (%s %d %p %d %p %p %d %s %p)\n", debugstr_w(servername),
70      level, bufptr, prefmaxlen, entriesread, totalentries, servertype,
71      debugstr_w(domain), resume_handle);
72
73     return ERROR_NO_BROWSER_SERVERS_FOUND;
74 }
75
76 /************************************************************
77  *                NetServerEnumEx (NETAPI32.@)
78  */
79 NET_API_STATUS WINAPI NetServerEnumEx(
80     LMCSTR ServerName,
81     DWORD Level,
82     LPBYTE *Bufptr,
83     DWORD PrefMaxlen,
84     LPDWORD EntriesRead,
85     LPDWORD totalentries,
86     DWORD servertype,
87     LMCSTR domain,
88     LMCSTR FirstNameToReturn)
89 {
90     FIXME("Stub (%s %d %p %d %p %p %d %s %p)\n", debugstr_w(ServerName),
91      Level, Bufptr, PrefMaxlen, EntriesRead, totalentries, servertype,
92      debugstr_w(domain), debugstr_w(FirstNameToReturn));
93                                                                                 
94     return ERROR_NO_BROWSER_SERVERS_FOUND;
95 }
96
97 /************************************************************
98  *                NetServerDiskEnum (NETAPI32.@)
99  */
100 NET_API_STATUS WINAPI NetServerDiskEnum(
101     LMCSTR ServerName,
102     DWORD Level,
103     LPBYTE *Bufptr,
104     DWORD PrefMaxlen,
105     LPDWORD EntriesRead,
106     LPDWORD totalentries,
107     LPDWORD Resume_Handle)
108 {
109     FIXME("Stub (%s %d %p %d %p %p %p)\n", debugstr_w(ServerName),
110      Level, Bufptr, PrefMaxlen, EntriesRead, totalentries, Resume_Handle);
111
112     return ERROR_NO_BROWSER_SERVERS_FOUND;
113 }
114
115 /************************************************************
116  *                NetServerGetInfo  (NETAPI32.@)
117  */
118 NET_API_STATUS WINAPI NetServerGetInfo(LMSTR servername, DWORD level, LPBYTE* bufptr)
119 {
120     NET_API_STATUS ret;
121
122     TRACE("%s %d %p\n", debugstr_w( servername ), level, bufptr );
123     if (servername)
124     {
125         if (!NETAPI_IsLocalComputer(servername))
126         {
127             FIXME("remote computers not supported\n");
128             return ERROR_INVALID_LEVEL;
129         }
130     }
131     if (!bufptr) return ERROR_INVALID_PARAMETER;
132
133     switch (level)
134     {
135         case 100:
136         case 101:
137         {
138             DWORD computerNameLen, size;
139             WCHAR computerName[MAX_COMPUTERNAME_LENGTH + 1];
140
141             computerNameLen = MAX_COMPUTERNAME_LENGTH + 1;
142             GetComputerNameW(computerName, &computerNameLen);
143             computerNameLen++; /* include NULL terminator */
144
145             size = sizeof(SERVER_INFO_101) + computerNameLen * sizeof(WCHAR);
146             ret = NetApiBufferAllocate(size, (LPVOID *)bufptr);
147             if (ret == NERR_Success)
148             {
149                 /* INFO_100 structure is a subset of INFO_101 */
150                 PSERVER_INFO_101 info = (PSERVER_INFO_101)*bufptr;
151                 OSVERSIONINFOW verInfo;
152
153                 info->sv101_platform_id = PLATFORM_ID_NT;
154                 info->sv101_name = (LMSTR)(*bufptr + sizeof(SERVER_INFO_101));
155                 memcpy(info->sv101_name, computerName,
156                        computerNameLen * sizeof(WCHAR));
157                 verInfo.dwOSVersionInfoSize = sizeof(verInfo);
158                 GetVersionExW(&verInfo);
159                 info->sv101_version_major = verInfo.dwMajorVersion;
160                 info->sv101_version_minor = verInfo.dwMinorVersion;
161                  /* Use generic type as no wine equivalent of DC / Server */
162                 info->sv101_type = SV_TYPE_NT;
163                 info->sv101_comment = NULL;
164             }
165             break;
166         }
167
168         default:
169             FIXME("level %d unimplemented\n", level);
170             ret = ERROR_INVALID_LEVEL;
171     }
172     return ret;
173 }
174
175
176 /************************************************************
177  *                NetStatisticsGet  (NETAPI32.@)
178  */
179 NET_API_STATUS WINAPI NetStatisticsGet(LMSTR server, LMSTR service,
180                                        DWORD level, DWORD options,
181                                        LPBYTE *bufptr)
182 {
183     TRACE("(%p, %p, %d, %d, %p)\n", server, service, level, options, bufptr);
184     return NERR_InternalError;
185 }
186
187 DWORD WINAPI NetpNetBiosStatusToApiStatus(DWORD nrc)
188 {
189     DWORD ret;
190
191     switch (nrc)
192     {
193         case NRC_GOODRET:
194             ret = NO_ERROR;
195             break;
196         case NRC_NORES:
197             ret = NERR_NoNetworkResource;
198             break;
199         case NRC_DUPNAME:
200             ret = NERR_AlreadyExists;
201             break;
202         case NRC_NAMTFUL:
203             ret = NERR_TooManyNames;
204             break;
205         case NRC_ACTSES:
206             ret = NERR_DeleteLater;
207             break;
208         case NRC_REMTFUL:
209             ret = ERROR_REM_NOT_LIST;
210             break;
211         case NRC_NOCALL:
212             ret = NERR_NameNotFound;
213             break;
214         case NRC_NOWILD:
215             ret = ERROR_INVALID_PARAMETER;
216             break;
217         case NRC_INUSE:
218             ret = NERR_DuplicateName;
219             break;
220         case NRC_NAMERR:
221             ret = ERROR_INVALID_PARAMETER;
222             break;
223         case NRC_NAMCONF:
224             ret = NERR_DuplicateName;
225             break;
226         default:
227             ret = NERR_NetworkError;
228     }
229     return ret;
230 }
231
232 NET_API_STATUS WINAPI NetUseEnum(LMSTR server, DWORD level, LPBYTE* bufptr, DWORD prefmaxsize,
233                           LPDWORD entriesread, LPDWORD totalentries, LPDWORD resumehandle)
234 {
235     FIXME("stub (%p, %d, %p, %d, %p, %p, %p)\n", server, level, bufptr, prefmaxsize,
236            entriesread, totalentries, resumehandle);
237     return ERROR_NOT_SUPPORTED;
238 }