msvcrt: Add a helper function to flush all buffers.
[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
254         if(lpRasDevinfo && lpRasDevinfo->dwSize != sizeof(RASDEVINFOA))
255                 return ERROR_INVALID_SIZE;
256
257         if (!lpRasDevinfo || (*lpcb < sizeof(RASDEVINFOA))) {
258                 *lpcb = sizeof(RASDEVINFOA);
259                 return ERROR_BUFFER_TOO_SMALL;
260         }
261         /* honor dwSize ? */
262         strcpy(lpRasDevinfo->szDeviceType, RASDT_Modem);
263         strcpy(lpRasDevinfo->szDeviceName, "WINE virtmodem");
264         return 0;
265 }
266
267 /**************************************************************************
268  *                 RasEnumDevicesW              [RASAPI32.20]
269  */
270 DWORD WINAPI RasEnumDevicesW(LPRASDEVINFOW a, LPDWORD b, LPDWORD c)
271 {
272         FIXME("(%p,%p,%p),stub!\n",a,b,c);
273         return 0;
274 }
275
276 /**************************************************************************
277  *                 RasGetAutodialAddressA       [RASAPI32.24]
278  */
279 DWORD WINAPI RasGetAutodialAddressA(LPCSTR a, LPDWORD b, LPRASAUTODIALENTRYA c,
280                                         LPDWORD d, LPDWORD e)
281 {
282         FIXME("(%s,%p,%p,%p,%p),stub!\n",debugstr_a(a),b,c,d,e);
283         return 0;
284 }
285
286 /**************************************************************************
287  *                 RasGetAutodialAddressW       [RASAPI32.25]
288  */
289 DWORD WINAPI RasGetAutodialAddressW(LPCWSTR a, LPDWORD b, LPRASAUTODIALENTRYW c,
290                                         LPDWORD d, LPDWORD e)
291 {
292         FIXME("(%s,%p,%p,%p,%p),stub!\n",debugstr_w(a),b,c,d,e);
293         return 0;
294 }
295
296 /**************************************************************************
297  *                 RasGetAutodialEnableA        [RASAPI32.26]
298  */
299 DWORD WINAPI RasGetAutodialEnableA(DWORD a, LPBOOL b)
300 {
301         FIXME("(%x,%p),stub!\n",a,b);
302         return 0;
303 }
304
305 /**************************************************************************
306  *                 RasGetAutodialEnableW        [RASAPI32.27]
307  */
308 DWORD WINAPI RasGetAutodialEnableW(DWORD a, LPBOOL b)
309 {
310         FIXME("(%x,%p),stub!\n",a,b);
311         return 0;
312 }
313
314 /**************************************************************************
315  *                 RasGetAutodialParamA         [RASAPI32.28]
316  */
317 DWORD WINAPI RasGetAutodialParamA(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue)
318 {
319         FIXME("(%x,%p,%p),stub!\n",dwKey,lpvValue,lpdwcbValue);
320         return 0;
321 }
322
323 /**************************************************************************
324  *                 RasGetAutodialParamW         [RASAPI32.29]
325  */
326 DWORD WINAPI RasGetAutodialParamW(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue)
327 {
328         FIXME("(%x,%p,%p),stub!\n",dwKey,lpvValue,lpdwcbValue);
329         return 0;
330 }
331
332 /**************************************************************************
333  *                 RasSetAutodialAddressA       [RASAPI32.57]
334  */
335 DWORD WINAPI RasSetAutodialAddressA(LPCSTR a, DWORD b, LPRASAUTODIALENTRYA c,
336                                         DWORD d, DWORD e)
337 {
338         FIXME("(%s,%x,%p,%x,%x),stub!\n",debugstr_a(a),b,c,d,e);
339         return 0;
340 }
341
342 /**************************************************************************
343  *                 RasSetAutodialAddressW       [RASAPI32.58]
344  */
345 DWORD WINAPI RasSetAutodialAddressW(LPCWSTR a, DWORD b, LPRASAUTODIALENTRYW c,
346                                         DWORD d, DWORD e)
347 {
348         FIXME("(%s,%x,%p,%x,%x),stub!\n",debugstr_w(a),b,c,d,e);
349         return 0;
350 }
351
352 /**************************************************************************
353  *                 RasSetAutodialEnableA        [RASAPI32.59]
354  */
355 DWORD WINAPI RasSetAutodialEnableA(DWORD dwDialingLocation, BOOL fEnabled)
356 {
357         FIXME("(%x,%x),stub!\n",dwDialingLocation,fEnabled);
358         return 0;
359 }
360
361 /**************************************************************************
362  *                 RasSetAutodialEnableW        [RASAPI32.60]
363  */
364 DWORD WINAPI RasSetAutodialEnableW(DWORD dwDialingLocation, BOOL fEnabled)
365 {
366         FIXME("(%x,%x),stub!\n",dwDialingLocation,fEnabled);
367         return 0;
368 }
369
370 /**************************************************************************
371  *                 RasSetAutodialParamA [RASAPI32.61]
372  */
373 DWORD WINAPI RasSetAutodialParamA(DWORD a, LPVOID b, DWORD c)
374 {
375         FIXME("(%x,%p,%x),stub!\n",a,b,c);
376         return 0;
377 }
378
379 /**************************************************************************
380  *                 RasSetAutodialParamW [RASAPI32.62]
381  */
382 DWORD WINAPI RasSetAutodialParamW(DWORD a, LPVOID b, DWORD c)
383 {
384         FIXME("(%x,%p,%x),stub!\n",a,b,c);
385         return 0;
386 }
387
388 /**************************************************************************
389  *                 RasSetEntryPropertiesA       [RASAPI32.67]
390  */
391 DWORD WINAPI RasSetEntryPropertiesA(LPCSTR lpszPhonebook, LPCSTR lpszEntry,
392         LPRASENTRYA lpRasEntry, DWORD dwEntryInfoSize, LPBYTE lpbDeviceInfo,
393         DWORD dwDeviceInfoSize
394 ) {
395         FIXME("(%s,%s,%p,%d,%p,%d), stub!\n",
396                 debugstr_a(lpszPhonebook),debugstr_a(lpszEntry),
397                 lpRasEntry,dwEntryInfoSize,lpbDeviceInfo,dwDeviceInfoSize
398         );
399         FIXME("Rasentry:\n");
400         FIXME("\tdwfOptions %x\n",lpRasEntry->dwfOptions);
401         FIXME("\tszLocalPhoneNumber %s\n",debugstr_a(lpRasEntry->szLocalPhoneNumber));
402         return 0;
403 }
404
405 /**************************************************************************
406  *                 RasSetEntryPropertiesW       [RASAPI32.68]
407  */
408 DWORD WINAPI RasSetEntryPropertiesW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry,
409         LPRASENTRYW lpRasEntry, DWORD dwEntryInfoSize, LPBYTE lpbDeviceInfo,
410         DWORD dwDeviceInfoSize
411 ) {
412         FIXME("(%s,%s,%p,%d,%p,%d), stub!\n",
413                 debugstr_w(lpszPhonebook),debugstr_w(lpszEntry),
414                 lpRasEntry,dwEntryInfoSize,lpbDeviceInfo,dwDeviceInfoSize
415         );
416         return 0;
417 }
418
419 /**************************************************************************
420  *                 RasValidateEntryNameA        [RASAPI32.72]
421  */
422 DWORD WINAPI RasValidateEntryNameA(LPCSTR lpszPhonebook, LPCSTR lpszEntry) {
423         FIXME("(%s,%s), stub!\n",debugstr_a(lpszPhonebook),debugstr_a(lpszEntry));
424         return 0;
425 }
426
427 /**************************************************************************
428  *                 RasValidateEntryNameW        [RASAPI32.73]
429  */
430 DWORD WINAPI RasValidateEntryNameW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry) {
431         FIXME("(%s,%s), stub!\n",debugstr_w(lpszPhonebook),debugstr_w(lpszEntry));
432         return 0;
433 }
434
435 /**************************************************************************
436  *                 RasGetEntryPropertiesA       [RASAPI32.@]
437  */
438 DWORD WINAPI RasGetEntryPropertiesA(LPCSTR lpszPhonebook, LPCSTR lpszEntry, LPRASENTRYA lpRasEntry,
439         LPDWORD lpdwEntryInfoSize, LPBYTE lpbDeviceInfo, LPDWORD lpdwDeviceInfoSize
440 ) {
441         FIXME("(%s,%s,%p,%p,%p,%p), stub!\n", debugstr_a(lpszPhonebook), debugstr_a(lpszEntry), lpRasEntry,
442           lpdwEntryInfoSize, lpbDeviceInfo, lpdwDeviceInfoSize);
443         return 0;
444 }
445
446 /**************************************************************************
447  *                 RasGetEntryPropertiesW   [RASAPI32.@]
448  */
449 DWORD WINAPI RasGetEntryPropertiesW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry, LPRASENTRYW lpRasEntry,
450     LPDWORD lpdwEntryInfoSize, LPBYTE lpbDeviceInfo, LPDWORD lpdwDeviceInfoSize
451 ) {
452     FIXME("(%s,%s,%p,%p,%p,%p), stub!\n", debugstr_w(lpszPhonebook), debugstr_w(lpszEntry), lpRasEntry,
453           lpdwEntryInfoSize, lpbDeviceInfo, lpdwDeviceInfoSize);
454     return 0;
455 }
456
457 DWORD WINAPI RasGetErrorStringA(UINT uErrorValue, LPSTR lpszErrorString, DWORD cBufSize)
458 {
459     FIXME("(0x%08x,%p,0x%08x), stub!\n", uErrorValue, lpszErrorString, cBufSize);
460     return 1;
461 }
462
463 DWORD WINAPI RasGetErrorStringW(UINT uErrorValue, LPWSTR lpszErrorString, DWORD cBufSize)
464 {
465     FIXME("(0x%08x,%p,0x%08x), stub!\n", uErrorValue, lpszErrorString, cBufSize);
466     return 1;
467 }
468
469 DWORD WINAPI RasGetProjectionInfoA(HRASCONN hrasconn, RASPROJECTION rasprojection,
470                                    LPVOID lpprojection, LPDWORD lpcb)
471 {
472     FIXME("(%p,0x%08x,%p,%p), stub!\n", hrasconn, rasprojection, lpprojection, lpcb);
473     return 1;
474 }
475
476 DWORD WINAPI RasGetProjectionInfoW(HRASCONN hrasconn, RASPROJECTION rasprojection,
477                                    LPVOID lpprojection, LPDWORD lpcb)
478 {
479     FIXME("(%p,0x%08x,%p,%p), stub!\n", hrasconn, rasprojection, lpprojection, lpcb);
480     return 1;
481 }
482
483 DWORD WINAPI RasRenameEntryA(LPCSTR lpszPhonebook, LPCSTR lpszOldEntry, LPCSTR lpszNewEntry)
484 {
485     FIXME("(%s,%s,%s), stub!\n", debugstr_a(lpszPhonebook), debugstr_a(lpszOldEntry),
486           debugstr_a(lpszNewEntry));
487     return 0;
488 }
489
490 DWORD WINAPI RasRenameEntryW(LPCWSTR lpszPhonebook, LPCWSTR lpszOldEntry, LPCWSTR lpszNewEntry)
491 {
492     FIXME("(%s,%s,%s), stub!\n", debugstr_w(lpszPhonebook), debugstr_w(lpszOldEntry),
493           debugstr_w(lpszNewEntry));
494     return 0;
495 }
496
497 DWORD WINAPI RasSetEntryDialParamsA(LPCSTR lpszPhonebook, LPRASDIALPARAMSA lprasdialparams,
498                                     BOOL fRemovePassword)
499 {
500     FIXME("(%s,%p,0x%x), stub!\n", debugstr_a(lpszPhonebook), lprasdialparams, fRemovePassword);
501     return 0;
502 }
503
504 DWORD WINAPI RasSetEntryDialParamsW(LPCWSTR lpszPhonebook, LPRASDIALPARAMSW lprasdialparams,
505                                     BOOL fRemovePassword)
506 {
507     FIXME("(%s,%p,0x%x), stub!\n", debugstr_w(lpszPhonebook), lprasdialparams, fRemovePassword);
508     return 0;
509 }
510
511 DWORD WINAPI RasSetSubEntryPropertiesA(LPCSTR lpszPhonebook, LPCSTR lpszEntry, DWORD dwSubEntry,
512                                        LPRASSUBENTRYA lpRasSubEntry, DWORD dwcbRasSubEntry,
513                                        LPBYTE lpbDeviceConfig, DWORD dwcbDeviceConfig)
514 {
515     FIXME("(%s,%s,0x%08x,%p,0x%08x,%p,0x%08x), stub!\n", debugstr_a(lpszPhonebook),
516           debugstr_a(lpszEntry), dwSubEntry, lpRasSubEntry, dwcbRasSubEntry, lpbDeviceConfig,
517           dwcbDeviceConfig);
518     return 0;
519 }
520
521 DWORD WINAPI RasSetSubEntryPropertiesW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry, DWORD dwSubEntry,
522                                        LPRASSUBENTRYW lpRasSubEntry, DWORD dwcbRasSubEntry,
523                                        LPBYTE lpbDeviceConfig, DWORD dwcbDeviceConfig)
524 {
525     FIXME("(%s,%s,0x%08x,%p,0x%08x,%p,0x%08x), stub!\n", debugstr_w(lpszPhonebook),
526           debugstr_w(lpszEntry), dwSubEntry, lpRasSubEntry, dwcbRasSubEntry, lpbDeviceConfig,
527           dwcbDeviceConfig);
528     return 0;
529 }