msvcr100: Add VS2010 C/C++ runtime library with forwards to msvcrt.
[wine] / dlls / rasapi32 / rasapi.c
1 /*
2  * RASAPI32
3  *
4  * Copyright 1998,2001 Marcus Meissner
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #include <stdarg.h>
22
23 #include "windef.h"
24 #include "winbase.h"
25 #include "ras.h"
26 #include "raserror.h"
27 #include "wine/debug.h"
28
29 WINE_DEFAULT_DEBUG_CHANNEL(ras);
30
31 DWORD WINAPI RasConnectionNotificationA(HRASCONN hrasconn, HANDLE hEvent, DWORD dwFlags)
32 {
33     FIXME("(%p,%p,0x%08x),stub!\n",hrasconn,hEvent,dwFlags);
34     return 1;
35 }
36
37 DWORD WINAPI RasConnectionNotificationW(HRASCONN hrasconn, HANDLE hEvent, DWORD dwFlags)
38 {
39     FIXME("(%p,%p,0x%08x),stub!\n",hrasconn,hEvent,dwFlags);
40     return 1;
41 }
42
43 DWORD WINAPI RasCreatePhonebookEntryA(HWND hwnd, LPCSTR lpszPhonebook)
44 {
45     FIXME("(%p,%s),stub!\n",hwnd,debugstr_a(lpszPhonebook));
46     return 0;
47 }
48
49 DWORD WINAPI RasCreatePhonebookEntryW(HWND hwnd, LPCWSTR lpszPhonebook)
50 {
51     FIXME("(%p,%s),stub!\n",hwnd,debugstr_w(lpszPhonebook));
52     return 0;
53 }
54
55 DWORD WINAPI RasDeleteSubEntryA(LPCSTR lpszPhonebook, LPCSTR lpszEntry, DWORD dwSubEntryId)
56 {
57     FIXME("(%s,%s,0x%08x),stub!\n",debugstr_a(lpszPhonebook),
58           debugstr_a(lpszEntry),dwSubEntryId);
59     return 0;
60 }
61
62 DWORD WINAPI RasDeleteSubEntryW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry, DWORD dwSubEntryId)
63 {
64     FIXME("(%s,%s,0x%08x),stub!\n",debugstr_w(lpszPhonebook),
65           debugstr_w(lpszEntry),dwSubEntryId);
66     return 0;
67 }
68
69 DWORD WINAPI RasDialA(LPRASDIALEXTENSIONS lpRasDialExtensions, LPCSTR lpszPhonebook,
70                       LPRASDIALPARAMSA lpRasDialParams, DWORD dwNotifierType,
71                       LPVOID lpvNotifier, LPHRASCONN lphRasConn)
72 {
73     FIXME("(%p,%s,%p,0x%08x,%p,%p),stub!\n",lpRasDialExtensions,debugstr_a(lpszPhonebook),
74           lpRasDialParams,dwNotifierType,lpvNotifier,lphRasConn);
75     return 1;
76 }
77
78 DWORD WINAPI RasDialW(LPRASDIALEXTENSIONS lpRasDialExtensions, LPCWSTR lpszPhonebook,
79                       LPRASDIALPARAMSW lpRasDialParams, DWORD dwNotifierType,
80                       LPVOID lpvNotifier, LPHRASCONN lphRasConn)
81 {
82     FIXME("(%p,%s,%p,0x%08x,%p,%p),stub!\n",lpRasDialExtensions,debugstr_w(lpszPhonebook),
83           lpRasDialParams,dwNotifierType,lpvNotifier,lphRasConn);
84     return 1;
85 }
86
87 DWORD WINAPI RasEditPhonebookEntryA(HWND hwnd, LPCSTR lpszPhonebook, LPCSTR lpszEntryName)
88 {
89     FIXME("(%p,%s,%s),stub!\n",hwnd,debugstr_a(lpszPhonebook),debugstr_a(lpszEntryName));
90     return 0;
91 }
92
93 DWORD WINAPI RasEditPhonebookEntryW(HWND hwnd, LPCWSTR lpszPhonebook, LPCWSTR lpszEntryName)
94 {
95     FIXME("(%p,%s,%s),stub!\n",hwnd,debugstr_w(lpszPhonebook),debugstr_w(lpszEntryName));
96     return 0;
97 }
98
99 /**************************************************************************
100  *                 RasEnumConnectionsA                  [RASAPI32.544]
101  */
102 DWORD WINAPI RasEnumConnectionsA( LPRASCONNA rca, LPDWORD lpcb, LPDWORD lpcConnections) {
103         /* Remote Access Service stuff is done by underlying OS anyway */
104         FIXME("(%p,%p,%p),stub!\n",rca,lpcb,lpcConnections);
105         FIXME("RAS support is not implemented! Configure program to use LAN connection/winsock instead!\n");
106         *lpcb = 0; /* size of buffer needed to enumerate connections */
107         *lpcConnections = 0; /* no RAS connections available */
108
109         return 0;
110 }
111
112 /**************************************************************************
113  *                 RasEnumConnectionsW                  [RASAPI32.545]
114  */
115 DWORD WINAPI RasEnumConnectionsW( LPRASCONNW rcw, LPDWORD lpcb, LPDWORD lpcConnections) {
116         /* Remote Access Service stuff is done by underlying OS anyway */
117         FIXME("(%p,%p,%p),stub!\n",rcw,lpcb,lpcConnections);
118         FIXME("RAS support is not implemented! Configure program to use LAN connection/winsock instead!\n");
119         *lpcb = 0; /* size of buffer needed to enumerate connections */
120         *lpcConnections = 0; /* no RAS connections available */
121
122         return 0;
123 }
124
125 /**************************************************************************
126  *                 RasEnumEntriesA                              [RASAPI32.546]
127  */
128 DWORD WINAPI RasEnumEntriesA( LPCSTR Reserved, LPCSTR lpszPhoneBook,
129         LPRASENTRYNAMEA lpRasEntryName,
130         LPDWORD lpcb, LPDWORD lpcEntries)
131 {
132         FIXME("(%p,%s,%p,%p,%p),stub!\n",Reserved,debugstr_a(lpszPhoneBook),
133             lpRasEntryName,lpcb,lpcEntries);
134         *lpcEntries = 0;
135         return 0;
136 }
137
138 /**************************************************************************
139  *                 RasEnumEntriesW                              [RASAPI32.547]
140  */
141 DWORD WINAPI RasEnumEntriesW( LPCWSTR Reserved, LPCWSTR lpszPhoneBook,
142         LPRASENTRYNAMEW lpRasEntryName,
143         LPDWORD lpcb, LPDWORD lpcEntries)
144 {
145         FIXME("(%p,%s,%p,%p,%p),stub!\n",Reserved,debugstr_w(lpszPhoneBook),
146             lpRasEntryName,lpcb,lpcEntries);
147         *lpcEntries = 0;
148         return 0;
149 }
150
151 DWORD WINAPI RasGetConnectStatusA(HRASCONN hrasconn, LPRASCONNSTATUSA lprasconnstatus)
152 {
153     FIXME("(%p,%p),stub!\n",hrasconn,lprasconnstatus);
154     return 0;
155 }
156
157 DWORD WINAPI RasGetConnectStatusW(HRASCONN hrasconn, LPRASCONNSTATUSW lprasconnstatus)
158 {
159     FIXME("(%p,%p),stub!\n",hrasconn,lprasconnstatus);
160     return 0;
161 }
162
163 /**************************************************************************
164  *                 RasGetEntryDialParamsA                       [RASAPI32.550]
165  */
166 DWORD WINAPI RasGetEntryDialParamsA(
167         LPCSTR lpszPhoneBook, LPRASDIALPARAMSA lpRasDialParams,
168         LPBOOL lpfPassword)
169 {
170         FIXME("(%s,%p,%p),stub!\n",debugstr_a(lpszPhoneBook),
171             lpRasDialParams,lpfPassword);
172         return 0;
173 }
174
175 /**************************************************************************
176  *                 RasGetEntryDialParamsW           [RASAPI32.551]
177  */
178 DWORD WINAPI RasGetEntryDialParamsW(
179     LPCWSTR lpszPhoneBook, LPRASDIALPARAMSW lpRasDialParams,
180     LPBOOL lpfPassword)
181 {
182     FIXME("(%s,%p,%p),stub!\n",debugstr_w(lpszPhoneBook),
183             lpRasDialParams,lpfPassword);
184     return 0;
185 }
186
187 /**************************************************************************
188  *                 RasHangUpA                   [RASAPI32.556]
189  */
190 DWORD WINAPI RasHangUpA( HRASCONN hrasconn)
191 {
192         FIXME("(%p),stub!\n",hrasconn);
193         return 0;
194 }
195
196 /**************************************************************************
197  *                 RasHangUpW           [RASAPI32.557]
198  */
199 DWORD WINAPI RasHangUpW(HRASCONN hrasconn)
200 {
201     FIXME("(%p),stub!\n",hrasconn);
202     return 0;
203 }
204
205 /**************************************************************************
206  *                 RasDeleteEntryA              [RASAPI32.7]
207  */
208 DWORD WINAPI RasDeleteEntryA(LPCSTR a, LPCSTR b)
209 {
210         FIXME("(%s,%s),stub!\n",debugstr_a(a),debugstr_a(b));
211         return 0;
212 }
213
214 /**************************************************************************
215  *                 RasDeleteEntryW              [RASAPI32.8]
216  */
217 DWORD WINAPI RasDeleteEntryW(LPCWSTR a, LPCWSTR b)
218 {
219         FIXME("(%s,%s),stub!\n",debugstr_w(a),debugstr_w(b));
220         return 0;
221 }
222
223 /**************************************************************************
224  *                 RasEnumAutodialAddressesA    [RASAPI32.14]
225  */
226 DWORD WINAPI RasEnumAutodialAddressesA(LPSTR *a, LPDWORD b, LPDWORD c)
227 {
228         FIXME("(%p,%p,%p),stub!\n",a,b,c);
229         return 0;
230 }
231
232 /**************************************************************************
233  *                 RasEnumAutodialAddressesW    [RASAPI32.15]
234  */
235 DWORD WINAPI RasEnumAutodialAddressesW(LPWSTR *a, LPDWORD b, LPDWORD c)
236 {
237         FIXME("(%p,%p,%p),stub!\n",a,b,c);
238         return 0;
239 }
240
241 /**************************************************************************
242  *                 RasEnumDevicesA              [RASAPI32.19]
243  *
244  * Just return a virtual modem too see what other APIs programs will
245  * call with it.
246  */
247 DWORD WINAPI RasEnumDevicesA(LPRASDEVINFOA lpRasDevinfo, LPDWORD lpcb, LPDWORD lpcDevices)
248 {
249         if (!lpcb || !lpcDevices)
250             return ERROR_INVALID_PARAMETER;
251
252         FIXME("(%p,%p,%p),stub!\n",lpRasDevinfo,lpcb,lpcDevices);
253         if (!lpRasDevinfo || (*lpcb < sizeof(RASDEVINFOA))) {
254                 *lpcb = sizeof(RASDEVINFOA);
255                 return ERROR_BUFFER_TOO_SMALL;
256         }
257         /* honor dwSize ? */
258         strcpy(lpRasDevinfo->szDeviceType, RASDT_Modem);
259         strcpy(lpRasDevinfo->szDeviceName, "WINE virtmodem");
260         return 0;
261 }
262
263 /**************************************************************************
264  *                 RasEnumDevicesW              [RASAPI32.20]
265  */
266 DWORD WINAPI RasEnumDevicesW(LPRASDEVINFOW a, LPDWORD b, LPDWORD c)
267 {
268         FIXME("(%p,%p,%p),stub!\n",a,b,c);
269         return 0;
270 }
271
272 /**************************************************************************
273  *                 RasGetAutodialAddressA       [RASAPI32.24]
274  */
275 DWORD WINAPI RasGetAutodialAddressA(LPCSTR a, LPDWORD b, LPRASAUTODIALENTRYA c,
276                                         LPDWORD d, LPDWORD e)
277 {
278         FIXME("(%s,%p,%p,%p,%p),stub!\n",debugstr_a(a),b,c,d,e);
279         return 0;
280 }
281
282 /**************************************************************************
283  *                 RasGetAutodialAddressW       [RASAPI32.25]
284  */
285 DWORD WINAPI RasGetAutodialAddressW(LPCWSTR a, LPDWORD b, LPRASAUTODIALENTRYW c,
286                                         LPDWORD d, LPDWORD e)
287 {
288         FIXME("(%s,%p,%p,%p,%p),stub!\n",debugstr_w(a),b,c,d,e);
289         return 0;
290 }
291
292 /**************************************************************************
293  *                 RasGetAutodialEnableA        [RASAPI32.26]
294  */
295 DWORD WINAPI RasGetAutodialEnableA(DWORD a, LPBOOL b)
296 {
297         FIXME("(%x,%p),stub!\n",a,b);
298         return 0;
299 }
300
301 /**************************************************************************
302  *                 RasGetAutodialEnableW        [RASAPI32.27]
303  */
304 DWORD WINAPI RasGetAutodialEnableW(DWORD a, LPBOOL b)
305 {
306         FIXME("(%x,%p),stub!\n",a,b);
307         return 0;
308 }
309
310 /**************************************************************************
311  *                 RasGetAutodialParamA         [RASAPI32.28]
312  */
313 DWORD WINAPI RasGetAutodialParamA(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue)
314 {
315         FIXME("(%x,%p,%p),stub!\n",dwKey,lpvValue,lpdwcbValue);
316         return 0;
317 }
318
319 /**************************************************************************
320  *                 RasGetAutodialParamW         [RASAPI32.29]
321  */
322 DWORD WINAPI RasGetAutodialParamW(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue)
323 {
324         FIXME("(%x,%p,%p),stub!\n",dwKey,lpvValue,lpdwcbValue);
325         return 0;
326 }
327
328 /**************************************************************************
329  *                 RasSetAutodialAddressA       [RASAPI32.57]
330  */
331 DWORD WINAPI RasSetAutodialAddressA(LPCSTR a, DWORD b, LPRASAUTODIALENTRYA c,
332                                         DWORD d, DWORD e)
333 {
334         FIXME("(%s,%x,%p,%x,%x),stub!\n",debugstr_a(a),b,c,d,e);
335         return 0;
336 }
337
338 /**************************************************************************
339  *                 RasSetAutodialAddressW       [RASAPI32.58]
340  */
341 DWORD WINAPI RasSetAutodialAddressW(LPCWSTR a, DWORD b, LPRASAUTODIALENTRYW c,
342                                         DWORD d, DWORD e)
343 {
344         FIXME("(%s,%x,%p,%x,%x),stub!\n",debugstr_w(a),b,c,d,e);
345         return 0;
346 }
347
348 /**************************************************************************
349  *                 RasSetAutodialEnableA        [RASAPI32.59]
350  */
351 DWORD WINAPI RasSetAutodialEnableA(DWORD dwDialingLocation, BOOL fEnabled)
352 {
353         FIXME("(%x,%x),stub!\n",dwDialingLocation,fEnabled);
354         return 0;
355 }
356
357 /**************************************************************************
358  *                 RasSetAutodialEnableW        [RASAPI32.60]
359  */
360 DWORD WINAPI RasSetAutodialEnableW(DWORD dwDialingLocation, BOOL fEnabled)
361 {
362         FIXME("(%x,%x),stub!\n",dwDialingLocation,fEnabled);
363         return 0;
364 }
365
366 /**************************************************************************
367  *                 RasSetAutodialParamA [RASAPI32.61]
368  */
369 DWORD WINAPI RasSetAutodialParamA(DWORD a, LPVOID b, DWORD c)
370 {
371         FIXME("(%x,%p,%x),stub!\n",a,b,c);
372         return 0;
373 }
374
375 /**************************************************************************
376  *                 RasSetAutodialParamW [RASAPI32.62]
377  */
378 DWORD WINAPI RasSetAutodialParamW(DWORD a, LPVOID b, DWORD c)
379 {
380         FIXME("(%x,%p,%x),stub!\n",a,b,c);
381         return 0;
382 }
383
384 /**************************************************************************
385  *                 RasSetEntryPropertiesA       [RASAPI32.67]
386  */
387 DWORD WINAPI RasSetEntryPropertiesA(LPCSTR lpszPhonebook, LPCSTR lpszEntry,
388         LPRASENTRYA lpRasEntry, DWORD dwEntryInfoSize, LPBYTE lpbDeviceInfo,
389         DWORD dwDeviceInfoSize
390 ) {
391         FIXME("(%s,%s,%p,%d,%p,%d), stub!\n",
392                 debugstr_a(lpszPhonebook),debugstr_a(lpszEntry),
393                 lpRasEntry,dwEntryInfoSize,lpbDeviceInfo,dwDeviceInfoSize
394         );
395         FIXME("Rasentry:\n");
396         FIXME("\tdwfOptions %x\n",lpRasEntry->dwfOptions);
397         FIXME("\tszLocalPhoneNumber %s\n",debugstr_a(lpRasEntry->szLocalPhoneNumber));
398         return 0;
399 }
400
401 /**************************************************************************
402  *                 RasSetEntryPropertiesW       [RASAPI32.68]
403  */
404 DWORD WINAPI RasSetEntryPropertiesW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry,
405         LPRASENTRYW lpRasEntry, DWORD dwEntryInfoSize, LPBYTE lpbDeviceInfo,
406         DWORD dwDeviceInfoSize
407 ) {
408         FIXME("(%s,%s,%p,%d,%p,%d), stub!\n",
409                 debugstr_w(lpszPhonebook),debugstr_w(lpszEntry),
410                 lpRasEntry,dwEntryInfoSize,lpbDeviceInfo,dwDeviceInfoSize
411         );
412         return 0;
413 }
414
415 /**************************************************************************
416  *                 RasValidateEntryNameA        [RASAPI32.72]
417  */
418 DWORD WINAPI RasValidateEntryNameA(LPCSTR lpszPhonebook, LPCSTR lpszEntry) {
419         FIXME("(%s,%s), stub!\n",debugstr_a(lpszPhonebook),debugstr_a(lpszEntry));
420         return 0;
421 }
422
423 /**************************************************************************
424  *                 RasValidateEntryNameW        [RASAPI32.73]
425  */
426 DWORD WINAPI RasValidateEntryNameW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry) {
427         FIXME("(%s,%s), stub!\n",debugstr_w(lpszPhonebook),debugstr_w(lpszEntry));
428         return 0;
429 }
430
431 /**************************************************************************
432  *                 RasGetEntryPropertiesA       [RASAPI32.@]
433  */
434 DWORD WINAPI RasGetEntryPropertiesA(LPCSTR lpszPhonebook, LPCSTR lpszEntry, LPRASENTRYA lpRasEntry,
435         LPDWORD lpdwEntryInfoSize, LPBYTE lpbDeviceInfo, LPDWORD lpdwDeviceInfoSize
436 ) {
437         FIXME("(%s,%s,%p,%p,%p,%p), stub!\n", debugstr_a(lpszPhonebook), debugstr_a(lpszEntry), lpRasEntry,
438           lpdwEntryInfoSize, lpbDeviceInfo, lpdwDeviceInfoSize);
439         return 0;
440 }
441
442 /**************************************************************************
443  *                 RasGetEntryPropertiesW   [RASAPI32.@]
444  */
445 DWORD WINAPI RasGetEntryPropertiesW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry, LPRASENTRYW lpRasEntry,
446     LPDWORD lpdwEntryInfoSize, LPBYTE lpbDeviceInfo, LPDWORD lpdwDeviceInfoSize
447 ) {
448     FIXME("(%s,%s,%p,%p,%p,%p), stub!\n", debugstr_w(lpszPhonebook), debugstr_w(lpszEntry), lpRasEntry,
449           lpdwEntryInfoSize, lpbDeviceInfo, lpdwDeviceInfoSize);
450     return 0;
451 }
452
453 DWORD WINAPI RasGetErrorStringA(UINT uErrorValue, LPSTR lpszErrorString, DWORD cBufSize)
454 {
455     FIXME("(0x%08x,%p,0x%08x), stub!\n", uErrorValue, lpszErrorString, cBufSize);
456     return 1;
457 }
458
459 DWORD WINAPI RasGetErrorStringW(UINT uErrorValue, LPWSTR lpszErrorString, DWORD cBufSize)
460 {
461     FIXME("(0x%08x,%p,0x%08x), stub!\n", uErrorValue, lpszErrorString, cBufSize);
462     return 1;
463 }
464
465 DWORD WINAPI RasGetProjectionInfoA(HRASCONN hrasconn, RASPROJECTION rasprojection,
466                                    LPVOID lpprojection, LPDWORD lpcb)
467 {
468     FIXME("(%p,0x%08x,%p,%p), stub!\n", hrasconn, rasprojection, lpprojection, lpcb);
469     return 1;
470 }
471
472 DWORD WINAPI RasGetProjectionInfoW(HRASCONN hrasconn, RASPROJECTION rasprojection,
473                                    LPVOID lpprojection, LPDWORD lpcb)
474 {
475     FIXME("(%p,0x%08x,%p,%p), stub!\n", hrasconn, rasprojection, lpprojection, lpcb);
476     return 1;
477 }
478
479 DWORD WINAPI RasRenameEntryA(LPCSTR lpszPhonebook, LPCSTR lpszOldEntry, LPCSTR lpszNewEntry)
480 {
481     FIXME("(%s,%s,%s), stub!\n", debugstr_a(lpszPhonebook), debugstr_a(lpszOldEntry),
482           debugstr_a(lpszNewEntry));
483     return 0;
484 }
485
486 DWORD WINAPI RasRenameEntryW(LPCWSTR lpszPhonebook, LPCWSTR lpszOldEntry, LPCWSTR lpszNewEntry)
487 {
488     FIXME("(%s,%s,%s), stub!\n", debugstr_w(lpszPhonebook), debugstr_w(lpszOldEntry),
489           debugstr_w(lpszNewEntry));
490     return 0;
491 }
492
493 DWORD WINAPI RasSetEntryDialParamsA(LPCSTR lpszPhonebook, LPRASDIALPARAMSA lprasdialparams,
494                                     BOOL fRemovePassword)
495 {
496     FIXME("(%s,%p,0x%x), stub!\n", debugstr_a(lpszPhonebook), lprasdialparams, fRemovePassword);
497     return 0;
498 }
499
500 DWORD WINAPI RasSetEntryDialParamsW(LPCWSTR lpszPhonebook, LPRASDIALPARAMSW lprasdialparams,
501                                     BOOL fRemovePassword)
502 {
503     FIXME("(%s,%p,0x%x), stub!\n", debugstr_w(lpszPhonebook), lprasdialparams, fRemovePassword);
504     return 0;
505 }
506
507 DWORD WINAPI RasSetSubEntryPropertiesA(LPCSTR lpszPhonebook, LPCSTR lpszEntry, DWORD dwSubEntry,
508                                        LPRASSUBENTRYA lpRasSubEntry, DWORD dwcbRasSubEntry,
509                                        LPBYTE lpbDeviceConfig, DWORD dwcbDeviceConfig)
510 {
511     FIXME("(%s,%s,0x%08x,%p,0x%08x,%p,0x%08x), stub!\n", debugstr_a(lpszPhonebook),
512           debugstr_a(lpszEntry), dwSubEntry, lpRasSubEntry, dwcbRasSubEntry, lpbDeviceConfig,
513           dwcbDeviceConfig);
514     return 0;
515 }
516
517 DWORD WINAPI RasSetSubEntryPropertiesW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry, DWORD dwSubEntry,
518                                        LPRASSUBENTRYW lpRasSubEntry, DWORD dwcbRasSubEntry,
519                                        LPBYTE lpbDeviceConfig, DWORD dwcbDeviceConfig)
520 {
521     FIXME("(%s,%s,0x%08x,%p,0x%08x,%p,0x%08x), stub!\n", debugstr_w(lpszPhonebook),
522           debugstr_w(lpszEntry), dwSubEntry, lpRasSubEntry, dwcbRasSubEntry, lpbDeviceConfig,
523           dwcbDeviceConfig);
524     return 0;
525 }