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