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