Reimplemented DeleteFile by using CreateFile with
[wine/wine64.git] / dlls / mpr / wnet.c
blob935fbb8735a796e955d61cefa1871d4f8c47955e
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 "config.h"
23 #include <ctype.h>
24 #include <stdarg.h>
25 #include <string.h>
26 #include <sys/types.h>
27 #ifdef HAVE_UNISTD_H
28 # include <unistd.h>
29 #endif
31 #include "windef.h"
32 #include "winbase.h"
33 #include "winnls.h"
34 #include "winnetwk.h"
35 #include "wine/debug.h"
37 WINE_DEFAULT_DEBUG_CHANNEL(mpr);
41 * Browsing Functions
44 /*********************************************************************
45 * WNetOpenEnumA [MPR.@]
47 DWORD WINAPI WNetOpenEnumA( DWORD dwScope, DWORD dwType, DWORD dwUsage,
48 LPNETRESOURCEA lpNet, LPHANDLE lphEnum )
50 FIXME( "(%08lX, %08lX, %08lX, %p, %p): stub\n",
51 dwScope, dwType, dwUsage, lpNet, lphEnum );
53 SetLastError(WN_NO_NETWORK);
54 return WN_NO_NETWORK;
57 /*********************************************************************
58 * WNetOpenEnumW [MPR.@]
60 DWORD WINAPI WNetOpenEnumW( DWORD dwScope, DWORD dwType, DWORD dwUsage,
61 LPNETRESOURCEW lpNet, LPHANDLE lphEnum )
63 FIXME( "(%08lX, %08lX, %08lX, %p, %p): stub\n",
64 dwScope, dwType, dwUsage, lpNet, lphEnum );
66 SetLastError(WN_NO_NETWORK);
67 return WN_NO_NETWORK;
70 /*********************************************************************
71 * WNetEnumResourceA [MPR.@]
73 DWORD WINAPI WNetEnumResourceA( HANDLE hEnum, LPDWORD lpcCount,
74 LPVOID lpBuffer, LPDWORD lpBufferSize )
76 FIXME( "(%p, %p, %p, %p): stub\n",
77 hEnum, lpcCount, lpBuffer, lpBufferSize );
79 SetLastError(WN_NO_NETWORK);
80 return WN_NO_NETWORK;
83 /*********************************************************************
84 * WNetEnumResourceW [MPR.@]
86 DWORD WINAPI WNetEnumResourceW( HANDLE hEnum, LPDWORD lpcCount,
87 LPVOID lpBuffer, LPDWORD lpBufferSize )
89 FIXME( "(%p, %p, %p, %p): stub\n",
90 hEnum, lpcCount, lpBuffer, lpBufferSize );
92 SetLastError(WN_NO_NETWORK);
93 return WN_NO_NETWORK;
96 /*********************************************************************
97 * WNetCloseEnum [MPR.@]
99 DWORD WINAPI WNetCloseEnum( HANDLE hEnum )
101 FIXME( "(%p): stub\n", hEnum );
103 SetLastError(WN_NO_NETWORK);
104 return WN_NO_NETWORK;
107 /*********************************************************************
108 * WNetGetResourceInformationA [MPR.@]
110 DWORD WINAPI WNetGetResourceInformationA( LPNETRESOURCEA lpNetResource,
111 LPVOID lpBuffer, LPDWORD cbBuffer,
112 LPSTR *lplpSystem )
114 FIXME( "(%p, %p, %p, %p): stub\n",
115 lpNetResource, lpBuffer, cbBuffer, lplpSystem );
117 SetLastError(WN_NO_NETWORK);
118 return WN_NO_NETWORK;
121 /*********************************************************************
122 * WNetGetResourceInformationW [MPR.@]
124 DWORD WINAPI WNetGetResourceInformationW( LPNETRESOURCEW lpNetResource,
125 LPVOID lpBuffer, LPDWORD cbBuffer,
126 LPWSTR *lplpSystem )
128 FIXME( "(%p, %p, %p, %p): stub\n",
129 lpNetResource, lpBuffer, cbBuffer, lplpSystem );
131 SetLastError(WN_NO_NETWORK);
132 return WN_NO_NETWORK;
135 /*********************************************************************
136 * WNetGetResourceParentA [MPR.@]
138 DWORD WINAPI WNetGetResourceParentA( LPNETRESOURCEA lpNetResource,
139 LPVOID lpBuffer, LPDWORD lpBufferSize )
141 FIXME( "(%p, %p, %p): stub\n",
142 lpNetResource, lpBuffer, lpBufferSize );
144 SetLastError(WN_NO_NETWORK);
145 return WN_NO_NETWORK;
148 /*********************************************************************
149 * WNetGetResourceParentW [MPR.@]
151 DWORD WINAPI WNetGetResourceParentW( LPNETRESOURCEW lpNetResource,
152 LPVOID lpBuffer, LPDWORD lpBufferSize )
154 FIXME( "(%p, %p, %p): stub\n",
155 lpNetResource, lpBuffer, lpBufferSize );
157 SetLastError(WN_NO_NETWORK);
158 return WN_NO_NETWORK;
164 * Connection Functions
167 /*********************************************************************
168 * WNetAddConnectionA [MPR.@]
170 DWORD WINAPI WNetAddConnectionA( LPCSTR lpRemoteName, LPCSTR lpPassword,
171 LPCSTR lpLocalName )
173 FIXME( "(%s, %p, %s): stub\n",
174 debugstr_a(lpRemoteName), lpPassword, debugstr_a(lpLocalName) );
176 SetLastError(WN_NO_NETWORK);
177 return WN_NO_NETWORK;
180 /*********************************************************************
181 * WNetAddConnectionW [MPR.@]
183 DWORD WINAPI WNetAddConnectionW( LPCWSTR lpRemoteName, LPCWSTR lpPassword,
184 LPCWSTR lpLocalName )
186 FIXME( "(%s, %p, %s): stub\n",
187 debugstr_w(lpRemoteName), lpPassword, debugstr_w(lpLocalName) );
189 SetLastError(WN_NO_NETWORK);
190 return WN_NO_NETWORK;
193 /*********************************************************************
194 * WNetAddConnection2A [MPR.@]
196 DWORD WINAPI WNetAddConnection2A( LPNETRESOURCEA lpNetResource,
197 LPCSTR lpPassword, LPCSTR lpUserID,
198 DWORD dwFlags )
200 FIXME( "(%p, %p, %s, 0x%08lX): stub\n",
201 lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags );
203 SetLastError(WN_NO_NETWORK);
204 return WN_NO_NETWORK;
207 /*********************************************************************
208 * WNetAddConnection2W [MPR.@]
210 DWORD WINAPI WNetAddConnection2W( LPNETRESOURCEW lpNetResource,
211 LPCWSTR lpPassword, LPCWSTR lpUserID,
212 DWORD dwFlags )
214 FIXME( "(%p, %p, %s, 0x%08lX): stub\n",
215 lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags );
217 SetLastError(WN_NO_NETWORK);
218 return WN_NO_NETWORK;
221 /*********************************************************************
222 * WNetAddConnection3A [MPR.@]
224 DWORD WINAPI WNetAddConnection3A( HWND hwndOwner, LPNETRESOURCEA lpNetResource,
225 LPCSTR lpPassword, LPCSTR lpUserID,
226 DWORD dwFlags )
228 FIXME( "(%p, %p, %p, %s, 0x%08lX), stub\n",
229 hwndOwner, lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags );
231 SetLastError(WN_NO_NETWORK);
232 return WN_NO_NETWORK;
235 /*********************************************************************
236 * WNetAddConnection3W [MPR.@]
238 DWORD WINAPI WNetAddConnection3W( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
239 LPCWSTR lpPassword, LPCWSTR lpUserID,
240 DWORD dwFlags )
242 FIXME( "(%p, %p, %p, %s, 0x%08lX), stub\n",
243 hwndOwner, lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags );
245 SetLastError(WN_NO_NETWORK);
246 return WN_NO_NETWORK;
249 /*****************************************************************
250 * WNetUseConnectionA [MPR.@]
252 DWORD WINAPI WNetUseConnectionA( HWND hwndOwner, LPNETRESOURCEA lpNetResource,
253 LPCSTR lpPassword, LPCSTR lpUserID, DWORD dwFlags,
254 LPSTR lpAccessName, LPDWORD lpBufferSize,
255 LPDWORD lpResult )
257 FIXME( "(%p, %p, %p, %s, 0x%08lX, %s, %p, %p), stub\n",
258 hwndOwner, lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags,
259 debugstr_a(lpAccessName), lpBufferSize, lpResult );
261 SetLastError(WN_NO_NETWORK);
262 return WN_NO_NETWORK;
265 /*****************************************************************
266 * WNetUseConnectionW [MPR.@]
268 DWORD WINAPI WNetUseConnectionW( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
269 LPCWSTR lpPassword, LPCWSTR lpUserID, DWORD dwFlags,
270 LPWSTR lpAccessName, LPDWORD lpBufferSize,
271 LPDWORD lpResult )
273 FIXME( "(%p, %p, %p, %s, 0x%08lX, %s, %p, %p), stub\n",
274 hwndOwner, lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags,
275 debugstr_w(lpAccessName), lpBufferSize, lpResult );
277 SetLastError(WN_NO_NETWORK);
278 return WN_NO_NETWORK;
281 /*********************************************************************
282 * WNetCancelConnectionA [MPR.@]
284 DWORD WINAPI WNetCancelConnectionA( LPCSTR lpName, BOOL fForce )
286 FIXME( "(%s, %d), stub\n", debugstr_a(lpName), fForce );
288 return WN_SUCCESS;
291 /*********************************************************************
292 * WNetCancelConnectionW [MPR.@]
294 DWORD WINAPI WNetCancelConnectionW( LPCWSTR lpName, BOOL fForce )
296 FIXME( "(%s, %d), stub\n", debugstr_w(lpName), fForce );
298 return WN_SUCCESS;
301 /*********************************************************************
302 * WNetCancelConnection2A [MPR.@]
304 DWORD WINAPI WNetCancelConnection2A( LPCSTR lpName, DWORD dwFlags, BOOL fForce )
306 FIXME( "(%s, %08lX, %d), stub\n", debugstr_a(lpName), dwFlags, fForce );
308 return WN_SUCCESS;
311 /*********************************************************************
312 * WNetCancelConnection2W [MPR.@]
314 DWORD WINAPI WNetCancelConnection2W( LPCWSTR lpName, DWORD dwFlags, BOOL fForce )
316 FIXME( "(%s, %08lX, %d), stub\n", debugstr_w(lpName), dwFlags, fForce );
318 return WN_SUCCESS;
321 /*****************************************************************
322 * WNetRestoreConnectionA [MPR.@]
324 DWORD WINAPI WNetRestoreConnectionA( HWND hwndOwner, LPSTR lpszDevice )
326 FIXME( "(%p, %s), stub\n", hwndOwner, debugstr_a(lpszDevice) );
328 SetLastError(WN_NO_NETWORK);
329 return WN_NO_NETWORK;
332 /*****************************************************************
333 * WNetRestoreConnectionW [MPR.@]
335 DWORD WINAPI WNetRestoreConnectionW( HWND hwndOwner, LPWSTR lpszDevice )
337 FIXME( "(%p, %s), stub\n", hwndOwner, debugstr_w(lpszDevice) );
339 SetLastError(WN_NO_NETWORK);
340 return WN_NO_NETWORK;
343 /**************************************************************************
344 * WNetGetConnectionA [MPR.@]
346 * RETURNS
347 * - WN_BAD_LOCALNAME lpLocalName makes no sense
348 * - WN_NOT_CONNECTED drive is a local drive
349 * - WN_MORE_DATA buffer isn't big enough
350 * - WN_SUCCESS success (net path in buffer)
353 DWORD WINAPI WNetGetConnectionA( LPCSTR lpLocalName,
354 LPSTR lpRemoteName, LPDWORD lpBufferSize )
356 char label[40];
358 TRACE( "local %s\n", lpLocalName );
359 if (lpLocalName[1] == ':')
361 switch(GetDriveTypeA(lpLocalName))
363 case DRIVE_REMOTE:
364 if (!GetVolumeInformationA( lpLocalName, label, sizeof(label),
365 NULL, NULL, NULL, NULL, 0 )) label[0] = 0;
366 if (strlen(label) + 1 > *lpBufferSize)
368 *lpBufferSize = strlen(label) + 1;
369 return WN_MORE_DATA;
371 strcpy( lpRemoteName, label );
372 *lpBufferSize = strlen(lpRemoteName) + 1;
373 return WN_SUCCESS;
374 case DRIVE_REMOVABLE:
375 case DRIVE_FIXED:
376 case DRIVE_CDROM:
377 TRACE("file is local\n");
378 return WN_NOT_CONNECTED;
379 default:
380 return WN_BAD_LOCALNAME;
383 return WN_BAD_LOCALNAME;
386 /**************************************************************************
387 * WNetGetConnectionW [MPR.@]
389 DWORD WINAPI WNetGetConnectionW( LPCWSTR lpLocalName,
390 LPWSTR lpRemoteName, LPDWORD lpBufferSize )
392 CHAR buf[200];
393 DWORD ret, x = sizeof(buf);
394 INT len = WideCharToMultiByte( CP_ACP, 0, lpLocalName, -1, NULL, 0, NULL, NULL );
395 LPSTR lnA = HeapAlloc( GetProcessHeap(), 0, len );
397 WideCharToMultiByte( CP_ACP, 0, lpLocalName, -1, lnA, len, NULL, NULL );
398 ret = WNetGetConnectionA( lnA, buf, &x );
399 HeapFree( GetProcessHeap(), 0, lnA );
400 if (ret == WN_SUCCESS)
402 x = MultiByteToWideChar( CP_ACP, 0, buf, -1, NULL, 0 );
403 if (x > *lpBufferSize)
405 *lpBufferSize = x;
406 return WN_MORE_DATA;
408 *lpBufferSize = MultiByteToWideChar( CP_ACP, 0, buf, -1, lpRemoteName, *lpBufferSize );
410 return ret;
413 /**************************************************************************
414 * WNetSetConnectionA [MPR.@]
416 DWORD WINAPI WNetSetConnectionA( LPCSTR lpName, DWORD dwProperty,
417 LPVOID pvValue )
419 FIXME( "(%s, %08lX, %p): stub\n", debugstr_a(lpName), dwProperty, pvValue );
421 SetLastError(WN_NO_NETWORK);
422 return WN_NO_NETWORK;
425 /**************************************************************************
426 * WNetSetConnectionW [MPR.@]
428 DWORD WINAPI WNetSetConnectionW( LPCWSTR lpName, DWORD dwProperty,
429 LPVOID pvValue )
431 FIXME( "(%s, %08lX, %p): stub\n", debugstr_w(lpName), dwProperty, pvValue );
433 SetLastError(WN_NO_NETWORK);
434 return WN_NO_NETWORK;
437 /*****************************************************************
438 * WNetGetUniversalNameA [MPR.@]
440 DWORD WINAPI WNetGetUniversalNameA ( LPCSTR lpLocalPath, DWORD dwInfoLevel,
441 LPVOID lpBuffer, LPDWORD lpBufferSize )
443 FIXME( "(%s, 0x%08lX, %p, %p): stub\n",
444 debugstr_a(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
446 SetLastError(WN_NO_NETWORK);
447 return WN_NO_NETWORK;
450 /*****************************************************************
451 * WNetGetUniversalNameW [MPR.@]
453 DWORD WINAPI WNetGetUniversalNameW ( LPCWSTR lpLocalPath, DWORD dwInfoLevel,
454 LPVOID lpBuffer, LPDWORD lpBufferSize )
456 FIXME( "(%s, 0x%08lX, %p, %p): stub\n",
457 debugstr_w(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
459 SetLastError(WN_NO_NETWORK);
460 return WN_NO_NETWORK;
466 * Other Functions
469 /**************************************************************************
470 * WNetGetUserA [MPR.@]
472 * FIXME: we should not return ourselves, but the owner of the drive lpName
474 DWORD WINAPI WNetGetUserA( LPCSTR lpName, LPSTR lpUserID, LPDWORD lpBufferSize )
476 if (GetUserNameA( lpUserID, lpBufferSize )) return WN_SUCCESS;
477 return GetLastError();
480 /*****************************************************************
481 * WNetGetUserW [MPR.@]
483 DWORD WINAPI WNetGetUserW( LPCWSTR lpName, LPWSTR lpUserID, LPDWORD lpBufferSize )
485 FIXME( "(%s, %p, %p): mostly stub\n",
486 debugstr_w(lpName), lpUserID, lpBufferSize );
488 SetLastError(WN_NO_NETWORK);
489 return WN_NO_NETWORK;
492 /*********************************************************************
493 * WNetConnectionDialog [MPR.@]
495 DWORD WINAPI WNetConnectionDialog( HWND hwnd, DWORD dwType )
497 FIXME( "(%p, %08lX): stub\n", hwnd, dwType );
499 SetLastError(WN_NO_NETWORK);
500 return ERROR_NO_NETWORK;
503 /*********************************************************************
504 * WNetConnectionDialog1A [MPR.@]
506 DWORD WINAPI WNetConnectionDialog1A( LPCONNECTDLGSTRUCTA lpConnDlgStruct )
508 FIXME( "(%p): stub\n", lpConnDlgStruct );
510 SetLastError(WN_NO_NETWORK);
511 return ERROR_NO_NETWORK;
514 /*********************************************************************
515 * WNetConnectionDialog1W [MPR.@]
517 DWORD WINAPI WNetConnectionDialog1W( LPCONNECTDLGSTRUCTW lpConnDlgStruct )
519 FIXME( "(%p): stub\n", lpConnDlgStruct );
521 SetLastError(WN_NO_NETWORK);
522 return ERROR_NO_NETWORK;
525 /*********************************************************************
526 * WNetDisconnectDialog [MPR.@]
528 DWORD WINAPI WNetDisconnectDialog( HWND hwnd, DWORD dwType )
530 FIXME( "(%p, %08lX): stub\n", hwnd, dwType );
532 SetLastError(WN_NO_NETWORK);
533 return ERROR_NO_NETWORK;
536 /*********************************************************************
537 * WNetDisconnectDialog1A [MPR.@]
539 DWORD WINAPI WNetDisconnectDialog1A( LPDISCDLGSTRUCTA lpConnDlgStruct )
541 FIXME( "(%p): stub\n", lpConnDlgStruct );
543 SetLastError(WN_NO_NETWORK);
544 return ERROR_NO_NETWORK;
547 /*********************************************************************
548 * WNetDisconnectDialog1W [MPR.@]
550 DWORD WINAPI WNetDisconnectDialog1W( LPDISCDLGSTRUCTW lpConnDlgStruct )
552 FIXME( "(%p): stub\n", lpConnDlgStruct );
554 SetLastError(WN_NO_NETWORK);
555 return ERROR_NO_NETWORK;
558 /*********************************************************************
559 * WNetGetLastErrorA [MPR.@]
561 DWORD WINAPI WNetGetLastErrorA( LPDWORD lpError,
562 LPSTR lpErrorBuf, DWORD nErrorBufSize,
563 LPSTR lpNameBuf, DWORD nNameBufSize )
565 FIXME( "(%p, %p, %ld, %p, %ld): stub\n",
566 lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize );
568 SetLastError(WN_NO_NETWORK);
569 return ERROR_NO_NETWORK;
572 /*********************************************************************
573 * WNetGetLastErrorW [MPR.@]
575 DWORD WINAPI WNetGetLastErrorW( LPDWORD lpError,
576 LPWSTR lpErrorBuf, DWORD nErrorBufSize,
577 LPWSTR lpNameBuf, DWORD nNameBufSize )
579 FIXME( "(%p, %p, %ld, %p, %ld): stub\n",
580 lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize );
582 SetLastError(WN_NO_NETWORK);
583 return ERROR_NO_NETWORK;
586 /*********************************************************************
587 * WNetGetNetworkInformationA [MPR.@]
589 DWORD WINAPI WNetGetNetworkInformationA( LPCSTR lpProvider,
590 LPNETINFOSTRUCT lpNetInfoStruct )
592 FIXME( "(%s, %p): stub\n", debugstr_a(lpProvider), lpNetInfoStruct );
594 SetLastError(WN_NO_NETWORK);
595 return ERROR_NO_NETWORK;
598 /*********************************************************************
599 * WNetGetNetworkInformationW [MPR.@]
601 DWORD WINAPI WNetGetNetworkInformationW( LPCWSTR lpProvider,
602 LPNETINFOSTRUCT lpNetInfoStruct )
604 FIXME( "(%s, %p): stub\n", debugstr_w(lpProvider), lpNetInfoStruct );
606 SetLastError(WN_NO_NETWORK);
607 return ERROR_NO_NETWORK;
610 /*****************************************************************
611 * WNetGetProviderNameA [MPR.@]
613 DWORD WINAPI WNetGetProviderNameA( DWORD dwNetType,
614 LPSTR lpProvider, LPDWORD lpBufferSize )
616 FIXME( "(%ld, %p, %p): stub\n", dwNetType, lpProvider, lpBufferSize );
618 SetLastError(WN_NO_NETWORK);
619 return WN_NO_NETWORK;
622 /*****************************************************************
623 * WNetGetProviderNameW [MPR.@]
625 DWORD WINAPI WNetGetProviderNameW( DWORD dwNetType,
626 LPWSTR lpProvider, LPDWORD lpBufferSize )
628 FIXME( "(%ld, %p, %p): stub\n", dwNetType, lpProvider, lpBufferSize );
630 SetLastError(WN_NO_NETWORK);
631 return WN_NO_NETWORK;