zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

mprapi.h (42069B) - Raw


      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__ */