Better implementation of GetCalendarInfo{A,W}, not perfect.
[wine] / dlls / mpr / wnet.c
1 /*
2  * MPR WNet functions
3  *
4  * Copyright 1999 Ulrich Weigand
5  *
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.
10  *
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.
15  *
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
19  */
20
21 #include <ctype.h>
22 #include <string.h>
23 #include <sys/types.h>
24 #include <pwd.h>
25 #include <unistd.h>
26
27 #include "winbase.h"
28 #include "winnls.h"
29 #include "winnetwk.h"
30 #include "wine/debug.h"
31
32 WINE_DEFAULT_DEBUG_CHANNEL(mpr);
33
34
35 /*
36  * Browsing Functions
37  */
38
39 /*********************************************************************
40  * WNetOpenEnumA [MPR.@]
41  */
42 DWORD WINAPI WNetOpenEnumA( DWORD dwScope, DWORD dwType, DWORD dwUsage,
43                             LPNETRESOURCEA lpNet, LPHANDLE lphEnum )
44 {
45     FIXME( "(%08lX, %08lX, %08lX, %p, %p): stub\n",
46             dwScope, dwType, dwUsage, lpNet, lphEnum );
47
48     SetLastError(WN_NO_NETWORK);
49     return WN_NO_NETWORK;
50 }
51
52 /*********************************************************************
53  * WNetOpenEnumW [MPR.@]
54  */
55 DWORD WINAPI WNetOpenEnumW( DWORD dwScope, DWORD dwType, DWORD dwUsage,
56                             LPNETRESOURCEW lpNet, LPHANDLE lphEnum )
57 {
58    FIXME( "(%08lX, %08lX, %08lX, %p, %p): stub\n",
59           dwScope, dwType, dwUsage, lpNet, lphEnum );
60
61    SetLastError(WN_NO_NETWORK);
62    return WN_NO_NETWORK;
63 }
64
65 /*********************************************************************
66  * WNetEnumResourceA [MPR.@]
67  */
68 DWORD WINAPI WNetEnumResourceA( HANDLE hEnum, LPDWORD lpcCount, 
69                                 LPVOID lpBuffer, LPDWORD lpBufferSize )
70 {
71     FIXME( "(%04X, %p, %p, %p): stub\n", 
72             hEnum, lpcCount, lpBuffer, lpBufferSize );
73
74     SetLastError(WN_NO_NETWORK);
75     return WN_NO_NETWORK;
76 }
77
78 /*********************************************************************
79  * WNetEnumResourceW [MPR.@]
80  */
81 DWORD WINAPI WNetEnumResourceW( HANDLE hEnum, LPDWORD lpcCount, 
82                                 LPVOID lpBuffer, LPDWORD lpBufferSize )
83 {
84     FIXME( "(%04X, %p, %p, %p): stub\n", 
85             hEnum, lpcCount, lpBuffer, lpBufferSize );
86
87     SetLastError(WN_NO_NETWORK);
88     return WN_NO_NETWORK;
89 }
90
91 /*********************************************************************
92  * WNetCloseEnum [MPR.@]
93  */
94 DWORD WINAPI WNetCloseEnum( HANDLE hEnum )
95 {
96     FIXME( "(%04X): stub\n", hEnum );
97
98     SetLastError(WN_NO_NETWORK);
99     return WN_NO_NETWORK;
100 }
101
102 /*********************************************************************
103  * WNetGetResourceInformationA [MPR.@]
104  */
105 DWORD WINAPI WNetGetResourceInformationA( LPNETRESOURCEA lpNetResource, 
106                                           LPVOID lpBuffer, LPDWORD cbBuffer, 
107                                           LPSTR *lplpSystem )
108 {
109     FIXME( "(%p, %p, %p, %p): stub\n",
110            lpNetResource, lpBuffer, cbBuffer, lplpSystem );
111
112     SetLastError(WN_NO_NETWORK);
113     return WN_NO_NETWORK;
114 }
115
116 /*********************************************************************
117  * WNetGetResourceInformationW [MPR.@]
118  */
119 DWORD WINAPI WNetGetResourceInformationW( LPNETRESOURCEW lpNetResource, 
120                                           LPVOID lpBuffer, LPDWORD cbBuffer, 
121                                           LPWSTR *lplpSystem )
122 {
123     FIXME( "(%p, %p, %p, %p): stub\n",
124            lpNetResource, lpBuffer, cbBuffer, lplpSystem );
125
126     SetLastError(WN_NO_NETWORK);
127     return WN_NO_NETWORK;
128 }
129
130 /*********************************************************************
131  * WNetGetResourceParentA [MPR.@]
132  */
133 DWORD WINAPI WNetGetResourceParentA( LPNETRESOURCEA lpNetResource,
134                                      LPVOID lpBuffer, LPDWORD lpBufferSize )
135 {
136     FIXME( "(%p, %p, %p): stub\n", 
137            lpNetResource, lpBuffer, lpBufferSize );
138
139     SetLastError(WN_NO_NETWORK);
140     return WN_NO_NETWORK;
141 }
142
143 /*********************************************************************
144  * WNetGetResourceParentW [MPR.@]
145  */
146 DWORD WINAPI WNetGetResourceParentW( LPNETRESOURCEW lpNetResource,
147                                      LPVOID lpBuffer, LPDWORD lpBufferSize )
148 {
149     FIXME( "(%p, %p, %p): stub\n", 
150            lpNetResource, lpBuffer, lpBufferSize );
151
152     SetLastError(WN_NO_NETWORK);
153     return WN_NO_NETWORK;
154 }
155
156
157
158 /*
159  * Connection Functions
160  */
161
162 /*********************************************************************
163  *  WNetAddConnectionA [MPR.@]
164  */
165 DWORD WINAPI WNetAddConnectionA( LPCSTR lpRemoteName, LPCSTR lpPassword,
166                                  LPCSTR lpLocalName )
167 {
168     FIXME( "(%s, %p, %s): stub\n", 
169            debugstr_a(lpRemoteName), lpPassword, debugstr_a(lpLocalName) );
170
171     SetLastError(WN_NO_NETWORK);
172     return WN_NO_NETWORK;
173 }
174
175 /*********************************************************************
176  *  WNetAddConnectionW [MPR.@]
177  */
178 DWORD WINAPI WNetAddConnectionW( LPCWSTR lpRemoteName, LPCWSTR lpPassword,
179                                  LPCWSTR lpLocalName )
180 {
181     FIXME( "(%s, %p, %s): stub\n", 
182            debugstr_w(lpRemoteName), lpPassword, debugstr_w(lpLocalName) );
183
184     SetLastError(WN_NO_NETWORK);
185     return WN_NO_NETWORK;
186 }
187
188 /*********************************************************************
189  *  WNetAddConnection2A [MPR.@]
190  */
191 DWORD WINAPI WNetAddConnection2A( LPNETRESOURCEA lpNetResource,
192                                   LPCSTR lpPassword, LPCSTR lpUserID, 
193                                   DWORD dwFlags )
194 {
195     FIXME( "(%p, %p, %s, 0x%08lX): stub\n", 
196            lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags );
197
198     SetLastError(WN_NO_NETWORK);
199     return WN_NO_NETWORK;
200 }
201
202 /*********************************************************************
203  * WNetAddConnection2W [MPR.@]
204  */
205 DWORD WINAPI WNetAddConnection2W( LPNETRESOURCEW lpNetResource,
206                                   LPCWSTR lpPassword, LPCWSTR lpUserID, 
207                                   DWORD dwFlags )
208 {
209     FIXME( "(%p, %p, %s, 0x%08lX): stub\n", 
210            lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags );
211
212     SetLastError(WN_NO_NETWORK);
213     return WN_NO_NETWORK;
214 }
215
216 /*********************************************************************
217  * WNetAddConnection3A [MPR.@]
218  */
219 DWORD WINAPI WNetAddConnection3A( HWND hwndOwner, LPNETRESOURCEA lpNetResource,
220                                   LPCSTR lpPassword, LPCSTR lpUserID, 
221                                   DWORD dwFlags )
222 {
223     FIXME( "(%04x, %p, %p, %s, 0x%08lX), stub\n", 
224            hwndOwner, lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags );
225
226     SetLastError(WN_NO_NETWORK);
227     return WN_NO_NETWORK;
228 }
229
230 /*********************************************************************
231  * WNetAddConnection3W [MPR.@]
232  */
233 DWORD WINAPI WNetAddConnection3W( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
234                                   LPCWSTR lpPassword, LPCWSTR lpUserID, 
235                                   DWORD dwFlags )
236 {
237     FIXME( "(%04x, %p, %p, %s, 0x%08lX), stub\n", 
238            hwndOwner, lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags );
239
240     SetLastError(WN_NO_NETWORK);
241     return WN_NO_NETWORK;
242
243
244 /*****************************************************************
245  *  WNetUseConnectionA [MPR.@]
246  */
247 DWORD WINAPI WNetUseConnectionA( HWND hwndOwner, LPNETRESOURCEA lpNetResource,
248                                  LPCSTR lpPassword, LPCSTR lpUserID, DWORD dwFlags,
249                                  LPSTR lpAccessName, LPDWORD lpBufferSize, 
250                                  LPDWORD lpResult )
251 {
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 );
255
256     SetLastError(WN_NO_NETWORK);
257     return WN_NO_NETWORK;
258 }
259
260 /*****************************************************************
261  *  WNetUseConnectionW [MPR.@]
262  */
263 DWORD WINAPI WNetUseConnectionW( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
264                                  LPCWSTR lpPassword, LPCWSTR lpUserID, DWORD dwFlags,
265                                  LPWSTR lpAccessName, LPDWORD lpBufferSize,
266                                  LPDWORD lpResult )
267 {
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 );
271
272     SetLastError(WN_NO_NETWORK);
273     return WN_NO_NETWORK;
274 }
275
276 /*********************************************************************
277  *  WNetCancelConnectionA [MPR.@]
278  */
279 DWORD WINAPI WNetCancelConnectionA( LPCSTR lpName, BOOL fForce )
280 {
281     FIXME( "(%s, %d), stub\n", debugstr_a(lpName), fForce );
282
283     return WN_SUCCESS;
284 }
285
286 /*********************************************************************
287  *  WNetCancelConnectionW [MPR.@]
288  */
289 DWORD WINAPI WNetCancelConnectionW( LPCWSTR lpName, BOOL fForce ) 
290 {
291     FIXME( "(%s, %d), stub\n", debugstr_w(lpName), fForce );
292
293     return WN_SUCCESS;
294 }
295
296 /*********************************************************************
297  *  WNetCancelConnection2A [MPR.@]
298  */
299 DWORD WINAPI WNetCancelConnection2A( LPCSTR lpName, DWORD dwFlags, BOOL fForce ) 
300 {
301     FIXME( "(%s, %08lX, %d), stub\n", debugstr_a(lpName), dwFlags, fForce );
302
303     return WN_SUCCESS;
304 }
305
306 /*********************************************************************
307  *  WNetCancelConnection2W [MPR.@]
308  */
309 DWORD WINAPI WNetCancelConnection2W( LPCWSTR lpName, DWORD dwFlags, BOOL fForce ) 
310 {
311     FIXME( "(%s, %08lX, %d), stub\n", debugstr_w(lpName), dwFlags, fForce );
312
313     return WN_SUCCESS;
314 }
315
316 /*****************************************************************
317  *  WNetRestoreConnectionA [MPR.@]
318  */
319 DWORD WINAPI WNetRestoreConnectionA( HWND hwndOwner, LPSTR lpszDevice )
320 {
321     FIXME( "(%04X, %s), stub\n", hwndOwner, debugstr_a(lpszDevice) );
322
323     SetLastError(WN_NO_NETWORK);
324     return WN_NO_NETWORK;
325 }
326
327 /*****************************************************************
328  *  WNetRestoreConnectionW [MPR.@]
329  */
330 DWORD WINAPI WNetRestoreConnectionW( HWND hwndOwner, LPWSTR lpszDevice )
331 {
332     FIXME( "(%04X, %s), stub\n", hwndOwner, debugstr_w(lpszDevice) );
333
334     SetLastError(WN_NO_NETWORK);
335     return WN_NO_NETWORK;
336 }
337
338 /**************************************************************************
339  * WNetGetConnectionA [MPR.@]
340  *
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)  
346  *
347  */
348 DWORD WINAPI WNetGetConnectionA( LPCSTR lpLocalName, 
349                                  LPSTR lpRemoteName, LPDWORD lpBufferSize )
350 {
351     char label[40];
352
353     TRACE( "local %s\n", lpLocalName );
354     if (lpLocalName[1] == ':')
355     {
356         switch(GetDriveTypeA(lpLocalName))
357         {
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)
362             {
363                 *lpBufferSize = strlen(label) + 1;
364                 return WN_MORE_DATA;
365             }
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;
376         }
377     }
378     return WN_BAD_LOCALNAME;
379 }
380
381 /**************************************************************************
382  * WNetGetConnectionW [MPR.@]
383  */
384 DWORD WINAPI WNetGetConnectionW( LPCWSTR lpLocalName, 
385                                  LPWSTR lpRemoteName, LPDWORD lpBufferSize )
386 {
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 );
391
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)
396     {
397         x = MultiByteToWideChar( CP_ACP, 0, buf, -1, NULL, 0 );
398         if (x > *lpBufferSize)
399         {
400             *lpBufferSize = x;
401             return WN_MORE_DATA;
402         }
403         *lpBufferSize = MultiByteToWideChar( CP_ACP, 0, buf, -1, lpRemoteName, *lpBufferSize );
404     }
405     return ret;
406 }
407
408 /**************************************************************************
409  * WNetSetConnectionA [MPR.@]
410  */
411 DWORD WINAPI WNetSetConnectionA( LPCSTR lpName, DWORD dwProperty, 
412                                  LPVOID pvValue )
413 {
414     FIXME( "(%s, %08lX, %p): stub\n", debugstr_a(lpName), dwProperty, pvValue );
415
416     SetLastError(WN_NO_NETWORK);
417     return WN_NO_NETWORK;
418 }
419
420 /**************************************************************************
421  * WNetSetConnectionW [MPR.@]
422  */
423 DWORD WINAPI WNetSetConnectionW( LPCWSTR lpName, DWORD dwProperty, 
424                                  LPVOID pvValue )
425 {
426     FIXME( "(%s, %08lX, %p): stub\n", debugstr_w(lpName), dwProperty, pvValue );
427
428     SetLastError(WN_NO_NETWORK);
429     return WN_NO_NETWORK;
430 }
431
432 /*****************************************************************
433  * WNetGetUniversalNameA [MPR.@]
434  */
435 DWORD WINAPI WNetGetUniversalNameA ( LPCSTR lpLocalPath, DWORD dwInfoLevel, 
436                                      LPVOID lpBuffer, LPDWORD lpBufferSize )
437 {
438     FIXME( "(%s, 0x%08lX, %p, %p): stub\n", 
439            debugstr_a(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
440
441     SetLastError(WN_NO_NETWORK);
442     return WN_NO_NETWORK;
443 }
444
445 /*****************************************************************
446  * WNetGetUniversalNameW [MPR.@]
447  */
448 DWORD WINAPI WNetGetUniversalNameW ( LPCWSTR lpLocalPath, DWORD dwInfoLevel, 
449                                      LPVOID lpBuffer, LPDWORD lpBufferSize )
450 {
451     FIXME( "(%s, 0x%08lX, %p, %p): stub\n", 
452            debugstr_w(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
453
454     SetLastError(WN_NO_NETWORK);
455     return WN_NO_NETWORK;
456 }
457
458
459
460 /*
461  * Other Functions
462  */
463
464 /**************************************************************************
465  * WNetGetUserA [MPR.@]
466  *
467  * FIXME: we should not return ourselves, but the owner of the drive lpName
468  */
469 DWORD WINAPI WNetGetUserA( LPCSTR lpName, LPSTR lpUserID, LPDWORD lpBufferSize )
470 {
471     struct passwd *pwd = getpwuid(getuid());
472
473     FIXME( "(%s, %p, %p): mostly stub\n", 
474            debugstr_a(lpName), lpUserID, lpBufferSize );
475
476     if (pwd)
477     {
478         if ( strlen(pwd->pw_name) + 1 > *lpBufferSize )
479         {
480             *lpBufferSize = strlen(pwd->pw_name) + 1;
481
482             SetLastError(ERROR_MORE_DATA);
483             return ERROR_MORE_DATA;
484         }
485
486         strcpy( lpUserID, pwd->pw_name );
487         *lpBufferSize = strlen(pwd->pw_name) + 1;
488         return WN_SUCCESS;
489     }
490
491     /* FIXME: wrong return value */
492     SetLastError(ERROR_NO_NETWORK);
493     return ERROR_NO_NETWORK;
494 }
495
496 /*****************************************************************
497  * WNetGetUserW [MPR.@]
498  */
499 DWORD WINAPI WNetGetUserW( LPCWSTR lpName, LPWSTR lpUserID, LPDWORD lpBufferSize ) 
500 {
501     FIXME( "(%s, %p, %p): mostly stub\n", 
502            debugstr_w(lpName), lpUserID, lpBufferSize );
503
504     SetLastError(WN_NO_NETWORK);
505     return WN_NO_NETWORK;
506 }
507
508 /*********************************************************************
509  * WNetConnectionDialog [MPR.@]
510  */ 
511 DWORD WINAPI WNetConnectionDialog( HWND hwnd, DWORD dwType )
512
513     FIXME( "(%04x, %08lX): stub\n", hwnd, dwType );
514
515     SetLastError(WN_NO_NETWORK);
516     return ERROR_NO_NETWORK;
517 }
518
519 /*********************************************************************
520  * WNetConnectionDialog1A [MPR.@]
521  */
522 DWORD WINAPI WNetConnectionDialog1A( LPCONNECTDLGSTRUCTA lpConnDlgStruct )
523
524     FIXME( "(%p): stub\n", lpConnDlgStruct );
525
526     SetLastError(WN_NO_NETWORK);
527     return ERROR_NO_NETWORK;
528 }
529
530 /*********************************************************************
531  * WNetConnectionDialog1W [MPR.@]
532  */ 
533 DWORD WINAPI WNetConnectionDialog1W( LPCONNECTDLGSTRUCTW lpConnDlgStruct )
534
535     FIXME( "(%p): stub\n", lpConnDlgStruct );
536
537     SetLastError(WN_NO_NETWORK);
538     return ERROR_NO_NETWORK;
539 }
540
541 /*********************************************************************
542  * WNetDisconnectDialog [MPR.@]
543  */ 
544 DWORD WINAPI WNetDisconnectDialog( HWND hwnd, DWORD dwType )
545
546     FIXME( "(%04x, %08lX): stub\n", hwnd, dwType );
547
548     SetLastError(WN_NO_NETWORK);
549     return ERROR_NO_NETWORK;
550 }
551
552 /*********************************************************************
553  * WNetDisconnectDialog1A [MPR.@]
554  */ 
555 DWORD WINAPI WNetDisconnectDialog1A( LPDISCDLGSTRUCTA lpConnDlgStruct )
556
557     FIXME( "(%p): stub\n", lpConnDlgStruct );
558
559     SetLastError(WN_NO_NETWORK);
560     return ERROR_NO_NETWORK;
561 }
562
563 /*********************************************************************
564  * WNetDisconnectDialog1W [MPR.@]
565  */ 
566 DWORD WINAPI WNetDisconnectDialog1W( LPDISCDLGSTRUCTW lpConnDlgStruct )
567
568     FIXME( "(%p): stub\n", lpConnDlgStruct );
569
570     SetLastError(WN_NO_NETWORK);
571     return ERROR_NO_NETWORK;
572 }
573
574 /*********************************************************************
575  * WNetGetLastErrorA [MPR.@]
576  */ 
577 DWORD WINAPI WNetGetLastErrorA( LPDWORD lpError,
578                                 LPSTR lpErrorBuf, DWORD nErrorBufSize,
579                                 LPSTR lpNameBuf, DWORD nNameBufSize )
580 {
581     FIXME( "(%p, %p, %ld, %p, %ld): stub\n", 
582            lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize );
583
584     SetLastError(WN_NO_NETWORK);
585     return ERROR_NO_NETWORK;
586 }
587
588 /*********************************************************************
589  * WNetGetLastErrorW [MPR.@]
590  */ 
591 DWORD WINAPI WNetGetLastErrorW( LPDWORD lpError,
592                                 LPWSTR lpErrorBuf, DWORD nErrorBufSize,
593                          LPWSTR lpNameBuf, DWORD nNameBufSize )
594 {
595     FIXME( "(%p, %p, %ld, %p, %ld): stub\n", 
596            lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize );
597
598     SetLastError(WN_NO_NETWORK);
599     return ERROR_NO_NETWORK;
600 }
601
602 /*********************************************************************
603  * WNetGetNetworkInformationA [MPR.@]
604  */ 
605 DWORD WINAPI WNetGetNetworkInformationA( LPCSTR lpProvider, 
606                                          LPNETINFOSTRUCT lpNetInfoStruct )
607 {
608     FIXME( "(%s, %p): stub\n", debugstr_a(lpProvider), lpNetInfoStruct );
609
610     SetLastError(WN_NO_NETWORK);
611     return ERROR_NO_NETWORK;
612 }
613
614 /*********************************************************************
615  * WNetGetNetworkInformationW [MPR.@]
616  */ 
617 DWORD WINAPI WNetGetNetworkInformationW( LPCWSTR lpProvider, 
618                                          LPNETINFOSTRUCT lpNetInfoStruct )
619 {
620     FIXME( "(%s, %p): stub\n", debugstr_w(lpProvider), lpNetInfoStruct );
621
622     SetLastError(WN_NO_NETWORK);
623     return ERROR_NO_NETWORK;
624 }
625
626 /*****************************************************************
627  *  WNetGetProviderNameA [MPR.@]
628  */
629 DWORD WINAPI WNetGetProviderNameA( DWORD dwNetType, 
630                                    LPSTR lpProvider, LPDWORD lpBufferSize )
631 {
632     FIXME( "(%ld, %p, %p): stub\n", dwNetType, lpProvider, lpBufferSize );
633
634     SetLastError(WN_NO_NETWORK);
635     return WN_NO_NETWORK;
636 }
637
638 /*****************************************************************
639  *  WNetGetProviderNameW [MPR.@]
640  */
641 DWORD WINAPI WNetGetProviderNameW( DWORD dwNetType,
642                                    LPWSTR lpProvider, LPDWORD lpBufferSize ) 
643 {
644     FIXME( "(%ld, %p, %p): stub\n", dwNetType, lpProvider, lpBufferSize );
645
646     SetLastError(WN_NO_NETWORK);
647     return WN_NO_NETWORK;
648 }
649