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