1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef __ROUTING_MPRADMIN_H__
7 #define __ROUTING_MPRADMIN_H__
8 
9 #include <winapifamily.h>
10 
11 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
12 
13 #include <lmcons.h>
14 #include <ras.h>
15 #include <in6addr.h>
16 #include <wincrypt.h>
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #ifndef CALLBACK
23 #define CALLBACK WINAPI
24 #endif
25 
26 #define RRAS_SERVICE_NAME TEXT("RemoteAccess")
27 
28 #define PID_IPX 0x0000002B
29 #define PID_IP 0x00000021
30 #define PID_NBF 0x0000003F
31 #define PID_ATALK 0x00000029
32 
33 #define MAX_INTERFACE_NAME_LEN 256
34 #define MAX_TRANSPORT_NAME_LEN 40
35 #define MAX_MEDIA_NAME 16
36 #define MAX_PORT_NAME 16
37 #define MAX_DEVICE_NAME 128
38 #define MAX_PHONE_NUMBER_LEN 128
39 #define MAX_DEVICETYPE_NAME 16
40 
41   typedef enum _ROUTER_INTERFACE_TYPE {
42     ROUTER_IF_TYPE_CLIENT,ROUTER_IF_TYPE_HOME_ROUTER,ROUTER_IF_TYPE_FULL_ROUTER,ROUTER_IF_TYPE_DEDICATED,ROUTER_IF_TYPE_INTERNAL,
43     ROUTER_IF_TYPE_LOOPBACK,ROUTER_IF_TYPE_TUNNEL1,ROUTER_IF_TYPE_DIALOUT
44   } ROUTER_INTERFACE_TYPE;
45 
46   typedef enum _ROUTER_CONNECTION_STATE {
47     ROUTER_IF_STATE_UNREACHABLE,ROUTER_IF_STATE_DISCONNECTED,ROUTER_IF_STATE_CONNECTING,ROUTER_IF_STATE_CONNECTED
48   } ROUTER_CONNECTION_STATE;
49 
50 #define MPR_INTERFACE_OUT_OF_RESOURCES 0x00000001
51 #define MPR_INTERFACE_ADMIN_DISABLED 0x00000002
52 #define MPR_INTERFACE_CONNECTION_FAILURE 0x00000004
53 #define MPR_INTERFACE_SERVICE_PAUSED 0x00000008
54 #define MPR_INTERFACE_DIALOUT_HOURS_RESTRICTION 0x00000010
55 #define MPR_INTERFACE_NO_MEDIA_SENSE 0x00000020
56 #define MPR_INTERFACE_NO_DEVICE 0x00000040
57 
58   typedef struct _MPR_INTERFACE_0 {
59     WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
60     HANDLE hInterface;
61     WINBOOL fEnabled;
62     ROUTER_INTERFACE_TYPE dwIfType;
63     ROUTER_CONNECTION_STATE dwConnectionState;
64     DWORD fUnReachabilityReasons;
65     DWORD dwLastError;
66   } MPR_INTERFACE_0,*PMPR_INTERFACE_0;
67 
68   typedef struct _MPR_IPINIP_INTERFACE_0 {
69     WCHAR wszFriendlyName[MAX_INTERFACE_NAME_LEN+1];
70     GUID Guid;
71   } MPR_IPINIP_INTERFACE_0,*PMPR_IPINIP_INTERFACE_0;
72 
73   typedef struct _MPR_INTERFACE_1 {
74     WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
75     HANDLE hInterface;
76     WINBOOL fEnabled;
77     ROUTER_INTERFACE_TYPE dwIfType;
78     ROUTER_CONNECTION_STATE dwConnectionState;
79     DWORD fUnReachabilityReasons;
80     DWORD dwLastError;
81     LPWSTR lpwsDialoutHoursRestriction;
82 
83   } MPR_INTERFACE_1,*PMPR_INTERFACE_1;
84 
85 #define MPR_MaxDeviceType RAS_MaxDeviceType
86 #define MPR_MaxPhoneNumber RAS_MaxPhoneNumber
87 #define MPR_MaxIpAddress RAS_MaxIpAddress
88 #define MPR_MaxIpxAddress RAS_MaxIpxAddress
89 
90 #define MPR_MaxEntryName RAS_MaxEntryName
91 #define MPR_MaxDeviceName RAS_MaxDeviceName
92 #define MPR_MaxCallbackNumber RAS_MaxCallbackNumber
93 
94 #define MPR_MaxAreaCode RAS_MaxAreaCode
95 #define MPR_MaxPadType RAS_MaxPadType
96 #define MPR_MaxX25Address RAS_MaxX25Address
97 #define MPR_MaxFacilities RAS_MaxFacilities
98 #define MPR_MaxUserData RAS_MaxUserData
99 
100 #define MPRIO_SpecificIpAddr RASEO_SpecificIpAddr
101 #define MPRIO_SpecificNameServers RASEO_SpecificNameServers
102 #define MPRIO_IpHeaderCompression RASEO_IpHeaderCompression
103 #define MPRIO_RemoteDefaultGateway RASEO_RemoteDefaultGateway
104 #define MPRIO_DisableLcpExtensions RASEO_DisableLcpExtensions
105 #define MPRIO_SwCompression RASEO_SwCompression
106 #define MPRIO_RequireEncryptedPw RASEO_RequireEncryptedPw
107 #define MPRIO_RequireMsEncryptedPw RASEO_RequireMsEncryptedPw
108 #define MPRIO_RequireDataEncryption RASEO_RequireDataEncryption
109 #define MPRIO_NetworkLogon RASEO_NetworkLogon
110 #define MPRIO_PromoteAlternates RASEO_PromoteAlternates
111 #define MPRIO_SecureLocalFiles RASEO_SecureLocalFiles
112 #define MPRIO_RequireEAP RASEO_RequireEAP
113 #define MPRIO_RequirePAP RASEO_RequirePAP
114 #define MPRIO_RequireSPAP RASEO_RequireSPAP
115 #define MPRIO_SharedPhoneNumbers RASEO_SharedPhoneNumbers
116 #define MPRIO_RequireCHAP RASEO_RequireCHAP
117 #define MPRIO_RequireMsCHAP RASEO_RequireMsCHAP
118 #define MPRIO_RequireMsCHAP2 RASEO_RequireMsCHAP2
119 #define MPRIO_IpSecPreSharedKey 0x80000000
120 
121 #define MPRNP_Ipx RASNP_Ipx
122 #define MPRNP_Ip RASNP_Ip
123 
124 #define MPRDT_Modem RASDT_Modem
125 #define MPRDT_Isdn RASDT_Isdn
126 #define MPRDT_X25 RASDT_X25
127 #define MPRDT_Vpn RASDT_Vpn
128 #define MPRDT_Pad RASDT_Pad
129 #define MPRDT_Generic RASDT_Generic
130 #define MPRDT_Serial RASDT_Serial
131 #define MPRDT_FrameRelay RASDT_FrameRelay
132 #define MPRDT_Atm RASDT_Atm
133 #define MPRDT_Sonet RASDT_Sonet
134 #define MPRDT_SW56 RASDT_SW56
135 #define MPRDT_Irda RASDT_Irda
136 #define MPRDT_Parallel RASDT_Parallel
137 
138 #define MPRET_Phone RASET_Phone
139 #define MPRET_Vpn RASET_Vpn
140 #define MPRET_Direct RASET_Direct
141 
142 #define MPRDM_DialFirst 0
143 #define MPRDM_DialAll RASEDM_DialAll
144 #define MPRDM_DialAsNeeded RASEDM_DialAsNeeded
145 
146 #define MPRIDS_Disabled RASIDS_Disabled
147 #define MPRIDS_UseGlobalValue RASIDS_UseGlobalValue
148 
149 #define MPR_ET_None ET_None
150 #define MPR_ET_Require ET_Require
151 #define MPR_ET_RequireMax ET_RequireMax
152 #define MPR_ET_Optional ET_Optional
153 
154 #define MPR_VS_Default VS_Default
155 #define MPR_VS_PptpOnly VS_PptpOnly
156 #define MPR_VS_PptpFirst VS_PptpFirst
157 #define MPR_VS_L2tpOnly VS_L2tpOnly
158 #define MPR_VS_L2tpFirst VS_L2tpFirst
159 
160   typedef struct _MPR_INTERFACE_2 {
161     WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
162     HANDLE hInterface;
163     WINBOOL fEnabled;
164     ROUTER_INTERFACE_TYPE dwIfType;
165     ROUTER_CONNECTION_STATE dwConnectionState;
166     DWORD fUnReachabilityReasons;
167     DWORD dwLastError;
168     DWORD dwfOptions;
169     WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1 ];
170     PWCHAR szAlternates;
171     DWORD ipaddr;
172     DWORD ipaddrDns;
173     DWORD ipaddrDnsAlt;
174     DWORD ipaddrWins;
175     DWORD ipaddrWinsAlt;
176     DWORD dwfNetProtocols;
177     WCHAR szDeviceType[MPR_MaxDeviceType + 1 ];
178     WCHAR szDeviceName[MPR_MaxDeviceName + 1 ];
179     WCHAR szX25PadType[MPR_MaxPadType + 1 ];
180     WCHAR szX25Address[MPR_MaxX25Address + 1 ];
181     WCHAR szX25Facilities[MPR_MaxFacilities + 1 ];
182     WCHAR szX25UserData[MPR_MaxUserData + 1 ];
183     DWORD dwChannels;
184     DWORD dwSubEntries;
185     DWORD dwDialMode;
186     DWORD dwDialExtraPercent;
187     DWORD dwDialExtraSampleSeconds;
188     DWORD dwHangUpExtraPercent;
189     DWORD dwHangUpExtraSampleSeconds;
190     DWORD dwIdleDisconnectSeconds;
191     DWORD dwType;
192     DWORD dwEncryptionType;
193     DWORD dwCustomAuthKey;
194     DWORD dwCustomAuthDataSize;
195     LPBYTE lpbCustomAuthData;
196     GUID guidId;
197     DWORD dwVpnStrategy;
198   } MPR_INTERFACE_2,*PMPR_INTERFACE_2;
199 
200 #if (_WIN32_WINNT >= 0x0600)
201   typedef struct _MPR_INTERFACE_3 {
202     WCHAR                   wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
203     HANDLE                  hInterface;
204     WINBOOL                 fEnabled;
205     ROUTER_INTERFACE_TYPE   dwIfType;
206     ROUTER_CONNECTION_STATE dwConnectionState;
207     DWORD                   fUnReachabilityReasons;
208     DWORD                   dwLastError;
209     DWORD                   dwfOptions;
210     WCHAR                   szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
211     PWCHAR                  szAlternates;
212     DWORD                   ipaddr;
213     DWORD                   ipaddrDns;
214     DWORD                   ipaddrDnsAlt;
215     DWORD                   ipaddrWins;
216     DWORD                   ipaddrWinsAlt;
217     DWORD                   dwfNetProtocols;
218     WCHAR                   szDeviceType[MPR_MaxDeviceType + 1];
219     WCHAR                   szDeviceName[MPR_MaxDeviceName + 1];
220     WCHAR                   szX25PadType[MPR_MaxPadType + 1];
221     WCHAR                   szX25Address[MPR_MaxX25Address + 1];
222     WCHAR                   szX25Facilities[MPR_MaxFacilities + 1];
223     WCHAR                   szX25UserData[MPR_MaxUserData + 1];
224     DWORD                   dwChannels;
225     DWORD                   dwSubEntries;
226     DWORD                   dwDialMode;
227     DWORD                   dwDialExtraPercent;
228     DWORD                   dwDialExtraSampleSeconds;
229     DWORD                   dwHangUpExtraPercent;
230     DWORD                   dwHangUpExtraSampleSeconds;
231     DWORD                   dwIdleDisconnectSeconds;
232     DWORD                   dwType;
233     DWORD                   dwEncryptionType;
234     DWORD                   dwCustomAuthKey;
235     DWORD                   dwCustomAuthDataSize;
236     LPBYTE                  lpbCustomAuthData;
237     GUID                    guidId;
238     DWORD                   dwVpnStrategy;
239     ULONG                   AddressCount;
240     IN6_ADDR                ipv6addrDns;
241     IN6_ADDR                ipv6addrDnsAlt;
242     IN6_ADDR *              ipv6addr;
243   } MPR_INTERFACE_3, *PMPR_INTERFACE_3;
244 #endif
245 
246   typedef struct _MPR_DEVICE_0 {
247     WCHAR szDeviceType[MPR_MaxDeviceType + 1 ];
248     WCHAR szDeviceName[MPR_MaxDeviceName + 1 ];
249   } MPR_DEVICE_0,*PMPR_DEVICE_0;
250 
251   typedef struct _MPR_DEVICE_1 {
252     WCHAR szDeviceType[MPR_MaxDeviceType + 1 ];
253     WCHAR szDeviceName[MPR_MaxDeviceName + 1 ];
254     WCHAR szLocalPhoneNumber[MPR_MaxPhoneNumber + 1 ];
255     PWCHAR szAlternates;
256   } MPR_DEVICE_1,*PMPR_DEVICE_1;
257 
258   typedef struct _MPR_CREDENTIALSEX_0 {
259     DWORD dwSize;
260     LPBYTE lpbCredentialsInfo;
261   } MPR_CREDENTIALSEX_0,*PMPR_CREDENTIALSEX_0;
262 
263   typedef struct _MPR_CREDENTIALSEX_1 {
264     DWORD dwSize;
265     LPBYTE lpbCredentialsInfo;
266   } MPR_CREDENTIALSEX_1,*PMPR_CREDENTIALSEX_1;
267 
268   typedef struct _MPR_TRANSPORT_0 {
269     DWORD dwTransportId;
270     HANDLE hTransport;
271     WCHAR wszTransportName[MAX_TRANSPORT_NAME_LEN+1];
272   } MPR_TRANSPORT_0,*PMPR_TRANSPORT_0;
273 
274   typedef struct _MPR_IFTRANSPORT_0
275   {
276     DWORD dwTransportId;
277     HANDLE hIfTransport;
278     WCHAR wszIfTransportName[MAX_TRANSPORT_NAME_LEN+1];
279 
280   }
281   MPR_IFTRANSPORT_0,*PMPR_IFTRANSPORT_0;
282 
283   typedef struct _MPR_SERVER_0
284   {
285     WINBOOL fLanOnlyMode;
286     DWORD dwUpTime;
287     DWORD dwTotalPorts;
288     DWORD dwPortsInUse;
289 
290   }
291   MPR_SERVER_0,*PMPR_SERVER_0;
292 
293 #define MPR_ENABLE_RAS_ON_DEVICE 0x00000001
294 #define MPR_ENABLE_ROUTING_ON_DEVICE 0x00000002
295 
296   typedef struct _MPR_SERVER_1 {
297     DWORD dwNumPptpPorts;
298     DWORD dwPptpPortFlags;
299     DWORD dwNumL2tpPorts;
300     DWORD dwL2tpPortFlags;
301   } MPR_SERVER_1,*PMPR_SERVER_1;
302 
303   typedef enum _RAS_PORT_CONDITION {
304     RAS_PORT_NON_OPERATIONAL,RAS_PORT_DISCONNECTED,RAS_PORT_CALLING_BACK,RAS_PORT_LISTENING,RAS_PORT_AUTHENTICATING,RAS_PORT_AUTHENTICATED,
305     RAS_PORT_INITIALIZING
306   } RAS_PORT_CONDITION;
307 
308   typedef enum _RAS_HARDWARE_CONDITION {
309     RAS_HARDWARE_OPERATIONAL,RAS_HARDWARE_FAILURE
310   } RAS_HARDWARE_CONDITION;
311 
312   typedef struct _RAS_PORT_0 {
313     HANDLE hPort;
314     HANDLE hConnection;
315     RAS_PORT_CONDITION dwPortCondition;
316     DWORD dwTotalNumberOfCalls;
317     DWORD dwConnectDuration;
318     WCHAR wszPortName[MAX_PORT_NAME + 1 ];
319     WCHAR wszMediaName[MAX_MEDIA_NAME + 1 ];
320     WCHAR wszDeviceName[MAX_DEVICE_NAME + 1 ];
321     WCHAR wszDeviceType[MAX_DEVICETYPE_NAME + 1 ];
322   } RAS_PORT_0,*PRAS_PORT_0;
323 
324   typedef struct _RAS_PORT_1 {
325     HANDLE hPort;
326     HANDLE hConnection;
327     RAS_HARDWARE_CONDITION dwHardwareCondition;
328     DWORD dwLineSpeed;
329     DWORD dwBytesXmited;
330     DWORD dwBytesRcved;
331     DWORD dwFramesXmited;
332     DWORD dwFramesRcved;
333     DWORD dwCrcErr;
334     DWORD dwTimeoutErr;
335     DWORD dwAlignmentErr;
336     DWORD dwHardwareOverrunErr;
337     DWORD dwFramingErr;
338     DWORD dwBufferOverrunErr;
339     DWORD dwCompressionRatioIn;
340     DWORD dwCompressionRatioOut;
341   } RAS_PORT_1,*PRAS_PORT_1;
342 
343 #define IPADDRESSLEN 15
344 #define IPXADDRESSLEN 22
345 #define ATADDRESSLEN 32
346 #define MAXIPADRESSLEN 64
347 
348   typedef struct _PPP_NBFCP_INFO {
349     DWORD dwError;
350     WCHAR wszWksta[NETBIOS_NAME_LEN + 1 ];
351   } PPP_NBFCP_INFO;
352 
353   typedef struct _PPP_IPCP_INFO {
354     DWORD dwError;
355     WCHAR wszAddress[IPADDRESSLEN + 1 ];
356     WCHAR wszRemoteAddress[IPADDRESSLEN + 1 ];
357   } PPP_IPCP_INFO;
358 
359 #define PPP_IPCP_VJ 0x00000001
360 
361   typedef struct _PPP_IPCP_INFO2 {
362     DWORD dwError;
363     WCHAR wszAddress[IPADDRESSLEN + 1 ];
364     WCHAR wszRemoteAddress[IPADDRESSLEN + 1 ];
365     DWORD dwOptions;
366     DWORD dwRemoteOptions;
367   } PPP_IPCP_INFO2;
368 
369   typedef struct _PPP_IPXCP_INFO {
370     DWORD dwError;
371     WCHAR wszAddress[IPXADDRESSLEN + 1 ];
372   } PPP_IPXCP_INFO;
373 
374   typedef struct _PPP_ATCP_INFO {
375     DWORD dwError;
376     WCHAR wszAddress[ATADDRESSLEN + 1 ];
377   } PPP_ATCP_INFO;
378 
379   typedef struct _PPP_INFO {
380     PPP_NBFCP_INFO nbf;
381     PPP_IPCP_INFO ip;
382     PPP_IPXCP_INFO ipx;
383     PPP_ATCP_INFO at;
384   } PPP_INFO;
385 
386 #define RASCCPCA_MPPC 0x00000006
387 #define RASCCPCA_STAC 0x00000005
388 
389 #define PPP_CCP_COMPRESSION 0x00000001
390 #define PPP_CCP_ENCRYPTION40BITOLD 0x00000010
391 #define PPP_CCP_ENCRYPTION40BIT 0x00000020
392 #define PPP_CCP_ENCRYPTION128BIT 0x00000040
393 #define PPP_CCP_ENCRYPTION56BIT 0x00000080
394 #define PPP_CCP_HISTORYLESS 0x01000000
395 
396   typedef struct _PPP_CCP_INFO {
397     DWORD dwError;
398     DWORD dwCompressionAlgorithm;
399     DWORD dwOptions;
400     DWORD dwRemoteCompressionAlgorithm;
401     DWORD dwRemoteOptions;
402   } PPP_CCP_INFO;
403 
404 #define PPP_LCP_PAP 0xC023
405 #define PPP_LCP_SPAP 0xC027
406 #define PPP_LCP_CHAP 0xC223
407 #define PPP_LCP_EAP 0xC227
408 
409 #define PPP_LCP_CHAP_MD5 0x05
410 #define PPP_LCP_CHAP_MS 0x80
411 #define PPP_LCP_CHAP_MSV2 0x81
412 
413 #define PPP_LCP_MULTILINK_FRAMING 0x00000001
414 #define PPP_LCP_PFC 0x00000002
415 #define PPP_LCP_ACFC 0x00000004
416 #define PPP_LCP_SSHF 0x00000008
417 #define PPP_LCP_DES_56 0x00000010
418 #define PPP_LCP_3_DES 0x00000020
419 
420   typedef struct _PPP_LCP_INFO {
421     DWORD dwError;
422     DWORD dwAuthenticationProtocol;
423     DWORD dwAuthenticationData;
424     DWORD dwRemoteAuthenticationProtocol;
425     DWORD dwRemoteAuthenticationData;
426     DWORD dwTerminateReason;
427     DWORD dwRemoteTerminateReason;
428     DWORD dwOptions;
429     DWORD dwRemoteOptions;
430     DWORD dwEapTypeId;
431     DWORD dwRemoteEapTypeId;
432   } PPP_LCP_INFO;
433 
434   typedef struct _PPP_INFO_2 {
435     PPP_NBFCP_INFO nbf;
436     PPP_IPCP_INFO2 ip;
437     PPP_IPXCP_INFO ipx;
438     PPP_ATCP_INFO at;
439     PPP_CCP_INFO ccp;
440     PPP_LCP_INFO lcp;
441   } PPP_INFO_2;
442 
443 #define RAS_FLAGS_PPP_CONNECTION 0x00000001
444 #define RAS_FLAGS_MESSENGER_PRESENT 0x00000002
445 #define RAS_FLAGS_QUARANTINE_PRESENT 0x00000008
446 
447   typedef struct _RAS_CONNECTION_0 {
448     HANDLE hConnection;
449     HANDLE hInterface;
450     DWORD dwConnectDuration;
451     ROUTER_INTERFACE_TYPE dwInterfaceType;
452     DWORD dwConnectionFlags;
453     WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN + 1 ];
454     WCHAR wszUserName[UNLEN + 1 ];
455     WCHAR wszLogonDomain[DNLEN + 1 ];
456     WCHAR wszRemoteComputer[NETBIOS_NAME_LEN + 1 ];
457   } RAS_CONNECTION_0,*PRAS_CONNECTION_0;
458 
459   typedef struct _RAS_CONNECTION_1 {
460     HANDLE hConnection;
461     HANDLE hInterface;
462     PPP_INFO PppInfo;
463     DWORD dwBytesXmited;
464     DWORD dwBytesRcved;
465     DWORD dwFramesXmited;
466     DWORD dwFramesRcved;
467     DWORD dwCrcErr;
468     DWORD dwTimeoutErr;
469     DWORD dwAlignmentErr;
470     DWORD dwHardwareOverrunErr;
471     DWORD dwFramingErr;
472     DWORD dwBufferOverrunErr;
473     DWORD dwCompressionRatioIn;
474     DWORD dwCompressionRatioOut;
475   } RAS_CONNECTION_1,*PRAS_CONNECTION_1;
476 
477   typedef struct _RAS_CONNECTION_2 {
478     HANDLE hConnection;
479     WCHAR wszUserName[UNLEN + 1 ];
480     ROUTER_INTERFACE_TYPE dwInterfaceType;
481     GUID guid;
482     PPP_INFO_2 PppInfo2;
483   } RAS_CONNECTION_2,*PRAS_CONNECTION_2;
484 
485 #define RASPRIV_NoCallback 0x01
486 #define RASPRIV_AdminSetCallback 0x02
487 #define RASPRIV_CallerSetCallback 0x04
488 #define RASPRIV_DialinPrivilege 0x08
489 
490 #define RASPRIV2_DialinPolicy 0x1
491 
492 #define RASPRIV_CallbackType (RASPRIV_AdminSetCallback | RASPRIV_CallerSetCallback | RASPRIV_NoCallback)
493 
494   typedef struct _RAS_USER_0 {
495     BYTE bfPrivilege;
496     WCHAR wszPhoneNumber[MAX_PHONE_NUMBER_LEN + 1];
497   } RAS_USER_0,*PRAS_USER_0;
498 
499   typedef struct _RAS_USER_1 {
500     BYTE bfPrivilege;
501     WCHAR wszPhoneNumber[MAX_PHONE_NUMBER_LEN + 1];
502     BYTE bfPrivilege2;
503   } RAS_USER_1,*PRAS_USER_1;
504 
505   typedef HANDLE RAS_SERVER_HANDLE;
506   typedef HANDLE MPR_SERVER_HANDLE;
507   typedef HANDLE MIB_SERVER_HANDLE;
508 
509   DWORD WINAPI MprAdminConnectionEnum(RAS_SERVER_HANDLE hRasServer,DWORD dwLevel,LPBYTE *lplpbBuffer,DWORD dwPrefMaxLen,LPDWORD lpdwEntriesRead,LPDWORD lpdwTotalEntries,LPDWORD lpdwResumeHandle);
510   DWORD WINAPI MprAdminPortEnum(RAS_SERVER_HANDLE hRasServer,DWORD dwLevel,HANDLE hConnection,LPBYTE *lplpbBuffer,DWORD dwPrefMaxLen,LPDWORD lpdwEntriesRead,LPDWORD lpdwTotalEntries,LPDWORD lpdwResumeHandle);
511   DWORD WINAPI MprAdminConnectionGetInfo(RAS_SERVER_HANDLE hRasServer,DWORD dwLevel,HANDLE hConnection,LPBYTE *lplpbBuffer);
512   DWORD WINAPI MprAdminPortGetInfo(RAS_SERVER_HANDLE hRasServer,DWORD dwLevel,HANDLE hPort,LPBYTE *lplpbBuffer);
513   DWORD WINAPI MprAdminConnectionClearStats(RAS_SERVER_HANDLE hRasServer,HANDLE hConnection);
514   DWORD WINAPI MprAdminPortClearStats(RAS_SERVER_HANDLE hRasServer,HANDLE hPort);
515   DWORD WINAPI MprAdminPortReset(RAS_SERVER_HANDLE hRasServer,HANDLE hPort);
516   DWORD WINAPI MprAdminPortDisconnect(RAS_SERVER_HANDLE hRasServer,HANDLE hPort);
517   WINBOOL WINAPI MprAdminAcceptNewConnection(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1);
518   WINBOOL WINAPI MprAdminAcceptNewConnection2(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1,RAS_CONNECTION_2 *pRasConnection2);
519   WINBOOL WINAPI MprAdminAcceptNewLink (RAS_PORT_0 *pRasPort0,RAS_PORT_1 *pRasPort1);
520   VOID WINAPI MprAdminConnectionHangupNotification(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1);
521   VOID WINAPI MprAdminConnectionHangupNotification2(RAS_CONNECTION_0 *pRasConnection0,RAS_CONNECTION_1 *pRasConnection1,RAS_CONNECTION_2 *pRasConnection2);
522   DWORD WINAPI MprAdminConnectionRemoveQuarantine(HANDLE hRasServer,HANDLE hRasConnection,WINBOOL fIsIpAddress);
523   VOID WINAPI MprAdminLinkHangupNotification (RAS_PORT_0 *pRasPort0,RAS_PORT_1 *pRasPort1);
524   DWORD WINAPI MprAdminGetIpAddressForUser (WCHAR *lpwszUserName,WCHAR *lpwszPortName,DWORD *lpdwIpAddress,WINBOOL *bNotifyRelease);
525   VOID WINAPI MprAdminReleaseIpAddress (WCHAR *lpszUserName,WCHAR *lpszPortName,DWORD *lpdwIpAddress);
526   DWORD WINAPI MprAdminInitializeDll(VOID);
527   DWORD WINAPI MprAdminTerminateDll(VOID);
528   DWORD WINAPI MprAdminUserGetInfo(const WCHAR *lpszServer,const WCHAR *lpszUser,DWORD dwLevel,LPBYTE lpbBuffer);
529   DWORD WINAPI MprAdminUserSetInfo(const WCHAR *lpszServer,const WCHAR *lpszUser,DWORD dwLevel,const LPBYTE lpbBuffer);
530   DWORD WINAPI MprAdminSendUserMessage(MPR_SERVER_HANDLE hMprServer,HANDLE hConnection,LPWSTR lpwszMessage);
531   DWORD WINAPI MprAdminGetPDCServer(const WCHAR *lpszDomain,const WCHAR *lpszServer,LPWSTR lpszPDCServer);
532   WINBOOL WINAPI MprAdminIsServiceRunning(LPWSTR lpwsServerName);
533   DWORD WINAPI MprAdminServerConnect(LPWSTR lpwsServerName,MPR_SERVER_HANDLE *phMprServer);
534   VOID WINAPI MprAdminServerDisconnect(MPR_SERVER_HANDLE hMprServer);
535   DWORD WINAPI MprAdminServerGetCredentials(MPR_SERVER_HANDLE hMprServer,DWORD dwLevel,LPBYTE *lplpbBuffer);
536   DWORD WINAPI MprAdminServerSetCredentials(MPR_SERVER_HANDLE hMprServer,DWORD dwLevel,LPBYTE lpbBuffer);
537   DWORD WINAPI MprAdminBufferFree(LPVOID pBuffer);
538   DWORD WINAPI MprAdminGetErrorString(DWORD dwError,LPWSTR *lpwsErrorString);
539   DWORD WINAPI MprAdminServerGetInfo(MPR_SERVER_HANDLE hMprServer,DWORD dwLevel,LPBYTE *lplpbBuffer);
540   DWORD WINAPI MprAdminServerSetInfo(MPR_SERVER_HANDLE hMprServer,DWORD dwLevel,LPBYTE lpbBuffer);
541   DWORD WINAPI MprAdminEstablishDomainRasServer (PWCHAR pszDomain,PWCHAR pszMachine,WINBOOL bEnable);
542   DWORD WINAPI MprAdminIsDomainRasServer (PWCHAR pszDomain,PWCHAR pszMachine,PBOOL pbIsRasServer);
543   DWORD WINAPI MprAdminTransportCreate(MPR_SERVER_HANDLE hMprServer,DWORD dwTransportId,LPWSTR lpwsTransportName,LPBYTE pGlobalInfo,DWORD dwGlobalInfoSize,LPBYTE pClientInterfaceInfo,DWORD dwClientInterfaceInfoSize,LPWSTR lpwsDLLPath);
544   DWORD WINAPI MprAdminTransportSetInfo(MPR_SERVER_HANDLE hMprServer,DWORD dwTransportId,LPBYTE pGlobalInfo,DWORD dwGlobalInfoSize,LPBYTE pClientInterfaceInfo,DWORD dwClientInterfaceInfoSize);
545   DWORD WINAPI MprAdminTransportGetInfo(MPR_SERVER_HANDLE hMprServer,DWORD dwTransportId,LPBYTE *ppGlobalInfo,LPDWORD lpdwGlobalInfoSize,LPBYTE *ppClientInterfaceInfo,LPDWORD lpdwClientInterfaceInfoSize);
546   DWORD WINAPI MprAdminDeviceEnum(MPR_SERVER_HANDLE hMprServer,DWORD dwLevel,LPBYTE *lplpbBuffer,LPDWORD lpdwTotalEntries);
547   DWORD WINAPI MprAdminInterfaceGetHandle(MPR_SERVER_HANDLE hMprServer,LPWSTR lpwsInterfaceName,HANDLE *phInterface,WINBOOL fIncludeClientInterfaces);
548   DWORD WINAPI MprAdminInterfaceCreate(MPR_SERVER_HANDLE hMprServer,DWORD dwLevel,LPBYTE lpbBuffer,HANDLE *phInterface);
549   DWORD WINAPI MprAdminInterfaceGetInfo(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwLevel,LPBYTE *lplpbBuffer);
550   DWORD WINAPI MprAdminInterfaceSetInfo(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwLevel,LPBYTE lpbBuffer);
551   DWORD WINAPI MprAdminInterfaceDelete(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface);
552   DWORD WINAPI MprAdminInterfaceDeviceGetInfo(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwIndex,DWORD dwLevel,LPBYTE *lplpBuffer);
553   DWORD WINAPI MprAdminInterfaceDeviceSetInfo(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwIndex,DWORD dwLevel,LPBYTE lplpBuffer);
554   DWORD WINAPI MprAdminInterfaceTransportRemove(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwTransportId);
555   DWORD WINAPI MprAdminInterfaceTransportAdd(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwTransportId,LPBYTE pInterfaceInfo,DWORD dwInterfaceInfoSize);
556   DWORD WINAPI MprAdminInterfaceTransportGetInfo(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwTransportId,LPBYTE *ppInterfaceInfo,LPDWORD lpdwpInterfaceInfoSize);
557   DWORD WINAPI MprAdminInterfaceTransportSetInfo(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwTransportId,LPBYTE pInterfaceInfo,DWORD dwInterfaceInfoSize);
558   DWORD WINAPI MprAdminInterfaceEnum(MPR_SERVER_HANDLE hMprServer,DWORD dwLevel,LPBYTE *lplpbBuffer,DWORD dwPrefMaxLen,LPDWORD lpdwEntriesRead,LPDWORD lpdwTotalEntries,LPDWORD lpdwResumeHandle);
559   DWORD WINAPI MprSetupIpInIpInterfaceFriendlyNameEnum(PWCHAR pwszMachineName,LPBYTE *lplpBuffer,LPDWORD lpdwEntriesRead);
560   DWORD WINAPI MprSetupIpInIpInterfaceFriendlyNameFree(LPVOID lpBuffer);
561   DWORD WINAPI MprSetupIpInIpInterfaceFriendlyNameCreate(PWCHAR pwszMachineName,PMPR_IPINIP_INTERFACE_0 pNameInformation);
562   DWORD WINAPI MprSetupIpInIpInterfaceFriendlyNameDelete(PWCHAR pwszMachineName,GUID *pGuid);
563   DWORD WINAPI MprAdminInterfaceSetCredentials(LPWSTR lpwsServer,LPWSTR lpwsInterfaceName,LPWSTR lpwsUserName,LPWSTR lpwsDomainName,LPWSTR lpwsPassword);
564   DWORD WINAPI MprAdminInterfaceGetCredentials(LPWSTR lpwsServer,LPWSTR lpwsInterfaceName,LPWSTR lpwsUserName,LPWSTR lpwsPassword,LPWSTR lpwsDomainName);
565   DWORD WINAPI MprAdminInterfaceSetCredentialsEx(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwLevel,LPBYTE lpbBuffer);
566   DWORD WINAPI MprAdminInterfaceGetCredentialsEx(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwLevel,LPBYTE *lplpbBuffer);
567   DWORD WINAPI MprAdminInterfaceConnect(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,HANDLE hEvent,WINBOOL fSynchronous);
568   DWORD WINAPI MprAdminInterfaceDisconnect(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface);
569   DWORD WINAPI MprAdminInterfaceUpdateRoutes(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwProtocolId,HANDLE hEvent);
570   DWORD WINAPI MprAdminInterfaceQueryUpdateResult(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface,DWORD dwProtocolId,LPDWORD lpdwUpdateResult);
571   DWORD WINAPI MprAdminInterfaceUpdatePhonebookInfo(MPR_SERVER_HANDLE hMprServer,HANDLE hInterface);
572   DWORD WINAPI MprAdminRegisterConnectionNotification(MPR_SERVER_HANDLE hMprServer,HANDLE hEventNotification);
573   DWORD WINAPI MprAdminDeregisterConnectionNotification(MPR_SERVER_HANDLE hMprServer,HANDLE hEventNotification);
574   DWORD WINAPI MprAdminMIBServerConnect(LPWSTR lpwsServerName,MIB_SERVER_HANDLE *phMibServer);
575   VOID WINAPI MprAdminMIBServerDisconnect(MIB_SERVER_HANDLE hMibServer);
576   DWORD WINAPI MprAdminMIBEntryCreate(MIB_SERVER_HANDLE hMibServer,DWORD dwPid,DWORD dwRoutingPid,LPVOID lpEntry,DWORD dwEntrySize);
577   DWORD WINAPI MprAdminMIBEntryDelete(MIB_SERVER_HANDLE hMibServer,DWORD dwProtocolId,DWORD dwRoutingPid,LPVOID lpEntry,DWORD dwEntrySize);
578   DWORD WINAPI MprAdminMIBEntrySet(MIB_SERVER_HANDLE hMibServer,DWORD dwProtocolId,DWORD dwRoutingPid,LPVOID lpEntry,DWORD dwEntrySize);
579   DWORD WINAPI MprAdminMIBEntryGet(MIB_SERVER_HANDLE hMibServer,DWORD dwProtocolId,DWORD dwRoutingPid,LPVOID lpInEntry,DWORD dwInEntrySize,LPVOID *lplpOutEntry,LPDWORD lpOutEntrySize);
580   DWORD WINAPI MprAdminMIBEntryGetFirst(MIB_SERVER_HANDLE hMibServer,DWORD dwProtocolId,DWORD dwRoutingPid,LPVOID lpInEntry,DWORD dwInEntrySize,LPVOID *lplpOutEntry,LPDWORD lpOutEntrySize);
581   DWORD WINAPI MprAdminMIBEntryGetNext(MIB_SERVER_HANDLE hMibServer,DWORD dwProtocolId,DWORD dwRoutingPid,LPVOID lpInEntry,DWORD dwInEntrySize,LPVOID *lplpOutEntry,LPDWORD lpOutEntrySize);
582   DWORD WINAPI MprAdminMIBGetTrapInfo(MIB_SERVER_HANDLE hMibServer,DWORD dwProtocolId,DWORD dwRoutingPid,LPVOID lpInData,DWORD dwInDataSize,LPVOID *lplpOutData,LPDWORD lpOutDataSize);
583   DWORD WINAPI MprAdminMIBSetTrapInfo(DWORD dwProtocolId,DWORD dwRoutingPid,HANDLE hEvent,LPVOID lpInData,DWORD dwInDataSize,LPVOID *lplpOutData,LPDWORD lpOutDataSize);
584   DWORD WINAPI MprAdminMIBBufferFree(LPVOID pBuffer);
585   DWORD WINAPI MprConfigServerInstall(DWORD dwLevel,PVOID pBuffer);
586   DWORD WINAPI MprConfigServerConnect(LPWSTR lpwsServerName,HANDLE *phMprConfig);
587   VOID WINAPI MprConfigServerDisconnect(HANDLE hMprConfig);
588   DWORD WINAPI MprConfigServerRefresh(HANDLE hMprConfig);
589   DWORD WINAPI MprConfigBufferFree(LPVOID pBuffer);
590   DWORD WINAPI MprConfigServerGetInfo(HANDLE hMprConfig,DWORD dwLevel,LPBYTE *lplpbBuffer);
591   DWORD WINAPI MprConfigServerSetInfo(MPR_SERVER_HANDLE hMprServer,DWORD dwLevel,LPBYTE lpbBuffer);
592   DWORD WINAPI MprConfigServerBackup(HANDLE hMprConfig,LPWSTR lpwsPath);
593   DWORD WINAPI MprConfigServerRestore(HANDLE hMprConfig,LPWSTR lpwsPath);
594   DWORD WINAPI MprConfigTransportCreate(HANDLE hMprConfig,DWORD dwTransportId,LPWSTR lpwsTransportName,LPBYTE pGlobalInfo,DWORD dwGlobalInfoSize,LPBYTE pClientInterfaceInfo,DWORD dwClientInterfaceInfoSize,LPWSTR lpwsDLLPath,HANDLE *phRouterTransport);
595   DWORD WINAPI MprConfigTransportDelete(HANDLE hMprConfig,HANDLE hRouterTransport);
596   DWORD WINAPI MprConfigTransportGetHandle(HANDLE hMprConfig,DWORD dwTransportId,HANDLE *phRouterTransport);
597   DWORD WINAPI MprConfigTransportSetInfo(HANDLE hMprConfig,HANDLE hRouterTransport,LPBYTE pGlobalInfo,DWORD dwGlobalInfoSize,LPBYTE pClientInterfaceInfo,DWORD dwClientInterfaceInfoSize,LPWSTR lpwsDLLPath);
598   DWORD WINAPI MprConfigTransportGetInfo(HANDLE hMprConfig,HANDLE hRouterTransport,LPBYTE *ppGlobalInfo,LPDWORD lpdwGlobalInfoSize,LPBYTE *ppClientInterfaceInfo,LPDWORD lpdwClientInterfaceInfoSize,LPWSTR *lplpwsDLLPath);
599   DWORD WINAPI MprConfigTransportEnum(HANDLE hMprConfig,DWORD dwLevel,LPBYTE *lplpBuffer,DWORD dwPrefMaxLen,LPDWORD lpdwEntriesRead,LPDWORD lpdwTotalEntries,LPDWORD lpdwResumeHandle);
600   DWORD WINAPI MprConfigInterfaceCreate(HANDLE hMprConfig,DWORD dwLevel,LPBYTE lpbBuffer,HANDLE *phRouterInterface);
601   DWORD WINAPI MprConfigInterfaceDelete(HANDLE hMprConfig,HANDLE hRouterInterface);
602   DWORD WINAPI MprConfigInterfaceGetHandle(HANDLE hMprConfig,LPWSTR lpwsInterfaceName,HANDLE *phRouterInterface);
603   DWORD WINAPI MprConfigInterfaceGetInfo(HANDLE hMprConfig,HANDLE hRouterInterface,DWORD dwLevel,LPBYTE *lplpBuffer,LPDWORD lpdwBufferSize);
604   DWORD WINAPI MprConfigInterfaceSetInfo(HANDLE hMprConfig,HANDLE hRouterInterface,DWORD dwLevel,LPBYTE lpbBuffer);
605   DWORD WINAPI MprConfigInterfaceEnum(HANDLE hMprConfig,DWORD dwLevel,LPBYTE *lplpBuffer,DWORD dwPrefMaxLen,LPDWORD lpdwEntriesRead,LPDWORD lpdwTotalEntries,LPDWORD lpdwResumeHandle);
606   DWORD WINAPI MprConfigInterfaceTransportAdd(HANDLE hMprConfig,HANDLE hRouterInterface,DWORD dwTransportId,LPWSTR lpwsTransportName,LPBYTE pInterfaceInfo,DWORD dwInterfaceInfoSize,HANDLE *phRouterIfTransport);
607   DWORD WINAPI MprConfigInterfaceTransportRemove(HANDLE hMprConfig,HANDLE hRouterInterface,HANDLE hRouterIfTransport);
608   DWORD WINAPI MprConfigInterfaceTransportGetHandle(HANDLE hMprConfig,HANDLE hRouterInterface,DWORD dwTransportId,HANDLE *phRouterIfTransport);
609   DWORD WINAPI MprConfigInterfaceTransportGetInfo(HANDLE hMprConfig,HANDLE hRouterInterface,HANDLE hRouterIfTransport,LPBYTE *ppInterfaceInfo,LPDWORD lpdwInterfaceInfoSize);
610   DWORD WINAPI MprConfigInterfaceTransportSetInfo(HANDLE hMprConfig,HANDLE hRouterInterface,HANDLE hRouterIfTransport,LPBYTE pInterfaceInfo,DWORD dwInterfaceInfoSize);
611   DWORD WINAPI MprConfigInterfaceTransportEnum(HANDLE hMprConfig,HANDLE hRouterInterface,DWORD dwLevel,LPBYTE *lplpBuffer,DWORD dwPrefMaxLen,LPDWORD lpdwEntriesRead,LPDWORD lpdwTotalEntries,LPDWORD lpdwResumeHandle);
612   DWORD WINAPI MprConfigGetFriendlyName(HANDLE hMprConfig,PWCHAR pszGuidName,PWCHAR pszBuffer,DWORD dwBufferSize);
613   DWORD WINAPI MprConfigGetGuidName(HANDLE hMprConfig,PWCHAR pszFriendlyName,PWCHAR pszBuffer,DWORD dwBufferSize);
614   DWORD WINAPI MprInfoCreate(DWORD dwVersion,LPVOID *lplpNewHeader);
615   DWORD WINAPI MprInfoDelete(LPVOID lpHeader);
616   DWORD WINAPI MprInfoRemoveAll(LPVOID lpHeader,LPVOID *lplpNewHeader);
617   DWORD WINAPI MprInfoDuplicate(LPVOID lpHeader,LPVOID *lplpNewHeader);
618   DWORD WINAPI MprInfoBlockAdd(LPVOID lpHeader,DWORD dwInfoType,DWORD dwItemSize,DWORD dwItemCount,LPBYTE lpItemData,LPVOID *lplpNewHeader);
619   DWORD WINAPI MprInfoBlockRemove(LPVOID lpHeader,DWORD dwInfoType,LPVOID *lplpNewHeader);
620   DWORD WINAPI MprInfoBlockSet(LPVOID lpHeader,DWORD dwInfoType,DWORD dwItemSize,DWORD dwItemCount,LPBYTE lpItemData,LPVOID *lplpNewHeader);
621   DWORD WINAPI MprInfoBlockFind(LPVOID lpHeader,DWORD dwInfoType,LPDWORD lpdwItemSize,LPDWORD lpdwItemCount,LPBYTE *lplpItemData);
622   DWORD WINAPI MprInfoBlockQuerySize(LPVOID lpHeader);
623 
624 #define MprInfoBlockExists(h,t) (MprInfoBlockFind((h),(t),NULL,NULL,NULL)==NO_ERROR)
625 
626 #if (_WIN32_WINNT >= 0x0600)
627 typedef enum _RAS_QUARANTINE_STATE {
628   RAS_QUAR_STATE_NORMAL,
629   RAS_QUAR_STATE_QUARANTINE,
630   RAS_QUAR_STATE_PROBATION,
631   RAS_QUAR_STATE_NOT_CAPABLE
632 } RAS_QUARANTINE_STATE;
633 
634 typedef struct _MPR_FILTER_0 {
635   WINBOOL fEnabled;
636 } MPR_FILTER_0, *PMPR_FILTER_0;
637 
638 typedef struct _MPR_SERVER_2 {
639   DWORD dwNumPptpPorts;
640   DWORD dwPptpPortFlags;
641   DWORD dwNumL2tpPorts;
642   DWORD dwL2tpPortFlags;
643   DWORD dwNumSstpPorts;
644   DWORD dwSstpPortFlags;
645 } MPR_SERVER_2, *PMPR_SERVER_2;
646 
647 typedef struct _PPP_IPV6CP_INFO {
648   DWORD dwVersion;
649   DWORD dwSize;
650   DWORD dwError;
651   BYTE  bInterfaceIdentifier[8];
652   BYTE  bRemoteInterfaceIdentifier[8];
653   DWORD dwOptions;
654   DWORD dwRemoteOptions;
655   BYTE  bPrefix[8];
656   DWORD dwPrefixLength;
657 } PPP_IPV6_CP_INFO, *PPPP_IPV6_CP_INFO;
658 
659 typedef struct _PPP_INFO_3 {
660   PPP_NBFCP_INFO   nbf;
661   PPP_IPCP_INFO2   ip;
662   PPP_IPV6_CP_INFO ipv6;
663   PPP_CCP_INFO     ccp;
664   PPP_LCP_INFO     lcp;
665 } PPP_INFO_3;
666 
667 typedef struct _RAS_CONNECTION_3 {
668   DWORD                 dwVersion;
669   DWORD                 dwSize;
670   HANDLE                hConnection;
671   WCHAR                 wszUserName[UNLEN + 1];
672   ROUTER_INTERFACE_TYPE dwInterfaceType;
673   GUID                  guid;
674   PPP_INFO_3            PppInfo3;
675   RAS_QUARANTINE_STATE  rasQuarState;
676   FILETIME              timer;
677 } RAS_CONNECTION_3, *PRAS_CONNECTION_3;
678 
679 WINBOOL CALLBACK MprAdminAcceptNewConnection3(
680   RAS_CONNECTION_0 *pRasConnection0,
681   RAS_CONNECTION_1 *pRasConnection1,
682   RAS_CONNECTION_2 *pRasConnection2,
683   RAS_CONNECTION_3 *pRasConnection3
684 );
685 
686 WINBOOL CALLBACK MprAdminAcceptReauthentication(
687   RAS_CONNECTION_0 *pRasConnection0,
688   RAS_CONNECTION_1 *pRasConnection1,
689   RAS_CONNECTION_2 *pRasConnection2,
690   RAS_CONNECTION_3 *pRasConnection3
691 );
692 
693 void CALLBACK MprAdminConnectionHangupNotification3(
694   RAS_CONNECTION_0 *pRasConnection0,
695   RAS_CONNECTION_1 *pRasConnection1,
696   RAS_CONNECTION_2 *pRasConnection2,
697   RAS_CONNECTION_3 *pRasConnection3
698 );
699 
700 DWORD CALLBACK MprAdminGetIpv6AddressForUser(
701   WCHAR *lpwszUserName,
702   WCHAR *lpwszPortName,
703   IN6_ADDR *lpdwIpv6Address,
704   WINBOOL *bNotifyRelease
705 );
706 
707 DWORD CALLBACK MprAdminReleaseIpv6AddressForUser(
708   WCHAR *lpwszUserName,
709   WCHAR *lpwszPortName,
710   IN6_ADDR *lpdwIpv6Address
711 );
712 
713 DWORD WINAPI MprConfigFilterGetInfo(
714   HANDLE hMprConfig,
715   DWORD dwLevel,
716   DWORD dwTransportId,
717   LPBYTE lpBuffer
718 );
719 
720 DWORD WINAPI MprConfigFilterSetInfo(
721   HANDLE hMprConfig,
722   DWORD dwLevel,
723   DWORD dwTransportId,
724   LPBYTE lpBuffer
725 );
726 
727 #endif /*(_WIN32_WINNT >= 0x0600)*/
728 
729 #if (_WIN32_WINNT >= 0x0601)
730 #define MPRAPI_RAS_CONNECTION_OBJECT_REVISION_1 0x01
731 #define MPRAPI_MPR_SERVER_OBJECT_REVISION_1 0x01
732 #define MPRAPI_MPR_SERVER_SET_CONFIG_OBJECT_REVISION_1 0x01
733 
734 typedef enum  {
735   MPRAPI_OBJECT_TYPE_RAS_CONNECTION_OBJECT          = 0x1,
736   MPRAPI_OBJECT_TYPE_MPR_SERVER_OBJECT              = 0x2,
737   MPRAPI_OBJECT_TYPE_MPR_SERVER_SET_CONFIG_OBJECT   = 0x3,
738   MPRAPI_OBJECT_TYPE_AUTH_VALIDATION_OBJECT         = 0x4,
739   MPRAPI_OBJECT_TYPE_UPDATE_CONNECTION_OBJECT       = 0x5
740 } MPRAPI_OBJECT_TYPE;
741 
742 typedef struct _MPRAPI_OBJECT_HEADER {
743   UCHAR revision;
744   UCHAR  type;
745   USHORT size;
746 } MPRAPI_OBJECT_HEADER, *PMPRAPI_OBJECT_HEADER;
747 
748 typedef struct _AUTH_VALIDATION_EX {
749   MPRAPI_OBJECT_HEADER         Header;
750   HANDLE                       hRasConnection;
751   WCHAR                        wszUserName[UNLEN + 1 ];
752   WCHAR                        wszLogonDomain[DNLEN + 1 ];
753   DWORD                        AuthInfoSize;
754   BYTE                         AuthInfo[1];
755 } AUTH_VALIDATION_EX, *PAUTH_VALIDATION_EX;
756 
757 #define RAS_FLAGS_PPP_CONNECTION 0x00000001
758 #define RAS_FLAGS_MESSENGER_PRESENT 0x00000002
759 #define RAS_FLAGS_QUARANTINE_PRESENT 0x00000008
760 #define RAS_FLAGS_ARAP_CONNECTION 0x00000010
761 #define RAS_FLAGS_IKEV2_CONNECTION 0x00000010
762 #define RAS_FLAGS_DORMANT 0x00000020
763 
764 #define IPADDRESSLEN 15
765 
766 typedef struct _PPP_PROJECTION_INFO {
767   DWORD   dwIPv4NegotiationError;
768   WCHAR   wszAddress[IPADDRESSLEN + 1];
769   WCHAR   wszRemoteAddress[IPADDRESSLEN + 1];
770   DWORD   dwIPv4Options;
771   DWORD   dwIPv4RemoteOptions;
772   ULONG64 IPv4SubInterfaceIndex;
773   DWORD   dwIPv6NegotiationError;
774   BYTE    bInterfaceIdentifier[8];
775   BYTE    bRemoteInterfaceIdentifier[8];
776   BYTE    bPrefix[8];
777   DWORD   dwPrefixLength;
778   ULONG64 IPv6SubInterfaceIndex;
779   DWORD   dwLcpError;
780   DWORD   dwAuthenticationProtocol;
781   DWORD   dwAuthenticationData;
782   DWORD   dwRemoteAuthenticationProtocol;
783   DWORD   dwRemoteAuthenticationData;
784   DWORD   dwLcpTerminateReason;
785   DWORD   dwLcpRemoteTerminateReason;
786   DWORD   dwLcpOptions;
787   DWORD   dwLcpRemoteOptions;
788   DWORD   dwEapTypeId;
789   DWORD   dwRemoteEapTypeId;
790   DWORD   dwCcpError;
791   DWORD   dwCompressionAlgorithm;
792   DWORD   dwCcpOptions;
793   DWORD   dwRemoteCompressionAlgorithm;
794   DWORD   dwCcpRemoteOptions;
795 } PPP_PROJECTION_INFO, *PPPP_PROJECTION_INFO;
796 
797 typedef struct _IKEV2_PROJECTION_INFO {
798   DWORD   dwIPv4NegotiationError;
799   WCHAR   wszAddress[IPADDRESSLEN  + 1];
800   WCHAR   wszRemoteAddress[IPADDRESSLEN  + 1];
801   ULONG64 IPv4SubInterfaceIndex;
802   DWORD   dwIPv6NegotiationError;
803   BYTE    bInterfaceIdentifier[8];
804   BYTE    bRemoteInterfaceIdentifier[8];
805   BYTE    bPrefix[8];
806   DWORD   dwPrefixLength;
807   ULONG64 IPv6SubInterfaceIndex;
808   DWORD   dwOptions;
809   DWORD   dwAuthenticationProtocol;
810   DWORD   dwEapTypeId;
811   DWORD   dwCompressionAlgorithm;
812   DWORD   dwEncryptionMethod;
813 } IKEV2_PROJECTION_INFO, *PIKEV2_PROJECTION_INFO;
814 
815 typedef struct _PROJECTION_INFO {
816   UCHAR projectionInfoType;
817   __C89_NAMELESS union {
818     IKEV2_PROJECTION_INFO Ikev2ProjectionInfo;
819     PPP_PROJECTION_INFO   PppProjectionInfo;
820   } DUMMYUNIONNAME;
821 } PROJECTION_INFO, *PPROJECTION_INFO;
822 
823 typedef struct _RAS_CONNECTION_EX {
824   MPRAPI_OBJECT_HEADER  Header;
825   DWORD                 dwConnectDuration;
826   ROUTER_INTERFACE_TYPE dwInterfaceType;
827   DWORD                 dwConnectionFlags;
828   WCHAR                 wszInterfaceName[MAX_INTERFACE_NAME_LEN + 1];
829   WCHAR                 wszUserName[UNLEN + 1];
830   WCHAR                 wszLogonDomain[DNLEN + 1];
831   WCHAR                 wszRemoteComputer[NETBIOS_NAME_LEN + 1];
832   GUID                  guid;
833   RAS_QUARANTINE_STATE  rasQuarState;
834   FILETIME              probationTime;
835   DWORD                 dwBytesXmited;
836   DWORD                 dwBytesRcved;
837   DWORD                 dwFramesXmited;
838   DWORD                 dwFramesRcved;
839   DWORD                 dwCrcErr;
840   DWORD                 dwTimeoutErr;
841   DWORD                 dwAlignmentErr;
842   DWORD                 dwHardwareOverrunErr;
843   DWORD                 dwFramingErr;
844   DWORD                 dwBufferOverrunErr;
845   DWORD                 dwCompressionRatioIn;
846   DWORD                 dwCompressionRatioOut;
847   DWORD                 dwNumSwitchOvers;
848   WCHAR                 wszRemoteEndpointAddress[MAXIPADRESSLEN+1];
849   WCHAR                 wszLocalEndpointAddress[MAXIPADRESSLEN+1];
850   PROJECTION_INFO       ProjectionInfo;
851   HANDLE                hConnection;
852   HANDLE                hInterface;
853 } RAS_CONNECTION_EX, *PRAS_CONNECTION_EX;
854 
855 typedef struct _RAS_UPDATE_CONNECTION {
856   MPRAPI_OBJECT_HEADER Header;
857   DWORD                dwIfIndex;
858   WCHAR                wszLocalEndpointAddress[MAXIPADRESSLEN+1];
859   WCHAR                wszRemoteEndpointAddress[MAXIPADRESSLEN+1];
860 } RAS_UPDATE_CONNECTION, *PRAS_UPDATE_CONNECTION;
861 
862 #define MPRAPI_IKEV2_SET_TUNNEL_CONFIG_PARAMS 0x01
863 
864 typedef struct _IKEV2_TUNNEL_CONFIG_PARAMS {
865   DWORD          dwIdleTimeout;
866   DWORD          dwNetworkBlackoutTime;
867   DWORD          dwSaLifeTime;
868   DWORD          dwSaDataSizeForRenegotiation;
869   DWORD          dwConfigOptions;
870   DWORD          dwTotalCertificates;
871   CERT_NAME_BLOB *certificateNames;
872 } IKEV2_TUNNEL_CONFIG_PARAMS, *PIKEV2_TUNNEL_CONFIG_PARAMS;
873 
874 typedef struct _IKEV2_CONFIG_PARAMS {
875   DWORD                      dwNumPorts;
876   DWORD                      dwPortFlags;
877   DWORD                      dwTunnelConfigParamFlags;
878   IKEV2_TUNNEL_CONFIG_PARAMS TunnelConfigParams;
879 } IKEV2_CONFIG_PARAMS, *PIKEV2_CONFIG_PARAMS;
880 
881 typedef struct _PPTP_CONFIG_PARAMS {
882   DWORD dwNumPorts;
883   DWORD dwPortFlags;
884 } PPTP_CONFIG_PARAMS, *PPPTP_CONFIG_PARAMS;
885 
886 typedef struct _L2TP_CONFIG_PARAMS {
887   DWORD dwNumPorts;
888   DWORD dwPortFlags;
889 } L2TP_CONFIG_PARAMS, *PL2TP_CONFIG_PARAMS;
890 
891 typedef struct _SSTP_CERT_INFO {
892   BOOL            isDefault;
893   CRYPT_HASH_BLOB certBlob;
894 } SSTP_CERT_INFO, *PSSTP_CERT_INFO;
895 
896 typedef struct _SSTP_CONFIG_PARAMS {
897   DWORD          dwNumPorts;
898   DWORD          dwPortFlags;
899   BOOL           isUseHttps;
900   DWORD          certAlgorithm;
901   SSTP_CERT_INFO sstpCertDetails;
902 } SSTP_CONFIG_PARAMS, *PSSTP_CONFIG_PARAMS;
903 
904 typedef struct _MPRAPI_TUNNEL_CONFIG_PARAMS {
905   IKEV2_CONFIG_PARAMS IkeConfigParams;
906   PPTP_CONFIG_PARAMS  PptpConfigParams;
907   L2TP_CONFIG_PARAMS  L2tpConfigParams;
908   SSTP_CONFIG_PARAMS  SstpConfigParams;
909 } MPRAPI_TUNNEL_CONFIG_PARAMS, *PMPRAPI_TUNNEL_CONFIG_PARAMS;
910 
911 typedef struct _MPR_SERVER_SET_CONFIG_EX {
912   MPRAPI_OBJECT_HEADER        Header;
913   DWORD                       setConfigForProtocols;
914   MPRAPI_TUNNEL_CONFIG_PARAMS ConfigParams;
915 } MPR_SERVER_SET_CONFIG_EX, *PMPR_SERVER_SET_CONFIG_EX;
916 
917 typedef struct _MPR_SERVER_EX {
918   MPRAPI_OBJECT_HEADER        Header;
919   DWORD                       fLanOnlyMode;
920   DWORD                       dwUpTime;
921   DWORD                       dwTotalPorts;
922   DWORD                       dwPortsInUse;
923   DWORD                       Reserved;
924   MPRAPI_TUNNEL_CONFIG_PARAMS ConfigParams;
925 } MPR_SERVER_EX, *PMPR_SERVER_EX;
926 
927 typedef DWORD (APIENTRY * PMPRADMINGETIPADDRESSFORUSER)(WCHAR *, WCHAR *, DWORD *, WINBOOL *);
928 typedef VOID  (APIENTRY * PMPRADMINRELEASEIPADRESS)(WCHAR *, WCHAR *, DWORD *);
929 typedef DWORD (APIENTRY * PMPRADMINGETIPV6ADDRESSFORUSER)(WCHAR *, WCHAR *, IN6_ADDR *, WINBOOL *);
930 typedef VOID  (APIENTRY * PMPRADMINRELEASEIPV6ADDRESSFORUSER)(WCHAR *, WCHAR *, IN6_ADDR *);
931 typedef WINBOOL (APIENTRY * PMPRADMINACCEPTNEWLINK)(RAS_PORT_0 *, RAS_PORT_1 *);
932 typedef VOID  (APIENTRY * PMPRADMINLINKHANGUPNOTIFICATION)(RAS_PORT_0 *, RAS_PORT_1 *);
933 typedef DWORD (APIENTRY * PMPRADMINTERMINATEDLL)();
934 typedef BOOL  (APIENTRY * PMPRADMINACCEPTNEWCONNECTIONEX)(RAS_CONNECTION_EX *);
935 typedef BOOL  (APIENTRY * PMPRADMINACCEPTREAUTHENTICATIONEX)(RAS_CONNECTION_EX *);
936 typedef VOID  (APIENTRY * PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX)(RAS_CONNECTION_EX *);
937 
938 typedef struct _MPRAPI_ADMIN_DLL_CALLBACKS {
939   UCHAR                                   revision;
940   PMPRADMINGETIPADDRESSFORUSER            lpfnMprAdminGetIpAddressForUser;
941   PMPRADMINRELEASEIPADRESS                lpfnMprAdminReleaseIpAddress;
942   PMPRADMINGETIPV6ADDRESSFORUSER          lpfnMprAdminGetIpv6AddressForUser;
943   PMPRADMINRELEASEIPV6ADDRESSFORUSER      lpfnMprAdminReleaseIpV6AddressForUser;
944   PMPRADMINACCEPTNEWLINK                  lpfnRasAdminAcceptNewLink;
945   PMPRADMINLINKHANGUPNOTIFICATION         lpfnRasAdminLinkHangupNotification;
946   PMPRADMINTERMINATEDLL                   lpfnRasAdminTerminateDll;
947   PMPRADMINACCEPTNEWCONNECTIONEX          lpfnRasAdminAcceptNewConnectionEx;
948   PMPRADMINACCEPTREAUTHENTICATIONEX       lpfnRasAdminAcceptReauthenticationEx;
949   PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX lpfnRasAdminConnectionHangupNotificationEx;
950 } MPRAPI_ADMIN_DLL_CALLBACKS, *PMPRAPI_ADMIN_DLL_CALLBACKS;
951 
952 DWORD APIENTRY MprConfigServerSetInfoEx(HANDLE hMprConfig,MPR_SERVER_SET_CONFIG_EX *pSetServerConfig);
953 
954 DWORD APIENTRY MprConfigServerGetInfoEx(
955   HANDLE hMprConfig,
956   MPR_SERVER_EX *pServerInfo
957 );
958 
959 DWORD APIENTRY MprAdminConnectionEnumEx(
960   RAS_SERVER_HANDLE hRasServer,
961   PMPRAPI_OBJECT_HEADER pObjectHeader,
962   DWORD dwPreferedMaxLen,
963   LPDWORD lpdwEntriesRead,
964   LPDWORD lpdwTotalEntries,
965   PRAS_CONNECTION_EX *ppRasConn,
966   LPDWORD lpdwResumeHandle
967 );
968 
969 DWORD APIENTRY MprAdminConnectionGetInfoEx(
970   RAS_SERVER_HANDLE hRasServer,
971   HANDLE hConnection,
972   PRAS_CONNECTION_EX pRasConnection
973 );
974 
975 DWORD APIENTRY MprAdminInitializeDllEx(
976   PMPRAPI_ADMIN_DLL_CALLBACKS pAdminCallbacks
977 );
978 
979 DWORD APIENTRY MprAdminIsServiceInitialized(
980   LPWSTR   lpwsServerName,
981   WINBOOL  *fIsServiceInitialized
982 );
983 
984 DWORD APIENTRY MprAdminServerGetInfoEx(
985   MPR_SERVER_HANDLE hMprServer,
986   MPR_SERVER_EX *pServerInfo
987 );
988 
989 DWORD APIENTRY MprAdminServerSetInfoEx(
990   MPR_SERVER_HANDLE hMprServer,
991   MPR_SERVER_SET_CONFIG_EX *pServerInfo
992 );
993 
994 #endif /*(_WIN32_WINNT >= 0x0601)*/
995 
996 #ifdef __cplusplus
997 }
998 #endif
999 
1000 #endif /* WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) */
1001 
1002 #endif /* __ROUTING_MPRADMIN_H__ */
1003