Make sure the import directory is not in shared memory.
[wine/testsucceed.git] / dlls / mpr / wnet.c
blob39651e53ef3433c9a3a9ae3afbba9d836c6124b4
1 /*
2 * MPR WNet functions
4 * Copyright 1999 Ulrich Weigand
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include <ctype.h>
22 #include <string.h>
23 #include <sys/types.h>
24 #include <pwd.h>
25 #include <unistd.h>
27 #include "winbase.h"
28 #include "winnls.h"
29 #include "winnetwk.h"
30 #include "wine/debug.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(mpr);
36 * Browsing Functions
39 /*********************************************************************
40 * WNetOpenEnumA [MPR.@]
42 DWORD WINAPI WNetOpenEnumA( DWORD dwScope, DWORD dwType, DWORD dwUsage,
43 LPNETRESOURCEA lpNet, LPHANDLE lphEnum )
45 FIXME( "(%08lX, %08lX, %08lX, %p, %p): stub\n",
46 dwScope, dwType, dwUsage, lpNet, lphEnum );
48 SetLastError(WN_NO_NETWORK);
49 return WN_NO_NETWORK;
52 /*********************************************************************
53 * WNetOpenEnumW [MPR.@]
55 DWORD WINAPI WNetOpenEnumW( DWORD dwScope, DWORD dwType, DWORD dwUsage,
56 LPNETRESOURCEW lpNet, LPHANDLE lphEnum )
58 FIXME( "(%08lX, %08lX, %08lX, %p, %p): stub\n",
59 dwScope, dwType, dwUsage, lpNet, lphEnum );
61 SetLastError(WN_NO_NETWORK);
62 return WN_NO_NETWORK;
65 /*********************************************************************
66 * WNetEnumResourceA [MPR.@]
68 DWORD WINAPI WNetEnumResourceA( HANDLE hEnum, LPDWORD lpcCount,
69 LPVOID lpBuffer, LPDWORD lpBufferSize )
71 FIXME( "(%04X, %p, %p, %p): stub\n",
72 hEnum, lpcCount, lpBuffer, lpBufferSize );
74 SetLastError(WN_NO_NETWORK);
75 return WN_NO_NETWORK;
78 /*********************************************************************
79 * WNetEnumResourceW [MPR.@]
81 DWORD WINAPI WNetEnumResourceW( HANDLE hEnum, LPDWORD lpcCount,
82 LPVOID lpBuffer, LPDWORD lpBufferSize )
84 FIXME( "(%04X, %p, %p, %p): stub\n",
85 hEnum, lpcCount, lpBuffer, lpBufferSize );
87 SetLastError(WN_NO_NETWORK);
88 return WN_NO_NETWORK;
91 /*********************************************************************
92 * WNetCloseEnum [MPR.@]
94 DWORD WINAPI WNetCloseEnum( HANDLE hEnum )
96 FIXME( "(%04X): stub\n", hEnum );
98 SetLastError(WN_NO_NETWORK);
99 return WN_NO_NETWORK;
102 /*********************************************************************
103 * WNetGetResourceInformationA [MPR.@]
105 DWORD WINAPI WNetGetResourceInformationA( LPNETRESOURCEA lpNetResource,
106 LPVOID lpBuffer, LPDWORD cbBuffer,
107 LPSTR *lplpSystem )
109 FIXME( "(%p, %p, %p, %p): stub\n",
110 lpNetResource, lpBuffer, cbBuffer, lplpSystem );
112 SetLastError(WN_NO_NETWORK);
113 return WN_NO_NETWORK;
116 /*********************************************************************
117 * WNetGetResourceInformationW [MPR.@]
119 DWORD WINAPI WNetGetResourceInformationW( LPNETRESOURCEW lpNetResource,
120 LPVOID lpBuffer, LPDWORD cbBuffer,
121 LPWSTR *lplpSystem )
123 FIXME( "(%p, %p, %p, %p): stub\n",
124 lpNetResource, lpBuffer, cbBuffer, lplpSystem );
126 SetLastError(WN_NO_NETWORK);
127 return WN_NO_NETWORK;
130 /*********************************************************************
131 * WNetGetResourceParentA [MPR.@]
133 DWORD WINAPI WNetGetResourceParentA( LPNETRESOURCEA lpNetResource,
134 LPVOID lpBuffer, LPDWORD lpBufferSize )
136 FIXME( "(%p, %p, %p): stub\n",
137 lpNetResource, lpBuffer, lpBufferSize );
139 SetLastError(WN_NO_NETWORK);
140 return WN_NO_NETWORK;
143 /*********************************************************************
144 * WNetGetResourceParentW [MPR.@]
146 DWORD WINAPI WNetGetResourceParentW( LPNETRESOURCEW lpNetResource,
147 LPVOID lpBuffer, LPDWORD lpBufferSize )
149 FIXME( "(%p, %p, %p): stub\n",
150 lpNetResource, lpBuffer, lpBufferSize );
152 SetLastError(WN_NO_NETWORK);
153 return WN_NO_NETWORK;
159 * Connection Functions
162 /*********************************************************************
163 * WNetAddConnectionA [MPR.@]
165 DWORD WINAPI WNetAddConnectionA( LPCSTR lpRemoteName, LPCSTR lpPassword,
166 LPCSTR lpLocalName )
168 FIXME( "(%s, %p, %s): stub\n",
169 debugstr_a(lpRemoteName), lpPassword, debugstr_a(lpLocalName) );
171 SetLastError(WN_NO_NETWORK);
172 return WN_NO_NETWORK;
175 /*********************************************************************
176 * WNetAddConnectionW [MPR.@]
178 DWORD WINAPI WNetAddConnectionW( LPCWSTR lpRemoteName, LPCWSTR lpPassword,
179 LPCWSTR lpLocalName )
181 FIXME( "(%s, %p, %s): stub\n",
182 debugstr_w(lpRemoteName), lpPassword, debugstr_w(lpLocalName) );
184 SetLastError(WN_NO_NETWORK);
185 return WN_NO_NETWORK;
188 /*********************************************************************
189 * WNetAddConnection2A [MPR.@]
191 DWORD WINAPI WNetAddConnection2A( LPNETRESOURCEA lpNetResource,
192 LPCSTR lpPassword, LPCSTR lpUserID,
193 DWORD dwFlags )
195 FIXME( "(%p, %p, %s, 0x%08lX): stub\n",
196 lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags );
198 SetLastError(WN_NO_NETWORK);
199 return WN_NO_NETWORK;
202 /*********************************************************************
203 * WNetAddConnection2W [MPR.@]
205 DWORD WINAPI WNetAddConnection2W( LPNETRESOURCEW lpNetResource,
206 LPCWSTR lpPassword, LPCWSTR lpUserID,
207 DWORD dwFlags )
209 FIXME( "(%p, %p, %s, 0x%08lX): stub\n",
210 lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags );
212 SetLastError(WN_NO_NETWORK);
213 return WN_NO_NETWORK;
216 /*********************************************************************
217 * WNetAddConnection3A [MPR.@]
219 DWORD WINAPI WNetAddConnection3A( HWND hwndOwner, LPNETRESOURCEA lpNetResource,
220 LPCSTR lpPassword, LPCSTR lpUserID,
221 DWORD dwFlags )
223 FIXME( "(%04x, %p, %p, %s, 0x%08lX), stub\n",
224 hwndOwner, lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags );
226 SetLastError(WN_NO_NETWORK);
227 return WN_NO_NETWORK;
230 /*********************************************************************
231 * WNetAddConnection3W [MPR.@]
233 DWORD WINAPI WNetAddConnection3W( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
234 LPCWSTR lpPassword, LPCWSTR lpUserID,
235 DWORD dwFlags )
237 FIXME( "(%04x, %p, %p, %s, 0x%08lX), stub\n",
238 hwndOwner, lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags );
240 SetLastError(WN_NO_NETWORK);
241 return WN_NO_NETWORK;
244 /*****************************************************************
245 * WNetUseConnectionA [MPR.@]
247 DWORD WINAPI WNetUseConnectionA( HWND hwndOwner, LPNETRESOURCEA lpNetResource,
248 LPCSTR lpPassword, LPCSTR lpUserID, DWORD dwFlags,
249 LPSTR lpAccessName, LPDWORD lpBufferSize,
250 LPDWORD lpResult )
252 FIXME( "(%04x, %p, %p, %s, 0x%08lX, %s, %p, %p), stub\n",
253 hwndOwner, lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags,
254 debugstr_a(lpAccessName), lpBufferSize, lpResult );
256 SetLastError(WN_NO_NETWORK);
257 return WN_NO_NETWORK;
260 /*****************************************************************
261 * WNetUseConnectionW [MPR.@]
263 DWORD WINAPI WNetUseConnectionW( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
264 LPCWSTR lpPassword, LPCWSTR lpUserID, DWORD dwFlags,
265 LPWSTR lpAccessName, LPDWORD lpBufferSize,
266 LPDWORD lpResult )
268 FIXME( "(%04x, %p, %p, %s, 0x%08lX, %s, %p, %p), stub\n",
269 hwndOwner, lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags,
270 debugstr_w(lpAccessName), lpBufferSize, lpResult );
272 SetLastError(WN_NO_NETWORK);
273 return WN_NO_NETWORK;
276 /*********************************************************************
277 * WNetCancelConnectionA [MPR.@]
279 DWORD WINAPI WNetCancelConnectionA( LPCSTR lpName, BOOL fForce )
281 FIXME( "(%s, %d), stub\n", debugstr_a(lpName), fForce );
283 return WN_SUCCESS;
286 /*********************************************************************
287 * WNetCancelConnectionW [MPR.@]
289 DWORD WINAPI WNetCancelConnectionW( LPCWSTR lpName, BOOL fForce )
291 FIXME( "(%s, %d), stub\n", debugstr_w(lpName), fForce );
293 return WN_SUCCESS;
296 /*********************************************************************
297 * WNetCancelConnection2A [MPR.@]
299 DWORD WINAPI WNetCancelConnection2A( LPCSTR lpName, DWORD dwFlags, BOOL fForce )
301 FIXME( "(%s, %08lX, %d), stub\n", debugstr_a(lpName), dwFlags, fForce );
303 return WN_SUCCESS;
306 /*********************************************************************
307 * WNetCancelConnection2W [MPR.@]
309 DWORD WINAPI WNetCancelConnection2W( LPCWSTR lpName, DWORD dwFlags, BOOL fForce )
311 FIXME( "(%s, %08lX, %d), stub\n", debugstr_w(lpName), dwFlags, fForce );
313 return WN_SUCCESS;
316 /*****************************************************************
317 * WNetRestoreConnectionA [MPR.@]
319 DWORD WINAPI WNetRestoreConnectionA( HWND hwndOwner, LPSTR lpszDevice )
321 FIXME( "(%04X, %s), stub\n", hwndOwner, debugstr_a(lpszDevice) );
323 SetLastError(WN_NO_NETWORK);
324 return WN_NO_NETWORK;
327 /*****************************************************************
328 * WNetRestoreConnectionW [MPR.@]
330 DWORD WINAPI WNetRestoreConnectionW( HWND hwndOwner, LPWSTR lpszDevice )
332 FIXME( "(%04X, %s), stub\n", hwndOwner, debugstr_w(lpszDevice) );
334 SetLastError(WN_NO_NETWORK);
335 return WN_NO_NETWORK;
338 /**************************************************************************
339 * WNetGetConnectionA [MPR.@]
341 * RETURNS
342 * - WN_BAD_LOCALNAME lpLocalName makes no sense
343 * - WN_NOT_CONNECTED drive is a local drive
344 * - WN_MORE_DATA buffer isn't big enough
345 * - WN_SUCCESS success (net path in buffer)
348 DWORD WINAPI WNetGetConnectionA( LPCSTR lpLocalName,
349 LPSTR lpRemoteName, LPDWORD lpBufferSize )
351 char label[40];
353 TRACE( "local %s\n", lpLocalName );
354 if (lpLocalName[1] == ':')
356 switch(GetDriveTypeA(lpLocalName))
358 case DRIVE_REMOTE:
359 if (!GetVolumeInformationA( lpLocalName, label, sizeof(label),
360 NULL, NULL, NULL, NULL, 0 )) label[0] = 0;
361 if (strlen(label) + 1 > *lpBufferSize)
363 *lpBufferSize = strlen(label) + 1;
364 return WN_MORE_DATA;
366 strcpy( lpRemoteName, label );
367 *lpBufferSize = strlen(lpRemoteName) + 1;
368 return WN_SUCCESS;
369 case DRIVE_REMOVABLE:
370 case DRIVE_FIXED:
371 case DRIVE_CDROM:
372 TRACE("file is local\n");
373 return WN_NOT_CONNECTED;
374 default:
375 return WN_BAD_LOCALNAME;
378 return WN_BAD_LOCALNAME;
381 /**************************************************************************
382 * WNetGetConnectionW [MPR.@]
384 DWORD WINAPI WNetGetConnectionW( LPCWSTR lpLocalName,
385 LPWSTR lpRemoteName, LPDWORD lpBufferSize )
387 CHAR buf[200];
388 DWORD ret, x = sizeof(buf);
389 INT len = WideCharToMultiByte( CP_ACP, 0, lpLocalName, -1, NULL, 0, NULL, NULL );
390 LPSTR lnA = HeapAlloc( GetProcessHeap(), 0, len );
392 WideCharToMultiByte( CP_ACP, 0, lpLocalName, -1, lnA, len, NULL, NULL );
393 ret = WNetGetConnectionA( lnA, buf, &x );
394 HeapFree( GetProcessHeap(), 0, lnA );
395 if (ret == WN_SUCCESS)
397 x = MultiByteToWideChar( CP_ACP, 0, buf, -1, NULL, 0 );
398 if (x > *lpBufferSize)
400 *lpBufferSize = x;
401 return WN_MORE_DATA;
403 *lpBufferSize = MultiByteToWideChar( CP_ACP, 0, buf, -1, lpRemoteName, *lpBufferSize );
405 return ret;
408 /**************************************************************************
409 * WNetSetConnectionA [MPR.@]
411 DWORD WINAPI WNetSetConnectionA( LPCSTR lpName, DWORD dwProperty,
412 LPVOID pvValue )
414 FIXME( "(%s, %08lX, %p): stub\n", debugstr_a(lpName), dwProperty, pvValue );
416 SetLastError(WN_NO_NETWORK);
417 return WN_NO_NETWORK;
420 /**************************************************************************
421 * WNetSetConnectionW [MPR.@]
423 DWORD WINAPI WNetSetConnectionW( LPCWSTR lpName, DWORD dwProperty,
424 LPVOID pvValue )
426 FIXME( "(%s, %08lX, %p): stub\n", debugstr_w(lpName), dwProperty, pvValue );
428 SetLastError(WN_NO_NETWORK);
429 return WN_NO_NETWORK;
432 /*****************************************************************
433 * WNetGetUniversalNameA [MPR.@]
435 DWORD WINAPI WNetGetUniversalNameA ( LPCSTR lpLocalPath, DWORD dwInfoLevel,
436 LPVOID lpBuffer, LPDWORD lpBufferSize )
438 FIXME( "(%s, 0x%08lX, %p, %p): stub\n",
439 debugstr_a(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
441 SetLastError(WN_NO_NETWORK);
442 return WN_NO_NETWORK;
445 /*****************************************************************
446 * WNetGetUniversalNameW [MPR.@]
448 DWORD WINAPI WNetGetUniversalNameW ( LPCWSTR lpLocalPath, DWORD dwInfoLevel,
449 LPVOID lpBuffer, LPDWORD lpBufferSize )
451 FIXME( "(%s, 0x%08lX, %p, %p): stub\n",
452 debugstr_w(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
454 SetLastError(WN_NO_NETWORK);
455 return WN_NO_NETWORK;
461 * Other Functions
464 /**************************************************************************
465 * WNetGetUserA [MPR.@]
467 * FIXME: we should not return ourselves, but the owner of the drive lpName
469 DWORD WINAPI WNetGetUserA( LPCSTR lpName, LPSTR lpUserID, LPDWORD lpBufferSize )
471 struct passwd *pwd = getpwuid(getuid());
473 FIXME( "(%s, %p, %p): mostly stub\n",
474 debugstr_a(lpName), lpUserID, lpBufferSize );
476 if (pwd)
478 if ( strlen(pwd->pw_name) + 1 > *lpBufferSize )
480 *lpBufferSize = strlen(pwd->pw_name) + 1;
482 SetLastError(ERROR_MORE_DATA);
483 return ERROR_MORE_DATA;
486 strcpy( lpUserID, pwd->pw_name );
487 *lpBufferSize = strlen(pwd->pw_name) + 1;
488 return WN_SUCCESS;
491 /* FIXME: wrong return value */
492 SetLastError(ERROR_NO_NETWORK);
493 return ERROR_NO_NETWORK;
496 /*****************************************************************
497 * WNetGetUserW [MPR.@]
499 DWORD WINAPI WNetGetUserW( LPCWSTR lpName, LPWSTR lpUserID, LPDWORD lpBufferSize )
501 FIXME( "(%s, %p, %p): mostly stub\n",
502 debugstr_w(lpName), lpUserID, lpBufferSize );
504 SetLastError(WN_NO_NETWORK);
505 return WN_NO_NETWORK;
508 /*********************************************************************
509 * WNetConnectionDialog [MPR.@]
511 DWORD WINAPI WNetConnectionDialog( HWND hwnd, DWORD dwType )
513 FIXME( "(%04x, %08lX): stub\n", hwnd, dwType );
515 SetLastError(WN_NO_NETWORK);
516 return ERROR_NO_NETWORK;
519 /*********************************************************************
520 * WNetConnectionDialog1A [MPR.@]
522 DWORD WINAPI WNetConnectionDialog1A( LPCONNECTDLGSTRUCTA lpConnDlgStruct )
524 FIXME( "(%p): stub\n", lpConnDlgStruct );
526 SetLastError(WN_NO_NETWORK);
527 return ERROR_NO_NETWORK;
530 /*********************************************************************
531 * WNetConnectionDialog1W [MPR.@]
533 DWORD WINAPI WNetConnectionDialog1W( LPCONNECTDLGSTRUCTW lpConnDlgStruct )
535 FIXME( "(%p): stub\n", lpConnDlgStruct );
537 SetLastError(WN_NO_NETWORK);
538 return ERROR_NO_NETWORK;
541 /*********************************************************************
542 * WNetDisconnectDialog [MPR.@]
544 DWORD WINAPI WNetDisconnectDialog( HWND hwnd, DWORD dwType )
546 FIXME( "(%04x, %08lX): stub\n", hwnd, dwType );
548 SetLastError(WN_NO_NETWORK);
549 return ERROR_NO_NETWORK;
552 /*********************************************************************
553 * WNetDisconnectDialog1A [MPR.@]
555 DWORD WINAPI WNetDisconnectDialog1A( LPDISCDLGSTRUCTA lpConnDlgStruct )
557 FIXME( "(%p): stub\n", lpConnDlgStruct );
559 SetLastError(WN_NO_NETWORK);
560 return ERROR_NO_NETWORK;
563 /*********************************************************************
564 * WNetDisconnectDialog1W [MPR.@]
566 DWORD WINAPI WNetDisconnectDialog1W( LPDISCDLGSTRUCTW lpConnDlgStruct )
568 FIXME( "(%p): stub\n", lpConnDlgStruct );
570 SetLastError(WN_NO_NETWORK);
571 return ERROR_NO_NETWORK;
574 /*********************************************************************
575 * WNetGetLastErrorA [MPR.@]
577 DWORD WINAPI WNetGetLastErrorA( LPDWORD lpError,
578 LPSTR lpErrorBuf, DWORD nErrorBufSize,
579 LPSTR lpNameBuf, DWORD nNameBufSize )
581 FIXME( "(%p, %p, %ld, %p, %ld): stub\n",
582 lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize );
584 SetLastError(WN_NO_NETWORK);
585 return ERROR_NO_NETWORK;
588 /*********************************************************************
589 * WNetGetLastErrorW [MPR.@]
591 DWORD WINAPI WNetGetLastErrorW( LPDWORD lpError,
592 LPWSTR lpErrorBuf, DWORD nErrorBufSize,
593 LPWSTR lpNameBuf, DWORD nNameBufSize )
595 FIXME( "(%p, %p, %ld, %p, %ld): stub\n",
596 lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize );
598 SetLastError(WN_NO_NETWORK);
599 return ERROR_NO_NETWORK;
602 /*********************************************************************
603 * WNetGetNetworkInformationA [MPR.@]
605 DWORD WINAPI WNetGetNetworkInformationA( LPCSTR lpProvider,
606 LPNETINFOSTRUCT lpNetInfoStruct )
608 FIXME( "(%s, %p): stub\n", debugstr_a(lpProvider), lpNetInfoStruct );
610 SetLastError(WN_NO_NETWORK);
611 return ERROR_NO_NETWORK;
614 /*********************************************************************
615 * WNetGetNetworkInformationW [MPR.@]
617 DWORD WINAPI WNetGetNetworkInformationW( LPCWSTR lpProvider,
618 LPNETINFOSTRUCT lpNetInfoStruct )
620 FIXME( "(%s, %p): stub\n", debugstr_w(lpProvider), lpNetInfoStruct );
622 SetLastError(WN_NO_NETWORK);
623 return ERROR_NO_NETWORK;
626 /*****************************************************************
627 * WNetGetProviderNameA [MPR.@]
629 DWORD WINAPI WNetGetProviderNameA( DWORD dwNetType,
630 LPSTR lpProvider, LPDWORD lpBufferSize )
632 FIXME( "(%ld, %p, %p): stub\n", dwNetType, lpProvider, lpBufferSize );
634 SetLastError(WN_NO_NETWORK);
635 return WN_NO_NETWORK;
638 /*****************************************************************
639 * WNetGetProviderNameW [MPR.@]
641 DWORD WINAPI WNetGetProviderNameW( DWORD dwNetType,
642 LPWSTR lpProvider, LPDWORD lpBufferSize )
644 FIXME( "(%ld, %p, %p): stub\n", dwNetType, lpProvider, lpBufferSize );
646 SetLastError(WN_NO_NETWORK);
647 return WN_NO_NETWORK;