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