6 Appendix A: Full IDL

For ease of implementation, the full IDL is provided, where "ms-dtyp.idl" refers to the IDL found in [MS-DTYP] Appendix A. The syntax uses the IDL syntax extensions defined in [MS-RPCE] section 2.2.4. For example, as noted in [MS-RPCE] section 2.2.4.9, a pointer_default declaration is not required, and pointer_default (unique) is assumed.

 import "ms-oaut.idl";
  
 #define IN
 #define OUT
  
 typedef enum _ROUTER_INTERFACE_TYPE
 {
     ROUTER_IF_TYPE_CLIENT,
     ROUTER_IF_TYPE_HOME_ROUTER,
     ROUTER_IF_TYPE_FULL_ROUTER,
     ROUTER_IF_TYPE_DEDICATED,
     ROUTER_IF_TYPE_INTERNAL,
     ROUTER_IF_TYPE_LOOPBACK,
     ROUTER_IF_TYPE_TUNNEL1,
     ROUTER_IF_TYPE_DIALOUT
 } ROUTER_INTERFACE_TYPE;
  
  
  
 typedef enum
 {
     ROUTER_IF_STATE_UNREACHABLE,
     ROUTER_IF_STATE_DISCONNECTED,
     ROUTER_IF_STATE_CONNECTING,
     ROUTER_IF_STATE_CONNECTED
 } ROUTER_CONNECTION_STATE;
  
  
  
 typedef enum _RAS_QUARANTINE_STATE 
 {
     RAS_QUAR_STATE_NORMAL,
     RAS_QUAR_STATE_QUARANTINE,
     RAS_QUAR_STATE_PROBATION,
     RAS_QUAR_STATE_UNKNOWN
 } RAS_QUARANTINE_STATE;
  
  
  
 typedef enum _RAS_PORT_CONDITION
 {
     RAS_PORT_NON_OPERATIONAL,
     RAS_PORT_DISCONNECTED,
     RAS_PORT_CALLING_BACK,
     RAS_PORT_LISTENING,
     RAS_PORT_AUTHENTICATING,
     RAS_PORT_AUTHENTICATED,
     RAS_PORT_INITIALIZING
 } RAS_PORT_CONDITION;
  
  
  
 typedef enum _RAS_HARDWARE_CONDITION
 {
     RAS_HARDWARE_OPERATIONAL,
     RAS_HARDWARE_FAILURE
 }
 RAS_HARDWARE_CONDITION;
  
  
  
 typedef handle_t DIM_HANDLE;
  
  
  
 typedef enum _FORWARD_ACTION
 {
     FORWARD = 0,
     DROP = 1,
 }
 FORWARD_ACTION;
  
  
  
 typedef enum {
     MIB_IPROUTE_TYPE_OTHER    = 1,
     MIB_IPROUTE_TYPE_INVALID  = 2,
     MIB_IPROUTE_TYPE_DIRECT   = 3,
     MIB_IPROUTE_TYPE_INDIRECT = 4, 
 } MIB_IPFORWARD_TYPE;
  
  
  
 typedef enum {
     MIB_IPPROTO_OTHER = 1,
     MIB_IPPROTO_LOCAL = 2,
     MIB_IPPROTO_NETMGMT = 3,
     MIB_IPPROTO_ICMP = 4,
     MIB_IPPROTO_EGP = 5,
     MIB_IPPROTO_GGP = 6,
     MIB_IPPROTO_HELLO = 7,
     MIB_IPPROTO_RIP = 8 ,
     MIB_IPPROTO_IS_IS = 9,
     MIB_IPPROTO_ES_IS = 10,
     MIB_IPPROTO_CISCO = 11,
     MIB_IPPROTO_BBN = 12,
     MIB_IPPROTO_OSPF = 13,
     MIB_IPPROTO_BGP = 14,
     MIB_IPPROTO_NT_AUTOSTATIC = 10002,
     MIB_IPPROTO_NT_STATIC = 10006,
     MIB_IPPROTO_NT_STATIC_NON_DOD = 10007,
 } MIB_IPFORWARD_PROTO;
  
  
  
 typedef enum {
     MIB_IP_FORWARDING     = 1,
     MIB_IP_NOT_FORWARDING = 2,
 } MIB_IPSTATS_FORWARDING, *PMIB_IPSTATS_FORWARDING;
  
  
  
 typedef enum {
     MIB_TCP_STATE_CLOSED     =  1,
     MIB_TCP_STATE_LISTEN     =  2,
     MIB_TCP_STATE_SYN_SENT   =  3,
     MIB_TCP_STATE_SYN_RCVD   =  4,
     MIB_TCP_STATE_ESTAB      =  5,
     MIB_TCP_STATE_FIN_WAIT1  =  6,
     MIB_TCP_STATE_FIN_WAIT2  =  7,
     MIB_TCP_STATE_CLOSE_WAIT =  8,
     MIB_TCP_STATE_CLOSING    =  9,
     MIB_TCP_STATE_LAST_ACK   = 10,
     MIB_TCP_STATE_TIME_WAIT  = 11,
     MIB_TCP_STATE_DELETE_TCB = 12,
 } MIB_TCP_STATE;
  
  
  
 typedef enum {
     MIB_TCP_RTO_OTHER     = 1,
     MIB_TCP_RTO_CONSTANT  = 2,
     MIB_TCP_RTO_RSRE      = 3,
     MIB_TCP_RTO_VANJ      = 4,
 } TCP_RTO_ALGORITHM, *PTCP_RTO_ALGORITHM;
  
 //
 // IPv6 Internet address (RFC 2553)
 // This is an 'on-wire' format structure.
 //
 typedef struct in6_addr {
         union {
                 UCHAR       Byte[16];
                 USHORT      Word[8];
         } u;
 } IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR;
  
 typedef struct _DIM_INFORMATION_CONTAINER
 {
     DWORD   dwBufferSize;
     [size_is(dwBufferSize)] LPBYTE pBuffer;
 } 
 DIM_INFORMATION_CONTAINER, *PDIM_INFORMATION_CONTAINER;
  
 // RAS_CONNECTION_EX structure are redefined in this IDL to make use of versioning:
 // All the Versions of RAS_CONNECTION_EX will be defined here in RPC usable format:
  
  
 typedef struct _MPRAPI_OBJECT_HEADER_IDL
 {
     UCHAR                       revision;
     UCHAR                       type;
     USHORT                      size;
  
 }MPRAPI_OBJECT_HEADER_IDL, *PMPRAPI_OBJECT_HEADER_IDL;
  
 typedef struct _PPP_PROJECTION_INFO_1
 {
  
         // IPv4 Projection Parameters
         DWORD                           dwIPv4NegotiationError;
         WCHAR                           wszAddress[16];
         WCHAR                           wszRemoteAddress[16];
         DWORD                           dwIPv4Options;
         DWORD                           dwIPv4RemoteOptions; 
         ULONG64                         IPv4SubInterfaceIndex;
  
         // IPv6 Projection Parameters
         DWORD                           dwIPv6NegotiationError;
         UCHAR                           bInterfaceIdentifier[8];
         UCHAR                           bRemoteInterfaceIdentifier[8];
         UCHAR                           bPrefix[8];
         DWORD                           dwPrefixLength; 
         ULONG64                         IPv6SubInterfaceIndex;
             // LCP Options
         DWORD                           dwLcpError;
         DWORD                           dwAuthenticationProtocol;  
         DWORD                           dwAuthenticationData;  
         DWORD                           dwRemoteAuthenticationProtocol;  
         DWORD                           dwRemoteAuthenticationData;  
         DWORD                           dwLcpTerminateReason;  
         DWORD                           dwLcpRemoteTerminateReason;  
         DWORD                           dwLcpOptions;  
         DWORD                           dwLcpRemoteOptions;  
         DWORD                           dwEapTypeId;  
         DWORD                           dwRemoteEapTypeId;
         
  
         // CCP options:
         DWORD                           dwCcpError;  
         DWORD                           dwCompressionAlgorithm;  
         DWORD                           dwCcpOptions;  
         DWORD                           dwRemoteCompressionAlgorithm;  
         DWORD                           dwCcpRemoteOptions;
  
  
     
  
 }PPP_PROJECTION_INFO_1, *PPPP_PROJECTION_INFO_1;
  
 typedef struct _PPP_PROJECTION_INFO_2
 {
     // IPv4 Projection Parameters
     DWORD     dwIPv4NegotiationError;
     WCHAR     wszAddress[16];
     WCHAR     wszRemoteAddress[16];
     DWORD     dwIPv4Options;
     DWORD     dwIPv4RemoteOptions; 
     ULONG64   IPv4SubInterfaceIndex;
  
     // IPv6 Projection Parameters
     DWORD     dwIPv6NegotiationError;
     UCHAR     bInterfaceIdentifier[8];
     UCHAR     bRemoteInterfaceIdentifier[8];
     UCHAR     bPrefix[8];
     DWORD     dwPrefixLength; 
     ULONG64   IPv6SubInterfaceIndex;
     
     // LCP Options
     DWORD     dwLcpError;
     DWORD     dwAuthenticationProtocol;  
     DWORD     dwAuthenticationData;  
     DWORD     dwRemoteAuthenticationProtocol;  
     DWORD     dwRemoteAuthenticationData;  
     DWORD     dwLcpTerminateReason;  
     DWORD     dwLcpRemoteTerminateReason;  
     DWORD     dwLcpOptions;  
     DWORD     dwLcpRemoteOptions;  
     DWORD     dwEapTypeId;
     DWORD     dwEmbeddedEAPTypeId;
     DWORD     dwRemoteEapTypeId;
  
     // CCP options:
     DWORD     dwCcpError;  
     DWORD     dwCompressionAlgorithm;  
     DWORD     dwCcpOptions;  
     DWORD     dwRemoteCompressionAlgorithm;  
     DWORD     dwCcpRemoteOptions;
 }
 PPP_PROJECTION_INFO_2, *PPPP_PROJECTION_INFO_2;
  
  
 typedef struct IKEV2_PROJECTION_INFO_1
 {
  
         DWORD                           dwIPv4NegotiationError;
         WCHAR                           wszAddress[16];
         WCHAR                           wszRemoteAddress[16];
         ULONG64                         IPv4SubInterfaceIndex;
  
         DWORD                           dwIPv6NegotiationError;
         UCHAR                           bInterfaceIdentifier[8];
         UCHAR                           bRemoteInterfaceIdentifier[8];
         UCHAR                           bPrefix[8];
         DWORD                           dwPrefixLength; 
         ULONG64                         IPv6SubInterfaceIndex;
         
         DWORD                           dwOptions;
         
         DWORD                           dwAuthenticationProtocol;
         DWORD                           dwEapTypeId;
         DWORD                           dwCompressionAlgorithm;
         DWORD                            dwEncryptionMethod;
  
 }IKEV2_PROJECTION_INFO_1, *PIKEV2_PROJECTION_INFO_1;
  
 typedef struct IKEV2_PROJECTION_INFO_2
 {
     DWORD     dwIPv4NegotiationError;
     WCHAR     wszAddress[16];
     WCHAR     wszRemoteAddress[16];
     ULONG64   IPv4SubInterfaceIndex;
  
     DWORD     dwIPv6NegotiationError;
     UCHAR     bInterfaceIdentifier[8];
     UCHAR     bRemoteInterfaceIdentifier[8];
     UCHAR     bPrefix[8];
     DWORD     dwPrefixLength; 
     ULONG64   IPv6SubInterfaceIndex;
  
     DWORD     dwOptions;
  
     DWORD     dwAuthenticationProtocol;
     DWORD     dwEapTypeId;
     DWORD     dwEmbeddedEAPTypeId;
     DWORD     dwCompressionAlgorithm;
     DWORD     dwEncryptionMethod;
 }
 IKEV2_PROJECTION_INFO_2, *PIKEV2_PROJECTION_INFO_2;
  
  
 typedef union _PROJECTION_INFO_IDL_1 switch (UCHAR projectionInfoType) ProjectionInfoObject
 { 
     case 1:
         PPP_PROJECTION_INFO_1     PppProjectionInfo;
     case 2: 
         IKEV2_PROJECTION_INFO_1   Ikev2ProjectionInfo;
 }PROJECTION_INFO_IDL_1;
  
 typedef struct _PROJECTION_INFO_IDL_1 *PPROJECTION_INFO_IDL_1;
  
 typedef union _PROJECTION_INFO_IDL_2 switch (UCHAR projectionInfoType) ProjectionInfoObject
 { 
     case 1:
         PPP_PROJECTION_INFO_2     PppProjectionInfo;
  
     case 2: 
         IKEV2_PROJECTION_INFO_2   Ikev2ProjectionInfo;
  
 }PROJECTION_INFO_IDL_2, *PPROJECTION_INFO_IDL_2;
  
  
 typedef struct _RAS_CONNECTION_EX_1_IDL{ 
         MPRAPI_OBJECT_HEADER_IDL    Header;
         DWORD                       dwConnectDuration;
         ROUTER_INTERFACE_TYPE       dwInterfaceType;
         DWORD                       dwConnectionFlags;
         WCHAR                       wszInterfaceName[257];
         WCHAR                       wszUserName[257];
         WCHAR                       wszLogonDomain[16];
         WCHAR                       wszRemoteComputer[17]; 
         GUID                        guid;
         RAS_QUARANTINE_STATE        rasQuarState;
  
         // Probation time
         FILETIME                    probationTime;
  
         DWORD                       dwBytesXmited;
         DWORD                       dwBytesRcved;
         DWORD                       dwFramesXmited;
         DWORD                       dwFramesRcved;
         DWORD                       dwCrcErr;
         DWORD                       dwTimeoutErr;
         DWORD                       dwAlignmentErr;
         DWORD                       dwHardwareOverrunErr;
         DWORD                       dwFramingErr;
         DWORD                       dwBufferOverrunErr;
         DWORD                       dwCompressionRatioIn;
         DWORD                       dwCompressionRatioOut; 
  
         // Currently valid only for IKEV2:
         DWORD                       dwNumSwitchOvers;
  
         // Endpoint Information
         WCHAR                       wszRemoteEndpointAddress[65];
         WCHAR                       wszLocalEndpointAddress[65];
  
         PROJECTION_INFO_IDL_1       ProjectionInfo;
  
         ULONG                       hConnection;
         ULONG                       hInterface;
  
 } RAS_CONNECTION_EX_1_IDL, *PRAS_CONNECTION_EX_1_IDL;
  
  
 typedef union _RAS_CONNECTION_EX_IDL switch (UCHAR revision) ConnObject
 {
     case 1: // RAS_CONNECTION_EX with version 1: (MPRAPI_RAS_CONNECTION_OBJECT_REVISION_1)
         RAS_CONNECTION_EX_1_IDL     RasConnection1;
 }RAS_CONNECTION_EX_IDL;
  
 typedef struct _RAS_CONNECTION_EX_IDL *PRAS_CONNECTION_EX_IDL;
  
 typedef struct _RAS_CONNECTION_4_IDL
 { 
     DWORD                       dwConnectDuration;
     ROUTER_INTERFACE_TYPE       dwInterfaceType;
     DWORD                       dwConnectionFlags;
     WCHAR                       wszInterfaceName[257];
     WCHAR                       wszUserName[257];
     WCHAR                       wszLogonDomain[16];
     WCHAR                       wszRemoteComputer[17]; 
     GUID                        guid;
     RAS_QUARANTINE_STATE        rasQuarState;
  
     // Probation time
     FILETIME                    probationTime;
  
     // Connection start time
     FILETIME                    connectionStartTime; 
  
     DWORD                       dwBytesXmited;
     DWORD                       dwBytesRcved;
     DWORD                       dwFramesXmited;
     DWORD                       dwFramesRcved;
     DWORD                       dwCrcErr;
     DWORD                       dwTimeoutErr;
     DWORD                       dwAlignmentErr;
     DWORD                       dwHardwareOverrunErr;
     DWORD                       dwFramingErr;
     DWORD                       dwBufferOverrunErr;
     DWORD                       dwCompressionRatioIn;
     DWORD                       dwCompressionRatioOut; 
  
     // Currently valid only for IKEV2:
     DWORD                       dwNumSwitchOvers;
  
     // Endpoint Information
     WCHAR                       wszRemoteEndpointAddress[65];
     WCHAR                       wszLocalEndpointAddress[65];
  
     PROJECTION_INFO_IDL_2       ProjectionInfo;
  
     ULONG                       hConnection;
     ULONG                       hInterface;
     
     // VPN Device type 
     DWORD                      dwDeviceType;
 }
 RAS_CONNECTION_4_IDL, *PRAS_CONNECTION_4_IDL;
  
  
 typedef  struct  _CERT_BLOB_1
 {
     DWORD cbData;
     [size_is(cbData)] BYTE * pbData;
     
 }CERT_BLOB_1,*PCERT_BLOB_1;
  
 typedef  struct  _CERT_EKU_1
 {
     DWORD dwSize; 
     BOOL  IsEKUOID;
     [size_is(dwSize)] WCHAR *pwszEKU;
     
 }CERT_EKU_1,*PCERT_EKU_1;
  
 typedef struct _IKEV2_TUNNEL_CONFIG_PARAMS_1 {
     DWORD                       dwIdleTimeout;
     DWORD                       dwNetworkBlackoutTime;
     DWORD                       dwSaLifeTime;
     DWORD                       dwSaDataSizeForRenegotiation;
     DWORD                       dwConfigOptions;
     DWORD                     dwTotalCertificates;
     [size_is(dwTotalCertificates)] CERT_BLOB_1* certificateNames; 
 }IKEV2_TUNNEL_CONFIG_PARAMS_1, *PIKEV2_TUNNEL_CONFIG_PARAMS_1;
  
 typedef struct _ROUTER_CUSTOM_IKEv2_POLICY_0
 {
     //    Integrity method plumbed in IKE policy
     DWORD dwIntegrityMethod;
  
     //    Encryption method plumbed in IKE policy
     DWORD dwEncryptionMethod;
  
     //    ESP cipher plumbed in Ipsec policy
     DWORD dwCipherTransformConstant;
  
     //    AH Auth transform plumbed in Ipsec policy
     DWORD dwAuthTransformConstant;
  
     //    PFS group plumbed in Ipsec policy
     DWORD dwPfsGroup;
  
     //    DH group plumbed in IKE policy
     DWORD dwDhGroup; 
 }ROUTER_CUSTOM_IKEv2_POLICY_0, *PROUTER_CUSTOM_IKEv2_POLICY_0, ROUTER_CUSTOM_L2TP_POLICY_0, *PROUTER_CUSTOM_L2TP_POLICY_0;
  
 typedef struct _ROUTER_IKEv2_IF_CUSTOM_CONFIG_0
 {
      //    Lifetime of a security association (SA), in seconds, 
      //    after which the SA is no longer valid [RFC 4306].
     DWORD dwSaLifeTime;
  
     //    Number of kilobytes that are allowed to transfer using an SA. 
     //    After that, the SA will be renegotiated [RFC 4306].
     DWORD dwSaDataSize;
  
     //    SubjecName of the certificate to be used in default store 
     //    for machine certificate authentication. 
    CERT_BLOB_1   certificateName; 
  
     //    Custom IKEv2 Policy 
     PROUTER_CUSTOM_IKEv2_POLICY_0 customPolicy; 
 }ROUTER_IKEv2_IF_CUSTOM_CONFIG_0, *PROUTER_IKEv2_IF_CUSTOM_CONFIG_0;
  
 typedef struct _ROUTER_IKEv2_IF_CUSTOM_CONFIG_1 {
   DWORD dwSaLifeTime;
   DWORD dwSaDataSize;
   CERT_BLOB_1 certificateName;
   PROUTER_CUSTOM_IKEv2_POLICY_0 customPolicy;
   CERT_BLOB_1 certificateHash;
 } ROUTER_IKEv2_IF_CUSTOM_CONFIG_1, 
  *PROUTER_IKEv2_IF_CUSTOM_CONFIG_1;
  
 typedef struct _MPR_IF_CUSTOMINFOEX_0 {
     MPRAPI_OBJECT_HEADER_IDL        Header;
     DWORD                       dwFlags;
     ROUTER_IKEv2_IF_CUSTOM_CONFIG_0  customIkev2Config;
 }MPR_IF_CUSTOMINFOEX_0, *PMPR_IF_CUSTOMINFOEX_0;
  
 typedef struct _MPR_IF_CUSTOMINFOEX_1 {
   MPRAPI_OBJECT_HEADER_IDL Header;
   DWORD dwFlags;
   ROUTER_IKEv2_IF_CUSTOM_CONFIG_1 customIkev2Config;
 } MPR_IF_CUSTOMINFOEX_1, 
  *PMPR_IF_CUSTOMINFOEX_1;
  
 typedef union _MPR_IF_CUSTOMINFOEX_IDL switch (UCHAR  revision) IfCustomConfigObject
 {
     case 1:
         MPR_IF_CUSTOMINFOEX_0     IfConfigObj1;
     case 2:
         MPR_IF_CUSTOMINFOEX_1     IfConfigObj2;
  
 }MPR_IF_CUSTOMINFOEX_IDL,*PMPR_IF_CUSTOMINFOEX_IDL;
  
  
 typedef struct _IKEV2_TUNNEL_CONFIG_PARAMS_2 {
     DWORD                       dwIdleTimeout;
     DWORD                       dwNetworkBlackoutTime;
     DWORD                       dwSaLifeTime;
     DWORD                       dwSaDataSizeForRenegotiation;
     DWORD                       dwConfigOptions;
     DWORD                       dwTotalCertificates;
     [size_is(dwTotalCertificates)] CERT_BLOB_1* certificateNames; 
  
     //    SubjecName of the certificate to be used in default store 
     //    for machine certificate authentication. 
     CERT_BLOB_1    machineCertificateName; 
     DWORD                       dwEncryptionType;
     ROUTER_CUSTOM_IKEv2_POLICY_0* customPolicy;
 }
 IKEV2_TUNNEL_CONFIG_PARAMS_2, *PIKEV2_TUNNEL_CONFIG_PARAMS_2;
  
 typedef struct _IKEV2_TUNNEL_CONFIG_PARAMS_3 {
     DWORD                       dwIdleTimeout;
     DWORD                       dwNetworkBlackoutTime;
     DWORD                       dwSaLifeTime;
     DWORD                       dwSaDataSizeForRenegotiation;
     DWORD                       dwConfigOptions;
     DWORD                       dwTotalCertificates;
     [size_is(dwTotalCertificates)] CERT_BLOB_1* certificateNames; 
  
     //    SubjectName of the certificate to be used in default store 
     //    for machine certificate authentication. 
     CERT_BLOB_1    machineCertificateName; 
     DWORD                       dwEncryptionType;
     ROUTER_CUSTOM_IKEv2_POLICY_0* customPolicy;
  
     DWORD                       dwTotalEkus;
     [size_is(dwTotalEkus)]      CERT_EKU_1* certificateEKUs; 
     CERT_BLOB_1                 machineCertificateHash;
  
 }
 IKEV2_TUNNEL_CONFIG_PARAMS_3, *PIKEV2_TUNNEL_CONFIG_PARAMS_3;
  
 typedef struct _L2TP_TUNNEL_CONFIG_PARAMS_1 {
     DWORD                      dwIdleTimeout;
     // encryption type to be used for L2TP
     DWORD                    dwEncryptionType;
     DWORD                    dwSaLifeTime;
     DWORD                    dwSaDataSizeForRenegotiation;
  
     PROUTER_CUSTOM_L2TP_POLICY_0 customPolicy;
 }L2TP_TUNNEL_CONFIG_PARAMS_1, *PL2TP_TUNNEL_CONFIG_PARAMS_1;
  
 typedef struct _IKEV2_CONFIG_PARAMS_1 {
  
     DWORD                           dwNumPorts;
     DWORD                           dwPortFlags;
     DWORD                           dwTunnelConfigParamFlags;
     IKEV2_TUNNEL_CONFIG_PARAMS_1    TunnelConfigParams;
     
 }IKEV2_CONFIG_PARAMS_1, *PIKEV2_CONFIG_PARAMS_1;
  
 typedef struct _IKEV2_CONFIG_PARAMS_2 {
  
     DWORD                           dwNumPorts;
     DWORD                           dwPortFlags;
     DWORD                           dwTunnelConfigParamFlags;
     IKEV2_TUNNEL_CONFIG_PARAMS_2    TunnelConfigParams;
 }
 IKEV2_CONFIG_PARAMS_2, *PIKEV2_CONFIG_PARAMS_2;
  
 typedef struct _IKEV2_CONFIG_PARAMS_3 {
  
     DWORD                           dwNumPorts;
     DWORD                           dwPortFlags;
     DWORD                           dwTunnelConfigParamFlags;
     IKEV2_TUNNEL_CONFIG_PARAMS_3    TunnelConfigParams;
 }
 IKEV2_CONFIG_PARAMS_3, *PIKEV2_CONFIG_PARAMS_3;
  
 typedef struct _PPTP_CONFIG_PARAMS_1 {
  
     DWORD                       dwNumPorts;
     DWORD                       dwPortFlags;
  
 }PPTP_CONFIG_PARAMS_1, *PPPTP_CONFIG_PARAMS_1;
  
 typedef struct _L2TP_CONFIG_PARAMS_1 {
  
     DWORD                       dwNumPorts;
     DWORD                       dwPortFlags;
     
 }L2TP_CONFIG_PARAMS_1, *PL2TP_CONFIG_PARAMS_1;
  
 typedef struct _L2TP_CONFIG_PARAMS_2 {
  
     DWORD                       dwNumPorts;
     DWORD                       dwPortFlags;
     DWORD                       dwTunnelConfigParamFlags;
     L2TP_TUNNEL_CONFIG_PARAMS_1                       TunnelConfigParams;
     
 }L2TP_CONFIG_PARAMS_2, *PL2TP_CONFIG_PARAMS_2;
  
 #define MAX_SSTP_HASH_SIZE       32
  
 typedef struct _SSTP_CERT_INFO_1
 {
  
     BOOL                   isDefault;
     CERT_BLOB_1            certBlob;
 }SSTP_CERT_INFO_1, *PSSTP_CERT_INFO_1;
  
 typedef struct _SSTP_CONFIG_PARAMS_1 {
  
     DWORD                         dwNumPorts;
     DWORD                         dwPortFlags;
     BOOL                          isUseHttps;
     DWORD                         certAlgorithm; // Always CALG_SHA_256   
     SSTP_CERT_INFO_1              sstpCertDetails;
  
 }SSTP_CONFIG_PARAMS_1, *PSSTP_CONFIG_PARAMS_1;
  
 typedef struct _MPRAPI_TUNNEL_CONFIG_PARAMS_1 {
  
     IKEV2_CONFIG_PARAMS_1         IkeConfigParams;
  
     PPTP_CONFIG_PARAMS_1          PptpConfigParams;
  
     L2TP_CONFIG_PARAMS_1          L2tpConfigParams;
  
     SSTP_CONFIG_PARAMS_1          SstpConfigParams;
  
 }MPRAPI_TUNNEL_CONFIG_PARAMS_1, *PMPRAPI_TUNNEL_CONFIG_PARAMS_1;
  
 typedef struct _MPRAPI_TUNNEL_CONFIG_PARAMS_2 {
  
     IKEV2_CONFIG_PARAMS_2         IkeConfigParams;
  
     PPTP_CONFIG_PARAMS_1          PptpConfigParams;
  
     L2TP_CONFIG_PARAMS_1          L2tpConfigParams;
  
     SSTP_CONFIG_PARAMS_1          SstpConfigParams;
  
 }MPRAPI_TUNNEL_CONFIG_PARAMS_2, *PMPRAPI_TUNNEL_CONFIG_PARAMS_2;
  
 typedef struct _MPRAPI_TUNNEL_CONFIG_PARAMS_3 {
  
     IKEV2_CONFIG_PARAMS_3         IkeConfigParams;
  
     PPTP_CONFIG_PARAMS_1          PptpConfigParams;
  
     L2TP_CONFIG_PARAMS_2          L2tpConfigParams;
  
     SSTP_CONFIG_PARAMS_1          SstpConfigParams;
  
 }MPRAPI_TUNNEL_CONFIG_PARAMS_3, *PMPRAPI_TUNNEL_CONFIG_PARAMS_3;
  
 // MPR_SERVER_EX structure are redified in this IDL to make use of versioning:
 // All the Versions of MPR_SERVER_EX will be defined here in RPC usable format:
  
 typedef struct _MPR_SERVER_EX_1
 {
     MPRAPI_OBJECT_HEADER_IDL        Header;
     BOOL                            fLanOnlyMode;
     DWORD                           dwUpTime;
     DWORD                           dwTotalPorts;
     DWORD                           dwPortsInUse; 
     DWORD                           Reserved; // Added so that the structure is 8 byte aligned
     MPRAPI_TUNNEL_CONFIG_PARAMS_1   ConfigParams;
  
 }MPR_SERVER_EX_1, *PMPR_SERVER_EX_1;
  
 typedef struct _MPR_SERVER_EX_2
 {
     MPRAPI_OBJECT_HEADER_IDL        Header;
     BOOL                            fLanOnlyMode;
     DWORD                           dwUpTime;
     DWORD                           dwTotalPorts;
     DWORD                           dwPortsInUse; 
     DWORD                           Reserved; // Added so that the structure is 8 byte aligned
     MPRAPI_TUNNEL_CONFIG_PARAMS_2   ConfigParams;
 }MPR_SERVER_EX_2, *PMPR_SERVER_EX_2;
  
 typedef struct _MPR_SERVER_EX_3
 {
     MPRAPI_OBJECT_HEADER_IDL        Header;
     BOOL                            fLanOnlyMode;
     DWORD                           dwUpTime;
     DWORD                           dwTotalPorts;
     DWORD                           dwPortsInUse; 
     DWORD                           Reserved; // Added so that the structure is 8 byte aligned
     MPRAPI_TUNNEL_CONFIG_PARAMS_3   ConfigParams;
 }MPR_SERVER_EX_3, *PMPR_SERVER_EX_3;
  
 typedef union _MPR_SERVER_EX_IDL switch (UCHAR  revision) ServerConfigObject
 {
     case 1:
         MPR_SERVER_EX_1     ServerConfig1;
     case 2:
         MPR_SERVER_EX_2     ServerConfig2;
     case 3:
         MPR_SERVER_EX_3     ServerConfig3;
 }MPR_SERVER_EX_IDL;
  
 typedef struct _MPR_SERVER_EX_IDL *PMPR_SERVER_EX_IDL;
  
  
 typedef struct _MPR_SERVER_SET_CONFIG_EX_1
 {
     MPRAPI_OBJECT_HEADER_IDL        Header;
     DWORD                           setConfigForProtocols;
     MPRAPI_TUNNEL_CONFIG_PARAMS_1   ConfigParams;
  
 }MPR_SERVER_SET_CONFIG_EX_1, *PMPR_SERVER_SET_CONFIG_EX_1;
  
 typedef struct _MPR_SERVER_SET_CONFIG_EX_2
 {
     MPRAPI_OBJECT_HEADER_IDL        Header;
     DWORD                           setConfigForProtocols;
     MPRAPI_TUNNEL_CONFIG_PARAMS_2   ConfigParams;
  
 }MPR_SERVER_SET_CONFIG_EX_2, *PMPR_SERVER_SET_CONFIG_EX_2;
  
 typedef struct _MPR_SERVER_SET_CONFIG_EX_3
 {
     MPRAPI_OBJECT_HEADER_IDL        Header;
     DWORD                           setConfigForProtocols;
     MPRAPI_TUNNEL_CONFIG_PARAMS_3   ConfigParams;
  
 }MPR_SERVER_SET_CONFIG_EX_3, *PMPR_SERVER_SET_CONFIG_EX_3;
  
 typedef union _MPR_SERVER_SET_CONFIG_EX_IDL switch (UCHAR   revision) ServerSetConfigObject
 {
     case 1:
         MPR_SERVER_SET_CONFIG_EX_1      ServerSetConfig1;
     case 2:
         MPR_SERVER_SET_CONFIG_EX_2      ServerSetConfig2;
     case 3:
         MPR_SERVER_SET_CONFIG_EX_3      ServerSetConfig3;
 }MPR_SERVER_SET_CONFIG_EX_IDL;
  
  
 typedef struct _MPR_SERVER_SET_CONFIG_EX_IDL *PMPR_SERVER_SET_CONFIG_EX_IDL;
  
  
 typedef struct _RAS_UPDATE_CONNECTION_1_IDL
     {
     MPRAPI_OBJECT_HEADER_IDL Header;
     DWORD dwIfIndex;
     WCHAR wszRemoteEndpointAddress[ 65 ];
     } RAS_UPDATE_CONNECTION_1_IDL;
  
 typedef struct _RAS_UPDATE_CONNECTION_1_IDL *PRAS_UPDATE_CONNECTION_1_IDL;
  
 typedef union _RAS_UPDATE_CONNECTION_IDL switch (UCHAR revision) UpdateConnection
 {
     case 1: // MPR_SERVER_UPDATE_CONNECTION_EX with version 1: //(MPRAPI_RAS_UPDATE_CONNECTION_OBJECT_REVISION_1)
         RAS_UPDATE_CONNECTION_1_IDL     UpdateConnection1;
     // New ones update here
 }RAS_UPDATE_CONNECTION_IDL;
  
 typedef struct _RAS_UPDATE_CONNECTION_IDL *PRAS_UPDATE_CONNECTION_IDL;
  
 typedef struct _DIM_INTERFACE_CONTAINER
 {
     DWORD   fGetInterfaceInfo;
     DWORD   dwInterfaceInfoSize;
     [size_is(dwInterfaceInfoSize)]  LPBYTE pInterfaceInfo;
     DWORD   fGetGlobalInfo;
     DWORD  dwGlobalInfoSize;
     [size_is(dwGlobalInfoSize)]     LPBYTE pGlobalInfo;
 }
 DIM_INTERFACE_CONTAINER, *PDIM_INTERFACE_CONTAINER;
  
  
 typedef struct _RTR_TOC_ENTRY
 {
     ULONG    InfoType;
     ULONG    InfoSize;
     ULONG    Count;
     ULONG    Offset;
 }
 RTR_TOC_ENTRY, *PRTR_TOC_ENTRY;
  
  
 typedef struct _RTR_INFO_BLOCK_HEADER
 {
     ULONG      Version;    
     ULONG      Size;    
     ULONG      TocEntriesCount;
     RTR_TOC_ENTRY   TocEntry[1];     //1 is a placeholder for TocEntriesCount    
 } 
 RTR_INFO_BLOCK_HEADER, *PRTR_INFO_BLOCK_HEADER;
  
  
  
  
 typedef struct _FILTER_INFO
 {
     DWORD   dwSrcAddr;
     DWORD   dwSrcMask;
     DWORD   dwDstAddr;
     DWORD   dwDstMask;
     DWORD   dwProtocol;
     DWORD   fLateBound;
     WORD    wSrcPort;
     WORD    wDstPort;
 }
 FILTER_INFO, *PFILTER_INFO;
  
  
 typedef struct _FILTER_DESCRIPTOR
 {
     DWORD           dwVersion;
     DWORD           dwNumFilters;
     FORWARD_ACTION  faDefaultAction;
     FILTER_INFO     fiFilter[1];     //1 is a placeholder for dwNumFilters
 }
 FILTER_DESCRIPTOR, *PFILTER_DESCRIPTOR;
  
  
 typedef struct _FILTER_INFO_V6
 {
     BYTE        ipv6SrcAddr[16];
     DWORD       dwSrcPrefixLength;
     BYTE        ipv6DstAddr[16];
     DWORD       dwDstPrefixLength;
     DWORD       dwProtocol;
     DWORD       fLateBound;
     WORD        wSrcPort;
     WORD        wDstPort;
 }
 FILTER_INFO_V6, *PFILTER_INFO_V6;
  
  
 typedef struct _FILTER_DESCRIPTOR_V6
 {
     DWORD           dwVersion;
     DWORD           dwNumFilters;
     FORWARD_ACTION  faDefaultAction;
     FILTER_INFO_V6  fiFilter[1];     //1 is a placeholder for dwNumFilters
 }
 FILTER_DESCRIPTOR_V6, *PFILTER_DESCRIPTOR_V6;
  
  
 typedef struct _GLOBAL_INFO
 {
     IN OUT BOOL     bFilteringOn;
     IN OUT DWORD    dwLoggingLevel;
 }
 GLOBAL_INFO, *PGLOBAL_INFO;
  
 typedef struct _INTERFACE_ROUTE_INFO
 {
     union
     {
         struct
         { // IPv4 specific 
             DWORD       dwRtInfoDest;
             DWORD       dwRtInfoMask;
             DWORD       dwRtInfoPolicy;
             DWORD       dwRtInfoNextHop;
             DWORD       dwRtInfoAge;
             DWORD       dwRtInfoNextHopAS;
             DWORD       dwRtInfoMetric1;
             DWORD       dwRtInfoMetric2;
             DWORD       dwRtInfoMetric3;
         };
         struct
         { // IPv6 specific
             IN6_ADDR    DestinationPrefix;
             DWORD       DestPrefixLength;
             IN6_ADDR    NextHopAddress;
             ULONG       ValidLifeTime;
             DWORD       Flags; 
             ULONG        Metric;
         };        
     };
     DWORD       dwRtInfoIfIndex;
     DWORD       dwRtInfoType;
     DWORD       dwRtInfoProto;
     DWORD       dwRtInfoPreference;
     DWORD       dwRtInfoViewSet;
     BOOL        bV4; 
 }
 INTERFACE_ROUTE_INFO, *PINTERFACE_ROUTE_INFO;
  
  
  
 typedef struct _PROTOCOL_METRIC
 {
     IN OUT DWORD   dwProtocolId;
     IN OUT DWORD   dwMetric;
 }
 PROTOCOL_METRIC, *PPROTOCOL_METRIC;
  
  
 typedef struct _PRIORITY_INFO
 {
     IN OUT DWORD           dwNumProtocols;
     IN OUT PROTOCOL_METRIC ppmProtocolMetric[1];   
 }
 PRIORITY_INFO, *PPRIORITY_INFO;
  
  
 typedef struct _PROTOCOL_METRIC_EX
 {
     IN OUT DWORD   dwProtocolId;
     IN OUT DWORD   dwSubProtocolId;
     IN OUT DWORD   dwMetric;
 }PROTOCOL_METRIC_EX, *PPROTOCOL_METRIC_EX;
  
 typedef struct _PRIORITY_INFO_EX
 {
     IN OUT DWORD           dwNumProtocols;
     IN OUT PROTOCOL_METRIC_EX ppmProtocolMetric[1];
 }PRIORITY_INFO_EX, *PPRIORITY_INFO_EX;
  
  
 typedef struct _RTR_DISC_INFO
 {
     IN OUT WORD             wMaxAdvtInterval;
     IN OUT WORD             wMinAdvtInterval;
     IN OUT WORD             wAdvtLifetime;
     IN OUT BOOL             bAdvertise;
     IN OUT LONG             lPrefLevel;
 }
 RTR_DISC_INFO, *PRTR_DISC_INFO;
  
  
 #define MAX_GROUP_LEN  64
  
  
 typedef struct _MCAST_HBEAT_INFO
 {
     WCHAR       pwszGroup[MAX_GROUP_LEN];
     BOOL        bActive;
     ULONG       ulDeadInterval;
     BYTE        byProtocol;
     WORD        wPort;
 }
 MCAST_HBEAT_INFO, *PMCAST_HBEAT_INFO;
  
  
 typedef struct 
 {
     DWORD dwTtl;
     DWORD dwRateLimit;
 } 
 MIB_MCAST_LIMIT_ROW,*PMIB_MCAST_LIMIT_ROW;
  
  
 typedef struct _IPINIP_CONFIG_INFO
 {
     DWORD   dwRemoteAddress;
     DWORD   dwLocalAddress;
     BYTE    byTtl;
 }
 IPINIP_CONFIG_INFO, *PIPINIP_CONFIG_INFO;
  
  
  
 typedef struct _INTERFACE_STATUS_INFO
 {
     IN  OUT DWORD   dwAdminStatus;
 }
 INTERFACE_STATUS_INFO, *PINTERFACE_STATUS_INFO;
  
  
  
 typedef struct _DIM_MIB_ENTRY_CONTAINER
 {
     DWORD  dwMibInEntrySize;
     [size_is(dwMibInEntrySize)] LPBYTE pMibInEntry;
     DWORD  dwMibOutEntrySize;
     [size_is(dwMibOutEntrySize)] LPBYTE pMibOutEntry;
 } 
 DIM_MIB_ENTRY_CONTAINER, *PDIM_MIB_ENTRY_CONTAINER;
  
  
 typedef struct _MIB_IPFORWARDROW 
 {
     DWORD dwForwardDest;
     DWORD dwForwardMask;
     DWORD dwForwardPolicy;
     DWORD dwForwardNextHop;
     DWORD dwForwardIfIndex;
     union { 
         DWORD dwForwardType;              
         MIB_IPFORWARD_TYPE ForwardType; 
     };
     union { 
         DWORD dwForwardProto;             
         MIB_IPFORWARD_PROTO ForwardProto;  
     };
     DWORD dwForwardAge;
     DWORD dwForwardNextHopAS;
     DWORD dwForwardMetric1;
     DWORD dwForwardMetric2;
     DWORD dwForwardMetric3;
     DWORD dwForwardMetric4;
     DWORD dwForwardMetric5;
 } MIB_IPFORWARDROW, 
   *PMIB_IPFORWARDROW;
  
 typedef struct _MIB_IPDESTROW
 {
     MIB_IPFORWARDROW  ForwardRow;
     DWORD             dwForwardPreference;
     DWORD             dwForwardViewSet;
 }MIB_IPDESTROW, *PMIB_IPDESTROW;
  
  
 typedef struct _MIB_IPDESTTABLE
 {
     DWORD             dwNumEntries;
     MIB_IPDESTROW     table[1];        //1, placeholder for dwNumEntries
 }MIB_IPDESTTABLE, *PMIB_IPDESTTABLE;
  
  
  
 typedef struct _MIB_ROUTESTATE
 {
     BOOL        bRoutesSetToStack;
 }MIB_ROUTESTATE, *PMIB_ROUTESTATE;
  
  
  
 typedef struct _MIB_BEST_IF {
     DWORD dwDestAddr;
     DWORD dwIfIndex;
 } MIB_BEST_IF, *PMIB_BEST_IF;
  
  
  
 typedef struct {
     DWORD dwGroupAddress;
     DWORD dwGroupMask;
 } MIB_BOUNDARYROW, 
 *PMIB_BOUNDARYROW;
  
  
  
 typedef struct _MIBICMPSTATS {
     DWORD dwMsgs;
     DWORD dwErrors;
     DWORD dwDestUnreachs;
     DWORD dwTimeExcds;
     DWORD dwParmProbs;
     DWORD dwSrcQuenchs;
     DWORD dwRedirects;
     DWORD dwEchos;
     DWORD dwEchoReps;
     DWORD dwTimestamps;
     DWORD dwTimestampReps;
     DWORD dwAddrMasks;
     DWORD dwAddrMaskReps;
 } MIBICMPSTATS;
  
  
  
 typedef struct _MIBICMPINFO {
     MIBICMPSTATS icmpInStats;
     MIBICMPSTATS icmpOutStats;
 } MIBICMPINFO;
  
  
 typedef struct _MIB_ICMP {
     MIBICMPINFO stats;
 } MIB_ICMP, 
 *PMIB_ICMP;
  
  
 typedef struct _MIB_IFNUMBER {
     DWORD dwValue;
 } MIB_IFNUMBER, 
 *PMIB_IFNUMBER;
  
  
 typedef struct _MIB_IFROW {
     WCHAR wszName[256]; 
     DWORD dwIndex;
     DWORD dwType;
     DWORD dwMtu;
     DWORD dwSpeed;
     DWORD dwPhysAddrLen;
     BYTE bPhysAddr[8];
     DWORD dwAdminStatus;
     DWORD dwOperStatus;
     DWORD dwLastChange;
     DWORD dwInOctets;
     DWORD dwInUcastPkts;
     DWORD dwInNUcastPkts;
     DWORD dwInDiscards;
     DWORD dwInErrors;
     DWORD dwInUnknownProtos;
     DWORD dwOutOctets;
     DWORD dwOutUcastPkts;
     DWORD dwOutNUcastPkts;
     DWORD dwOutDiscards;
     DWORD dwOutErrors;
     DWORD dwOutQLen;
     DWORD dwDescrLen;
     BYTE bDescr[256];     // 256, placeholder for dwDescrLen 
 } MIB_IFROW;
  
  
 typedef struct _MIB_IFSTATUS {
     DWORD dwIfIndex;
     DWORD dwAdminStatus;
     DWORD dwOperationalStatus;
     BOOL bMHbeatActive;
     BOOL bMHbeatAlive;
 } MIB_IFSTATUS, 
 *PMIB_IFSTATUS;
  
  
 typedef struct _MIB_IFTABLE {
     DWORD dwNumEntries;
     MIB_IFROW table[1];     //1, placeholder for dwNumEntries
 } MIB_IFTABLE, *PMIB_IFTABLE;
  
  
  
 typedef struct _MIB_IPADDRROW {
     DWORD dwAddr;
     DWORD dwIndex;
     DWORD dwMask;
     DWORD dwBCastAddr;
     DWORD dwReasmSize;
     unsigned short unused1;
     unsigned short wType;
 } MIB_IPADDRROW, 
 *PMIB_IPADDRROW;
  
  
  
 typedef struct _MIB_IPADDRTABLE {
     DWORD dwNumEntries;
     MIB_IPADDRROW table[1];     //1, placeholder for dwNumEntries     
 } MIB_IPADDRTABLE, 
 *PMIB_IPADDRTABLE;
  
  
  
 typedef struct _MIB_IPFORWARDNUMBER {
     DWORD dwValue;
 } MIB_IPFORWARDNUMBER, 
 *PMIB_IPFORWARDNUMBER;
  
  
  
  
  
 typedef struct _MIB_IPFORWARDTABLE {
     DWORD dwNumEntries;
     MIB_IPFORWARDROW table[1];     //1, placeholder for dwNumEntries
     BYTE reserved[8];
 } MIB_IPFORWARDTABLE, 
 *PMIB_IPFORWARDTABLE;
  
  
  
 typedef struct {
     DWORD dwIfIndex;
     DWORD dwGroupAddress;
     DWORD dwGroupMask;
     DWORD dwStatus;
 } MIB_IPMCAST_BOUNDARY, 
 *PMIB_IPMCAST_BOUNDARY;
  
  
  
 typedef struct {
     DWORD dwNumEntries;
     MIB_IPMCAST_BOUNDARY table[1];     //1, placeholder for dwNumEntries
 } MIB_IPMCAST_BOUNDARY_TABLE, 
 *PMIB_IPMCAST_BOUNDARY_TABLE;
  
  
  
 typedef struct _MIB_IPMCAST_GLOBAL {
     DWORD dwEnable;
 } MIB_IPMCAST_GLOBAL, 
 *PMIB_IPMCAST_GLOBAL;
  
  
  
 typedef struct _MIB_IPMCAST_IF_ENTRY 
 {
     DWORD dwIfIndex;
     DWORD dwTtl;
     DWORD dwProtocol;
     DWORD dwRateLimit;
     ULONG ulInMcastOctets;
     ULONG ulOutMcastOctets;
 } 
 MIB_IPMCAST_IF_ENTRY, *PMIB_IPMCAST_IF_ENTRY;
  
  
  
 typedef struct _MIB_IPMCAST_IF_TABLE {
     DWORD dwNumEntries;
     MIB_IPMCAST_IF_ENTRY table[1];     //1, placeholder for dwNumEntries
 } MIB_IPMCAST_IF_TABLE, 
 *PMIB_IPMCAST_IF_TABLE;
  
  
  
 typedef struct _MIB_IPMCAST_OIF {
     DWORD dwOutIfIndex;
     DWORD dwNextHopAddr;
     PVOID pvReserved;
     DWORD dwReserved;
 } MIB_IPMCAST_OIF, 
 *PMIB_IPMCAST_OIF;
  
  
  
 typedef struct _MIB_IPMCAST_MFE {
     DWORD dwGroup;
     DWORD dwSource;
     DWORD dwSrcMask;
     DWORD dwUpStrmNgbr;
     DWORD dwInIfIndex;
     DWORD dwInIfProtocol;
     DWORD dwRouteProtocol;
     DWORD dwRouteNetwork;
     DWORD dwRouteMask;
     ULONG ulUpTime;
     ULONG ulExpiryTime;
     ULONG ulTimeOut;
     ULONG ulNumOutIf;
     DWORD fFlags;
     DWORD dwReserved;
     MIB_IPMCAST_OIF rgmioOutInfo[1];     //1, placeholder for ulNumOutIf
 } MIB_IPMCAST_MFE, 
 *PMIB_IPMCAST_MFE;
  
  
  
 typedef struct _MIB_IPMCAST_OIF_STATS {
     DWORD dwOutIfIndex;
     DWORD dwNextHopAddr;
     PVOID pvDialContext;
     ULONG ulTtlTooLow;
     ULONG ulFragNeeded;
     ULONG ulOutPackets;
     ULONG ulOutDiscards;
 } MIB_IPMCAST_OIF_STATS, 
 *PMIB_IPMCAST_OIF_STATS;
  
  
  
 typedef struct _MIB_IPMCAST_MFE_STATS {
     DWORD dwGroup;
     DWORD dwSource;
     DWORD dwSrcMask;
     DWORD dwUpStrmNgbr;
     DWORD dwInIfIndex;
     DWORD dwInIfProtocol;
     DWORD dwRouteProtocol;
     DWORD dwRouteNetwork;
     DWORD dwRouteMask;
     ULONG ulUpTime;
     ULONG ulExpiryTime;
     ULONG ulNumOutIf;
     ULONG ulInPkts;
     ULONG ulInOctets;
     ULONG ulPktsDifferentIf;
     ULONG ulQueueOverflow;
     MIB_IPMCAST_OIF_STATS rgmiosOutStats[1];     //1, placeholder for ulNumOutIf
 } MIB_IPMCAST_MFE_STATS, 
 *PMIB_IPMCAST_MFE_STATS;
  
  
  
 typedef struct {
     DWORD dwGroupAddress;
     DWORD dwGroupMask;
     WCHAR snNameBuffer[256];
     DWORD dwStatus;
     BYTE  reserved[492]; 
  
 } MIB_IPMCAST_SCOPE, 
 *PMIB_IPMCAST_SCOPE;
  
  
  
 typedef struct _MIB_IPNETROW {
     DWORD dwIndex;
     DWORD dwPhysAddrLen;
     BYTE bPhysAddr[8];
     DWORD dwAddr;
     DWORD dwType;
 } MIB_IPNETROW, 
 *PMIB_IPNETROW;
  
  
  
 typedef struct _MIB_IPNETTABLE {
     DWORD dwNumEntries;
     MIB_IPNETROW table[1];     //1, placeholder for dwNumEntries
     BYTE reserved[8];
 } MIB_IPNETTABLE, 
 *PMIB_IPNETTABLE;
  
  
  
 typedef struct _MIB_IPSTATS {
     union {
         DWORD dwForwarding;
         MIB_IPSTATS_FORWARDING Forwarding ;
     };
     DWORD dwDefaultTTL;
     DWORD dwInReceives;
     DWORD dwInHdrErrors;
     DWORD dwInAddrErrors;
     DWORD dwForwDatagrams;
     DWORD dwInUnknownProtos;
     DWORD dwInDiscards;
     DWORD dwInDelivers;
     DWORD dwOutRequests;
     DWORD dwRoutingDiscards;
     DWORD dwOutDiscards;
     DWORD dwOutNoRoutes;
     DWORD dwReasmTimeout;
     DWORD dwReasmReqds;
     DWORD dwReasmOks;
     DWORD dwReasmFails;
     DWORD dwFragOks;
     DWORD dwFragFails;
     DWORD dwFragCreates;
     DWORD dwNumIf;
     DWORD dwNumAddr;
     DWORD dwNumRoutes;
 } MIB_IPSTATS, 
 *PMIB_IPSTATS;
  
  
  
 typedef struct _MIB_MFE_STATS_TABLE {
     DWORD dwNumEntries;
     MIB_IPMCAST_MFE_STATS table[1];     //1, placeholder for dwNumEntries
 } MIB_MFE_STATS_TABLE, 
 *PMIB_MFE_STATS_TABLE;
  
  
  
 typedef struct _MIB_MFE_TABLE {
     DWORD dwNumEntries;
     MIB_IPMCAST_MFE table[1];    //1, placeholder for dwNumEntries
 } MIB_MFE_TABLE, 
 *PMIB_MFE_TABLE;
  
  
  
 typedef struct _MIB_OPAQUE_INFO {
     DWORD dwId;
     union {
         ULONGLONG ullAlign;
         BYTE rgbyData[1];
     };
 } MIB_OPAQUE_INFO, 
 *PMIB_OPAQUE_INFO;
  
  
  
 typedef struct _MIB_OPAQUE_QUERY {
     DWORD dwVarId;
     DWORD rgdwVarIndex[1];
 } MIB_OPAQUE_QUERY, 
 *PMIB_OPAQUE_QUERY;
  
  
  
 typedef struct _MIB_PROXYARP {
     DWORD dwAddress;
     DWORD dwMask;
     DWORD dwIfIndex;
 } MIB_PROXYARP, 
 *PMIB_PROXYARP;
  
  
  
 typedef struct _MIB_TCPROW {
     union {
         DWORD dwState;       
         MIB_TCP_STATE State;
     };
     DWORD dwLocalAddr;
     DWORD dwLocalPort;
     DWORD dwRemoteAddr;
     DWORD dwRemotePort;
 } MIB_TCPROW, 
 *PMIB_TCPROW;
  
  
  
 typedef struct _MIB_TCPSTATS {
     union {
         DWORD dwRtoAlgorithm;
         TCP_RTO_ALGORITHM RtoAlgorithm; 
     };
     DWORD dwRtoMin;
     DWORD dwRtoMax;
     DWORD dwMaxConn;
     DWORD dwActiveOpens;
     DWORD dwPassiveOpens;
     DWORD dwAttemptFails;
     DWORD dwEstabResets;
     DWORD dwCurrEstab;
     DWORD dwInSegs;
     DWORD dwOutSegs;
     DWORD dwRetransSegs;
     DWORD dwInErrs;
     DWORD dwOutRsts;
     DWORD dwNumConns;
 } MIB_TCPSTATS, 
 *PMIB_TCPSTATS;
  
  
  
 typedef struct _MIB_TCPTABLE {
     DWORD dwNumEntries;
     MIB_TCPROW table[1];     //1, placeholder for dwNumEntries
     BYTE reserved[8];
 } MIB_TCPTABLE, 
 *PMIB_TCPTABLE;
  
  
  
 typedef struct _MIB_UDPROW {
     DWORD dwLocalAddr;
     DWORD dwLocalPort;
 } MIB_UDPROW, 
 *PMIB_UDPROW;
  
  
  
 typedef struct _MIB_UDPSTATS {
     DWORD dwInDatagrams;
     DWORD dwNoPorts;
     DWORD dwInErrors;
     DWORD dwOutDatagrams;
     DWORD dwNumAddrs;
 } MIB_UDPSTATS, 
 *PMIB_UDPSTATS;
  
  
  
 typedef struct _MIB_UDPTABLE {
     DWORD dwNumEntries;
     MIB_UDPROW table[1];     //1, placeholder for dwNumEntries
     BYTE reserved[8];
 } MIB_UDPTABLE, 
 *PMIB_UDPTABLE;
  
  
  
 typedef struct MPR_SERVER_0 
 {
     BOOL  fLanOnlyMode;  
     DWORD dwUpTime;  
     DWORD dwTotalPorts;  
     DWORD dwPortsInUse;
 }
 MPR_SERVER_0,*PMPR_SERVER_0;
  
  
  
 typedef struct MPR_SERVER_1 
 {  
     DWORD dwNumPptpPorts;  
     DWORD dwPptpPortFlags; 
     DWORD dwNumL2tpPorts;   
     DWORD dwL2tpPortFlags;   
 }
 MPR_SERVER_1,*PMPR_SERVER_1;
  
  
  
 typedef struct MPR_SERVER_2
 {  
     DWORD    dwNumPptpPorts;  
     DWORD    dwPptpPortFlags; 
     DWORD    dwNumL2tpPorts;   
     DWORD    dwL2tpPortFlags;   
     DWORD    dwNumSstpPorts;
     DWORD    dwSstpPortFlags;
 }
 MPR_SERVER_2,*PMPR_SERVER_2;
  
  
  
 typedef struct _PPP_NBFCP_INFO 
 {  
     DWORD dwError;  
     WCHAR wszWksta[17];
 } 
 PPP_NBFCP_INFO;
  
  
  
 typedef struct _PPP_IPCP_INFO 
 {  
     DWORD dwError; 
     WCHAR wszAddress[16];  
     WCHAR wszRemoteAddress[16];
 }
 PPP_IPCP_INFO;
  
  
  
 typedef struct _PPP_IPCP_INFO2 
 {  
     DWORD dwError;  
     WCHAR wszAddress[16];  
     WCHAR wszRemoteAddress[16];  
     DWORD dwOptions;  
     DWORD dwRemoteOptons;
 } 
 PPP_IPCP_INFO2;
  
  
  
 typedef struct _PPP_IPXCP_INFO 
 {  
     DWORD    dwError;  
     WCHAR    wszAddress[16];
 }
 PPP_IPXCP_INFO;
  
  
  
 typedef struct _PPP_IPV6CP_INFO 
 {  
     DWORD       dwVersion;  
     DWORD       dwSize;  
     DWORD       dwError;  
     BYTE        bInterfaceIdentifier[8];  
     BYTE        bRemoteInterfaceIdentifier[8];  
     DWORD       dwOptions;  
     DWORD       dwRemoteOptions;  
     BYTE        bPrefix[8];  
     DWORD       dwPrefixLength;
 } 
 PPP_IPV6_CP_INFO,*PPPP_IPV6_CP_INFO;
  
  
  
 typedef struct _PPP_ATCP_INFO 
 {  
     DWORD    dwError;  
     WCHAR    wszAddress[33];
 }
 PPP_ATCP_INFO;
  
  
  
 typedef struct _PPP_CCP_INFO 
 {  
     DWORD dwError;  
     DWORD dwCompressionAlgorithm;
     DWORD dwOptions; 
     DWORD dwRemoteCompressionAlgorithm;
     DWORD dwRemoteOptions;
 }
 PPP_CCP_INFO;
  
  
  
 typedef struct _PPP_LCP_INFO 
 {  
     DWORD dwError;  
     DWORD dwAuthenticationProtocol;  
     DWORD dwAuthenticationData;
     DWORD dwRemoteAuthenticationProtocol;
     DWORD dwRemoteAuthenticationData;
     DWORD dwTerminateReason; 
     DWORD dwRemoteTerminateReason;
     DWORD dwOptions;
     DWORD dwRemoteOptions;
     DWORD dwEapTypeId;  
     DWORD dwRemoteEapTypeId;
 }
 PPP_LCP_INFO;
  
  
  
 typedef struct _PPP_INFO 
 {  
     PPP_NBFCP_INFO nbf;  
     PPP_IPCP_INFO  ip;  
     PPP_IPXCP_INFO ipx;  
     PPP_ATCP_INFO  at;
 } 
 PPP_INFO;
  
  
  
 typedef struct _PPP_INFO_2 
 {  
     PPP_NBFCP_INFO    nbf;
     PPP_IPCP_INFO2    ip;
     PPP_IPXCP_INFO    ipx;
     PPP_ATCP_INFO     at;
     PPP_CCP_INFO      ccp; 
     PPP_LCP_INFO      lcp;
 }
 PPP_INFO_2;
  
  
  
 typedef struct _PPP_INFO_3 
 {  
     PPP_NBFCP_INFO    nbf;  
     PPP_IPCP_INFO2    ip;  
     PPP_IPV6_CP_INFO  ipv6;  
     PPP_CCP_INFO      ccp;  
     PPP_LCP_INFO      lcp;
 } 
 PPP_INFO_3;
  
  
  
 typedef struct _RASI_PORT_0 
 {  
     DWORD              dwPort;  
     DWORD              dwConnection;  
     RAS_PORT_CONDITION dwPortCondition;  
     DWORD              dwTotalNumberOfCalls;  
     DWORD              dwConnectDuration;  
     WCHAR              wszPortName[17];  
     WCHAR              wszMediaName[17];  
     WCHAR              wszDeviceName[129];  
     WCHAR              wszDeviceType[17];
 }
 RASI_PORT_0,*PRASI_PORT_0;
  
  
  
 typedef struct _RASI_PORT_1 
 {  
     DWORD                  dwPort;  
     DWORD                  dwConnection;  
     RAS_HARDWARE_CONDITION dwHardwareCondition;  
     DWORD                  dwLineSpeed;  
     DWORD                  dwBytesXmited;  
     DWORD                  dwBytesRcved;  
     DWORD                  dwFramesXmited;  
     DWORD                  dwFramesRcved;  
     DWORD                  dwCrcErr;  
     DWORD                  dwTimeoutErr;  
     DWORD                  dwAlignmentErr;  
     DWORD                  dwHardwareOverrunErr;  
     DWORD                  dwFramingErr;  
     DWORD                  dwBufferOverrunErr;  
     DWORD                  dwCompressionRatioIn;  
     DWORD                  dwCompressionRatioOut;
 } 
 RASI_PORT_1,*PRASI_PORT_1;
  
  
  
 typedef struct _RASI_CONNECTION_0 
 {  
     DWORD                 dwConnection;  
     DWORD                 dwInterface;  
     DWORD                 dwConnectDuration;  
     ROUTER_INTERFACE_TYPE dwInterfaceType;  
     DWORD                 dwConnectionFlags;  
     WCHAR                 wszInterfaceName[257];  
     WCHAR                 wszUserName[257];  
     WCHAR                 wszLogonDomain[16];  
     WCHAR                 wszRemoteComputer[17];
 }
 RASI_CONNECTION_0,*PRASI_CONNECTION_0;
  
  
  
 typedef struct RASI_CONNECTION_1 
 {  
     DWORD    dwConnection;  
     DWORD    dwInterface;  
     PPP_INFO PppInfo;  
     DWORD    dwBytesXmited;  
     DWORD    dwBytesRcved;  
     DWORD    dwFramesXmited;  
     DWORD    dwFramesRcved;  
     DWORD    dwCrcErr;  
     DWORD    dwTimeoutErr;  
     DWORD    dwAlignmentErr;  
     DWORD    dwHardwareOverrunErr;  
     DWORD    dwFramingErr;  
     DWORD    dwBufferOverrunErr;  
     DWORD    dwCompressionRatioIn;  
     DWORD    dwCompressionRatioOut;
 }
 RASI_CONNECTION_1,*PRASI_CONNECTION_1;
  
  
  
 typedef struct _RASI_CONNECTION_2 
 {  
     DWORD                 dwConnection;  
     WCHAR                 wszUserName[257];  
     ROUTER_INTERFACE_TYPE dwInterfaceType;  
     GUID                  guid;  
     PPP_INFO_2            PppInfo2;
 } 
 RASI_CONNECTION_2,*PRASI_CONNECTION_2;
  
  
  
 typedef struct _RASI_CONNECTION_3 
 {  
     DWORD                 dwVersion;  
     DWORD                 dwSize;  
     DWORD                 dwConnection;  
     WCHAR                 wszUserName[257];  
     ROUTER_INTERFACE_TYPE dwInterfaceType;  
     GUID                  guid;  
     PPP_INFO_3            PppInfo3;  
     RAS_QUARANTINE_STATE  rasQuarState;  
     FILETIME              timer;
 }
 RASI_CONNECTION_3,*PRASI_CONNECTION_3;
  
  
  
 typedef struct _MPRI_INTERFACE_0 
 { 
     WCHAR                   wszInterfaceName[257];  
     DWORD                   dwInterface;  
     BOOL                    fEnabled;  
     ROUTER_INTERFACE_TYPE   dwIfType;  
     ROUTER_CONNECTION_STATE dwConnectionState;  
     DWORD                   fUnReachabilityReasons;  
     DWORD                   dwLastError;
 }
 MPRI_INTERFACE_0,*PMPRI_INTERFACE_0;
  
  
  
 typedef struct _MPRI_INTERFACE_1 
 {  
     WCHAR                   wszInterfaceName[257];  
     DWORD                   dwInterface;  
     BOOL                    fEnabled;  
     ROUTER_INTERFACE_TYPE   dwIfType;  
     ROUTER_CONNECTION_STATE dwConnectionState;  
     DWORD                   fUnReachabilityReasons;  
     DWORD                   dwLastError;  
     LPWSTR                  lpwsDialoutHoursRestriction;
 }
 MPRI_INTERFACE_1, *PMPRI_INTERFACE_1;
  
  
  
 typedef struct _MPRI_INTERFACE_2 
 {  
     WCHAR                   wszInterfaceName[257];  
     DWORD                   dwInterface;  
     BOOL                    fEnabled;  
     ROUTER_INTERFACE_TYPE   dwIfType;  
     ROUTER_CONNECTION_STATE dwConnectionState;  
     DWORD                   fUnReachabilityReasons;  
     DWORD                   dwLastError;  
     DWORD                   dwfOptions;  
     WCHAR                   szLocalPhoneNumber[129];  
     PWCHAR                  szAlternates;  
     DWORD                   ipaddr;  
     DWORD                   ipaddrDns;  
     DWORD                   ipaddrDnsAlt;  
     DWORD                   ipaddrWins;  
     DWORD                   ipaddrWinsAlt;  
     DWORD                   dwfNetProtocols;  
     WCHAR                   szDeviceType[17];  
     WCHAR                   szDeviceName[129];  
     WCHAR                   szX25PadType[33];  
     WCHAR                   szX25Address[201];  
     WCHAR                   szX25Facilities[201];  
     WCHAR                   szX25UserData[201];  
     DWORD                   dwChannels;  
     DWORD                   dwSubEntries;  
     DWORD                   dwDialMode;  
     DWORD                   dwDialExtraPercent;  
     DWORD                   dwDialExtraSampleSeconds;  
     DWORD                   dwHangUpExtraPercent;  
     DWORD                   dwHangUpExtraSampleSeconds;  
     DWORD                   dwIdleDisconnectSeconds;  
     DWORD                   dwType;  
     DWORD                   dwEncryptionType;  
     DWORD                   dwCustomAuthKey;  
     DWORD                   dwCustomAuthDataSize;  
     LPBYTE                  lpbCustomAuthData;  
     GUID                    guidId;  
     DWORD                   dwVpnStrategy;
 }
 MPRI_INTERFACE_2,  *PMPRI_INTERFACE_2;
  
  
  
 typedef struct _MPR_INTERFACE_3 
 {  
     WCHAR                   wszInterfaceName[257];  
     DWORD                   dwInterface;  
     BOOL                    fEnabled;  
     ROUTER_INTERFACE_TYPE   dwIfType;  
     ROUTER_CONNECTION_STATE dwConnectionState;  
     DWORD                   fUnReachabilityReasons;  
     DWORD                   dwLastError;  
     DWORD                   dwfOptions;  
     WCHAR                   szLocalPhoneNumber[129];  
     PWCHAR                  szAlternates;  
     DWORD                   ipaddr;  
     DWORD                   ipaddrDns;  
     DWORD                   ipaddrDnsAlt;  
     DWORD                   ipaddrWins;  
     DWORD                   ipaddrWinsAlt;  
     DWORD                   dwfNetProtocols;  
     WCHAR                   szDeviceType[17];  
     WCHAR                   szDeviceName[129];  
     WCHAR                   szX25PadType[33];  
     WCHAR                   szX25Address[201];  
     WCHAR                   szX25Facilities[201];  
     WCHAR                   szX25UserData[201];  
     DWORD                   dwChannels;  
     DWORD                   dwSubEntries;  
     DWORD                   dwDialMode;  
     DWORD                   dwDialExtraPercent;  
     DWORD                   dwDialExtraSampleSeconds;  
     DWORD                   dwHangUpExtraPercent;  
     DWORD                   dwHangUpExtraSampleSeconds;  
     DWORD                   dwIdleDisconnectSeconds;  
     DWORD                   dwType;  
     DWORD                   dwEncryptionType;  
     DWORD                   dwCustomAuthKey;  
     DWORD                   dwCustomAuthDataSize;  
     LPBYTE                  lpbCustomAuthData;  
     GUID                    guidId;  
     DWORD                   dwVpnStrategy;
     ULONG                   AddressCount;
     IN6_ADDR                ipv6addrDns;  
     IN6_ADDR                ipv6addrDnsAlt;  
     IN6_ADDR*               ipv6addr;
 }
 MPRI_INTERFACE_3,*PMPRI_INTERFACE_3;
  
  
  
 typedef struct _MPR_DEVICE_0 
 {  
     WCHAR szDeviceType[17];  
     WCHAR szDeviceName[129];
 } 
 MPR_DEVICE_0,*PMPR_DEVICE_0;
  
  
  
 typedef struct _MPR_DEVICE_1 
 {  
     WCHAR szDeviceType[17];  
     WCHAR szDeviceName[129];  
     WCHAR szLocalPhoneNumber[129];  
     PWCHAR szAlternates;
 } 
 MPR_DEVICE_1,*PMPR_DEVICE_1;
  
  
  
 typedef struct _MPR_CREDENTIALSEX_1
 {
     DWORD   dwSize;
     DWORD   dwOffset;
     BYTE    bData[1];
 } MPR_CREDENTIALSEX_1, *PMPR_CREDENTIALSEX_1;
  
  
  
 typedef struct _IFFILTER_INFO
 {
     BOOL    bEnableFragChk;
 }IFFILTER_INFO, *PIFFILTER_INFO;
  
  
  
 typedef struct _MPR_FILTER_0
 {
     IN BOOL fEnable;
 }
 MPR_FILTER_0, *PMPR_FILTER_0;
  
  
  
 typedef struct _IPX_GLOBAL_INFO {
     ULONG    RoutingTableHashSize;
     ULONG       EventLogMask;
 } IPX_GLOBAL_INFO, *PIPX_GLOBAL_INFO;
  
  
  
 typedef struct _IPX_IF_INFO {
     ULONG    AdministratorState;        
     ULONG    NetbiosAccept;     // 
     ULONG    NetbiosDeliver;    // Deliver Netbios broadcast packets
 } IPX_IF_INFO, *PIPX_IF_INFO;
  
  
  
  
 typedef struct _IPXWAN_IF_INFO {
     ULONG    Adminstate;  
 } IPXWAN_IF_INFO, *PIPXWAN_IF_INFO;
  
  
  
 typedef struct _IPX_STATIC_ROUTE_INFO {
     union {
         ULONG DwordAlign;
         UCHAR Network[4];  
     };
     USHORT TickCount;
     USHORT HopCount;
     UCHAR NextHopMacAddress[6];
 } IPX_STATIC_ROUTE_INFO, *PIPX_STATIC_ROUTE_INFO;
  
  
  
 typedef IPX_SERVER_ENTRY IPX_STATIC_SERVICE_INFO, *PIPX_STATIC_SERVICE_INFO;
  
  
  
 typedef struct _IPX_SERVER_ENTRY
 {
     USHORT Type;
     UCHAR Name[48];
     UCHAR Network[4];
     UCHAR Node[6];
     UCHAR Socket[2];
     USHORT HopCount;
 } IPX_SERVER_ENTRY, *PIPX_SERVER_ENTRY;
  
  
  
 typedef struct _IPX_STATIC_NETBIOS_NAME_INFO {
     union {
         ULONG DwordAlign;
         UCHAR Name[16];     
     };
 } IPX_STATIC_NETBIOS_NAME_INFO, *PIPX_STATIC_NETBIOS_NAME_INFO;
  
  
  
 #define MAX_ADAPTOR_NAME_LEN  48
  
  
  
 typedef struct _IPX_ADAPTER_INFO {
     ULONG PacketType;
     WCHAR AdapterName[MAX_ADAPTOR_NAME_LEN];
 } IPX_ADAPTER_INFO, *PIPX_ADAPTER_INFO;
  
  
  
 typedef struct _IPX_TRAFFIC_FILTER_GLOBAL_INFO {
     ULONG  FilterAction;
 } IPX_TRAFFIC_FILTER_GLOBAL_INFO, *PIPX_TRAFFIC_FILTER_GLOBAL_INFO;
  
  
  
 typedef struct _IPX_TRAFFIC_FILTER_INFO {
     ULONG FilterDefinition;
     UCHAR DestinationNetwork[4];
     UCHAR DestinationNetworkMask[4];
     UCHAR DestinationNode[6];
     UCHAR DestinationSocket[2];
     UCHAR SourceNetwork[4];
     UCHAR SourceNetworkMask[4];
     UCHAR SourceNode[6];
     UCHAR SourceSocket[2];
     UCHAR PacketType;
 } IPX_TRAFFIC_FILTER_INFO, *PIPX_TRAFFIC_FILTER_INFO;
  
  
  
 typedef struct _IF_TABLE_INDEX {
     ULONG InterfaceIndex;
 } IF_TABLE_INDEX, *PIF_TABLE_INDEX;
  
  
  
 typedef struct _ROUTING_TABLE_INDEX {
     UCHAR Network[4];
 } ROUTING_TABLE_INDEX, *PROUTING_TABLE_INDEX;
  
  
  
 typedef struct _STATIC_ROUTES_TABLE_INDEX {
     ULONG InterfaceIndex;
     UCHAR Network[4];
 } STATIC_ROUTES_TABLE_INDEX, *PSTATIC_ROUTES_TABLE_INDEX;
  
  
  
 typedef struct _SERVICES_TABLE_INDEX {
     USHORT ServiceType;
     UCHAR ServiceName[48];
 } SERVICES_TABLE_INDEX, *PSERVICES_TABLE_INDEX;
  
  
  
 typedef struct _STATIC_SERVICES_TABLE_INDEX {
     ULONG InterfaceIndex;
     USHORT ServiceType;
     UCHAR ServiceName[48];
 } STATIC_SERVICES_TABLE_INDEX, *PSTATIC_SERVICES_TABLE_INDEX;
  
  
  
 typedef union _IPX_MIB_INDEX {
     IF_TABLE_INDEX InterfaceTableIndex;
     ROUTING_TABLE_INDEX RoutingTableIndex;
     STATIC_ROUTES_TABLE_INDEX StaticRoutesTableIndex;
     SERVICES_TABLE_INDEX ServicesTableIndex;
     STATIC_SERVICES_TABLE_INDEX StaticServicesTableIndex;
 } IPX_MIB_INDEX, *PIPX_MIB_INDEX;
  
  
  
 typedef struct _IPX_MIB_GET_INPUT_DATA {
     ULONG TableId;
     IPX_MIB_INDEX MibIndex;
 } IPX_MIB_GET_INPUT_DATA, *PIPX_MIB_GET_INPUT_DATA;
  
  
  
 typedef struct _IPXMIB_BASE {
     ULONG    OperState;
     UCHAR    PrimaryNetNumber[4];
     UCHAR    Node[6];
     UCHAR    SysName[48];
     ULONG    MaxPathSplits;
     ULONG    IfCount;
     ULONG    DestCount;
     ULONG    ServCount;
 } IPXMIB_BASE, *PIPXMIB_BASE;
  
  
  
 typedef struct _IPX_IF_STATS {
     ULONG IfOperState;
     ULONG MaxPacketSize;
     ULONG InHdrErrors;
     ULONG InFiltered;
     ULONG InNoRoutes;
     ULONG InDiscards;
     ULONG InDelivers;
     ULONG OutFiltered;
     ULONG OutDiscards;
     ULONG OutDelivers;
     ULONG NetbiosReceived;
     ULONG NetbiosSent;
 } IPX_IF_STATS, *PIPX_IF_STATS;
  
  
  
 typedef struct _IPX_INTERFACE {
     ULONG    InterfaceIndex;
     ULONG    AdministratorState;
     ULONG    AdapterIndex;
     UCHAR    InterfaceName[48];
     ULONG    InterfaceType;
     ULONG    MediaType;
     UCHAR    NetNumber[4];
     UCHAR    MacAddress[6];
     ULONG    Delay;
     ULONG    Throughput;
     ULONG    NetbiosAccept;
     ULONG    NetbiosDeliver;
     ULONG    EnableIpxWanNegotiation;
     IPX_IF_STATS    IfStats;
 } IPX_INTERFACE, *PIPX_INTERFACE;
  
  
  
 typedef struct _IPX_ROUTE {
     ULONG InterfaceIndex; 
     ULONG Protocol;
     UCHAR Network[4];
     USHORT TickCount;
     USHORT HopCount;
     UCHAR NextHopMacAddress[6];
     ULONG Flags;
 }  IPX_ROUTE, *PIPX_ROUTE;
  
  
  
 typedef struct _IPX_SERVICE
 {
     ULONG        InterfaceIndex;
     ULONG            Protocol;
     IPX_SERVER_ENTRY Server;
 } IPX_SERVICE, *PIPX_SERVICE;
  
  
 typedef union _IPX_MIB_ROW {
     IPX_INTERFACE Interface;
     IPX_ROUTE Route;
     IPX_SERVICE Service;
 } IPX_MIB_ROW, *PIPX_MIB_ROW;
  
  
  
 typedef struct _IPX_MIB_SET_INPUT_DATA {
     ULONG TableId;
     IPX_MIB_ROW  MibRow;
 } IPX_MIB_SET_INPUT_DATA, *PIPX_MIB_SET_INPUT_DATA;
  
  
  
 typedef struct _SAP_SERVICE_FILTER_INFO {
     union {
         USHORT    ServiceType;
         ULONG     ServiceType_align;  // Ensures alignment
     };
     UCHAR    ServiceName[48];
 } SAP_SERVICE_FILTER_INFO, *PSAP_SERVICE_FILTER_INFO;
  
  
  
 typedef struct _SAP_IF_FILTERS {
     ULONG    SupplyFilterAction;
     ULONG    SupplyFilterCount;
     ULONG    ListenFilterAction;
     ULONG    ListenFilterCount;
     SAP_SERVICE_FILTER_INFO ServiceFilter[1];
 } SAP_IF_FILTERS, *PSAP_IF_FILTERS;
  
  
  
 typedef struct _SAP_IF_INFO {
     ULONG    AdminState;  
     ULONG    UpdateMode;
     ULONG    PacketType;  
     ULONG    Supply;
     ULONG    Listen; 
     ULONG    GetNearestServerReply; 
     ULONG    PeriodicUpdateInterval; 
     ULONG    AgeIntervalMultiplier; 
 } SAP_IF_INFO, *PSAP_IF_INFO;
  
  
  
 typedef struct _SAP_IF_CONFIG {
     SAP_IF_INFO    SapIfInfo;
     SAP_IF_FILTERS  SapIfFilters;
 } SAP_IF_CONFIG, *PSAP_IF_CONFIG;
  
  
  
 typedef struct _SAP_MIB_BASE {
     ULONG    SapOperState;
 } SAP_MIB_BASE, *PSAP_MIB_BASE;
  
  
  
 typedef struct _SAP_IF_STATS {
     ULONG    SapIfOperState;   
     ULONG    SapIfInputPackets;
     ULONG    SapIfOutputPackets;
 } SAP_IF_STATS, *PSAP_IF_STATS;
  
  
  
 typedef struct _SAP_INTERFACE {
     ULONG    InterfaceIndex;
     SAP_IF_INFO    SapIfInfo;
     SAP_IF_STATS    SapIfStats;
 } SAP_INTERFACE, *PSAP_INTERFACE;
  
  
  
 typedef struct _SAP_MIB_GET_INPUT_DATA {
     ULONG TableId;
     ULONG InterfaceIndex;
 } SAP_MIB_GET_INPUT_DATA, *PSAP_MIB_GET_INPUT_DATA;
  
  
  
 typedef struct _SAP_MIB_SET_INPUT_DATA {
     ULONG TableId;
     SAP_INTERFACE SapInterface;
 } SAP_MIB_SET_INPUT_DATA, *PSAP_MIB_SET_INPUT_DATA;
  
  
  
  
 typedef struct _RIPMIB_BASE {
     ULONG  RIPOperState;
 } RIPMIB_BASE, *PRIPMIB_BASE;
  
  
  
  
 typedef struct _RIP_IF_STATS {
     ULONG    RipIfOperState;   
     ULONG    RipIfInputPackets;
     ULONG    RipIfOutputPackets;
 } RIP_IF_STATS, *PRIP_IF_STATS;
  
  
  
  
 typedef struct _RIP_IF_INFO {
     ULONG    AdminState;  
     ULONG    UpdateMode;
     ULONG    PacketType;
     ULONG    Supply;
     ULONG    Listen;
     ULONG    PeriodicUpdateInterval;
     ULONG    AgeIntervalMultiplier;
 } RIP_IF_INFO, *PRIP_IF_INFO;
  
  
  
 typedef struct _RIP_INTERFACE {
     ULONG    InterfaceIndex;
     RIP_IF_INFO    RipIfInfo;
     RIP_IF_STATS    RipIfStats;
 } RIP_INTERFACE, *PRIP_INTERFACE;
  
  
  
 typedef struct _RIP_MIB_GET_INPUT_DATA {
     ULONG TableId;
     ULONG InterfaceIndex;
 } RIP_MIB_GET_INPUT_DATA, *PRIP_MIB_GET_INPUT_DATA;
  
  
  
 typedef struct _RIP_MIB_SET_INPUT_DATA {
     ULONG TableId;
     RIP_INTERFACE RipInterface;
 } RIP_MIB_SET_INPUT_DATA, *PRIP_MIB_SET_INPUT_DATA;
  
  
  
 typedef struct _EAPTLS_HASH
 {
     DWORD   cbHash;               
     BYTE    pbHash[20];  
 } EAPTLS_HASH;
  
  
  
 typedef struct _EAPTLS_USER_PROPERTIES
 {
     DWORD       reserved;
     DWORD       dwVersion;
     DWORD       dwSize;                 
     DWORD       fFlags;                 
     EAPTLS_HASH Hash;                   
     WCHAR*      pwszDiffUser;
     DWORD       dwPinOffset;
     WCHAR*      pwszPin;                
     USHORT      usLength;           
     USHORT      usMaximumLength;    
     UCHAR       ucSeed;           
     WCHAR       awszString[1];       
 } EAPTLS_USER_PROPERTIES;
  
 typedef struct _IPBOOTP_GLOBAL_CONFIG {
     DWORD       GC_LoggingLevel;
     DWORD       GC_MaxRecvQueueSize;
     DWORD       GC_ServerCount;
 } IPBOOTP_GLOBAL_CONFIG, *PIPBOOTP_GLOBAL_CONFIG;
  
 typedef struct _IPBOOTP_IF_CONFIG {
     DWORD       IC_State;
     DWORD       IC_RelayMode;
     DWORD       IC_MaxHopCount;
     DWORD       IC_MinSecondsSinceBoot;
 } IPBOOTP_IF_CONFIG, *PIPBOOTP_IF_CONFIG;
  
 typedef struct _IPBOOTP_MIB_GET_INPUT_DATA {
     DWORD       IMGID_TypeID;
     DWORD       IMGID_IfIndex;
 } IPBOOTP_MIB_GET_INPUT_DATA, *PIPBOOTP_MIB_GET_INPUT_DATA;
  
 typedef struct _IPBOOTP_MIB_GET_OUTPUT_DATA {
     DWORD       IMGOD_TypeID;
     DWORD       IMGOD_IfIndex;
     BYTE        IMGOD_Buffer[1];
 } IPBOOTP_MIB_GET_OUTPUT_DATA, *PIPBOOTP_MIB_GET_OUTPUT_DATA;
  
 typedef struct _IPBOOTP_IF_STATS {
     DWORD       IS_State;
     DWORD       IS_SendFailures;
     DWORD       IS_ReceiveFailures;
     DWORD       IS_ArpUpdateFailures;
     DWORD       IS_RequestsReceived;
     DWORD       IS_RequestsDiscarded;
     DWORD       IS_RepliesReceived;
     DWORD       IS_RepliesDiscarded;
 } IPBOOTP_IF_STATS, *PIPBOOTP_IF_STATS;
  
 typedef struct _IPBOOTP_IF_BINDING {
     DWORD       IB_State;
     DWORD       IB_AddrCount;
 } IPBOOTP_IF_BINDING, *PIPBOOTP_IF_BINDING;
  
 typedef struct _IPBOOTP_IP_ADDRESS {
     DWORD       IA_Address;
     DWORD       IA_Netmask;
 } IPBOOTP_IP_ADDRESS, *PIPBOOTP_IP_ADDRESS;
  
  
 typedef struct _DHCPV6R_MIB_GET_OUTPUT_DATA {
     DWORD       IMGOD_TypeID; // Type of the data received
     DWORD       IMGOD_IfIndex;
     BYTE        IMGOD_Buffer[1];
 } DHCPV6R_MIB_GET_OUTPUT_DATA, *PDHCPV6R_MIB_GET_OUTPUT_DATA;
  
 typedef struct _DHCPV6R_IF_STATS {
     DWORD       IS_State;
     DWORD       IS_SendFailures;
     DWORD       IS_ReceiveFailures;
     DWORD       IS_RequestsReceived;
     DWORD       IS_RequestsDiscarded;
     DWORD       IS_RepliesReceived;
     DWORD       IS_RepliesDiscarded;
 } DHCPV6R_IF_STATS, *PDHCPV6R_IF_STATS;
  
 typedef struct _DHCPV6R_MIB_GET_INPUT_DATA {
     DWORD       IMGID_TypeID; // Type of the data to get
     DWORD       IMGID_IfIndex;
 } DHCPV6R_MIB_GET_INPUT_DATA, *PDHCPV6R_MIB_GET_INPUT_DATA;
  
 typedef struct _DHCPV6R_GLOBAL_CONFIG {
     DWORD       GC_LoggingLevel;
     DWORD       GC_MaxRecvQueueSize;
     DWORD       GC_ServerCount;
 } DHCPV6R_GLOBAL_CONFIG, *PDHCPV6R_GLOBAL_CONFIG;
  
 typedef struct _DHCPV6R_IF_CONFIG {
     DWORD       IC_State;
     DWORD       IC_RelayMode;
     DWORD       IC_MaxHopCount;
     DWORD       IC_MinElapsedTime;
 } DHCPV6R_IF_CONFIG, *PDHCPV6R_IF_CONFIG;
  
 typedef struct _IPRIP_MIB_GET_INPUT_DATA {
     DWORD       IMGID_TypeID;
     union {
         DWORD   IMGID_IfIndex;
         DWORD   IMGID_PeerAddress;
     };
 } IPRIP_MIB_GET_INPUT_DATA, *PIPRIP_MIB_GET_INPUT_DATA;
  
 typedef struct _IPRIP_MIB_GET_OUTPUT_DATA {
     DWORD       IMGOD_TypeID;
     union {
         DWORD   IMGOD_IfIndex;
         DWORD   IMGOD_PeerAddress;
     };
     BYTE        IMGOD_Buffer[1];
 } IPRIP_MIB_GET_OUTPUT_DATA, *PIPRIP_MIB_GET_OUTPUT_DATA;
  
 typedef struct _IPRIP_GLOBAL_STATS {
     DWORD       GS_SystemRouteChanges;
     DWORD       GS_TotalResponsesSent;
 } IPRIP_GLOBAL_STATS, *PIPRIP_GLOBAL_STATS;
  
 typedef struct _IPRIP_GLOBAL_CONFIG {
     DWORD       GC_LoggingLevel;
     DWORD       GC_MaxRecvQueueSize;
     DWORD       GC_MaxSendQueueSize;
     DWORD       GC_MinTriggeredUpdateInterval;
     DWORD       GC_PeerFilterMode;
     DWORD       GC_PeerFilterCount;
 } IPRIP_GLOBAL_CONFIG, *PIPRIP_GLOBAL_CONFIG;
  
 typedef struct _IPRIP_IF_STATS {
     DWORD       IS_State;
     DWORD       IS_SendFailures;
     DWORD       IS_ReceiveFailures;
     DWORD       IS_RequestsSent;
     DWORD       IS_RequestsReceived;
     DWORD       IS_ResponsesSent;
     DWORD       IS_ResponsesReceived;
     DWORD       IS_BadResponsePacketsReceived;
     DWORD       IS_BadResponseEntriesReceived;
     DWORD       IS_TriggeredUpdatesSent;
 } IPRIP_IF_STATS, *PIPRIP_IF_STATS;
  
 typedef struct _IPRIP_IF_CONFIG {
     DWORD       IC_State;
     DWORD       IC_Metric;
     DWORD       IC_UpdateMode;
     DWORD       IC_AcceptMode;
     DWORD       IC_AnnounceMode;
     DWORD       IC_ProtocolFlags;
     DWORD       IC_RouteExpirationInterval;
     DWORD       IC_RouteRemovalInterval;
     DWORD       IC_FullUpdateInterval;
     DWORD       IC_AuthenticationType;
     BYTE        IC_AuthenticationKey[ 16];
     WORD        IC_RouteTag;
     DWORD       IC_UnicastPeerMode;
     DWORD       IC_AcceptFilterMode;
     DWORD       IC_AnnounceFilterMode;
     DWORD       IC_UnicastPeerCount;
     DWORD       IC_AcceptFilterCount;
     DWORD       IC_AnnounceFilterCount;
 } IPRIP_IF_CONFIG, *PIPRIP_IF_CONFIG;
  
 typedef struct _IPRIP_ROUTE_FILTER {
     DWORD        RF_LoAddress;
     DWORD        RF_HiAddress;
 } IPRIP_ROUTE_FILTER, *PIPRIP_ROUTE_FILTER; 
  
 typedef struct _IPRIP_IF_BINDING {
     DWORD       IB_State;
     DWORD       IB_AddrCount;
 } IPRIP_IF_BINDING, *PIPRIP_IF_BINDING;
  
 typedef struct _IPRIP_IP_ADDRESS {
     DWORD       IA_Address;
     DWORD       IA_Netmask;
 } IPRIP_IP_ADDRESS, *PIPRIP_IP_ADDRESS;
  
 typedef struct _IPRIP_PEER_STATS {
     DWORD       PS_LastPeerRouteTag;
     DWORD       PS_LastPeerUpdateTickCount;
     DWORD       PS_LastPeerUpdateVersion;
     DWORD       PS_BadResponsePacketsFromPeer;
     DWORD       PS_BadResponseEntriesFromPeer;
 } IPRIP_PEER_STATS, *PIPRIP_PEER_STATS;
  
 typedef struct _IGMP_MIB_GET_INPUT_DATA {
     DWORD       TypeId;
     USHORT      Flags;
     USHORT      Signature;  
     DWORD       IfIndex;
     DWORD       RasClientAddr;
     DWORD       GroupAddr;
     DWORD       Count;  
 } IGMP_MIB_GET_INPUT_DATA, *PIGMP_MIB_GET_INPUT_DATA;
  
 typedef struct _IGMP_MIB_GET_OUTPUT_DATA {
     DWORD       TypeId;
     DWORD       Flags; //IGMP_ENUM_FORMAT_IGMPV3 set if v3 struct  
     DWORD       Count;
     BYTE        Buffer[1];
 } IGMP_MIB_GET_OUTPUT_DATA, *PIGMP_MIB_GET_OUTPUT_DATA;
  
 typedef struct _IGMP_MIB_GLOBAL_CONFIG {
     DWORD       Version;
     DWORD       LoggingLevel;
     DWORD       RasClientStats;  
 } IGMP_MIB_GLOBAL_CONFIG, *PIGMP_MIB_GLOBAL_CONFIG;
  
 typedef struct _IGMP_MIB_GLOBAL_STATS {
     DWORD       CurrentGroupMemberships;
     DWORD       GroupMembershipsAdded;
 } IGMP_MIB_GLOBAL_STATS, *PIGMP_MIB_GLOBAL_STATS;
  
 typedef struct _IGMP_MIB_IF_BINDING {
     DWORD       IfIndex;
     DWORD       IfType;
     DWORD       State;
     DWORD       AddrCount;
 } IGMP_MIB_IF_BINDING, *PIGMP_MIB_IF_BINDING;
  
 typedef struct _IGMP_MIB_IF_CONFIG {
     DWORD       Version;
     DWORD       IfIndex; //read only:index
     DWORD       IpAddr;  //read only
     DWORD       IfType;  //read only
     DWORD       Flags;
     DWORD       IgmpProtocolType;
     DWORD       RobustnessVariable;
     DWORD       StartupQueryInterval;
     DWORD       StartupQueryCount;
     DWORD       GenQueryInterval;
     DWORD       GenQueryMaxResponseTime;
     DWORD       LastMemQueryInterval;
     DWORD       LastMemQueryCount;
     DWORD       OtherQuerierPresentInterval;//read only
     DWORD       GroupMembershipTimeout;     //read only
     DWORD       NumStaticGroups;   
 } IGMP_MIB_IF_CONFIG, *PIGMP_MIB_IF_CONFIG;
  
 typedef struct _IGMP_MIB_IF_GROUPS_LIST {
     DWORD       IfIndex;
     DWORD       IpAddr;
     DWORD       IfType;
     DWORD       NumGroups;
     BYTE        Buffer[1];  
 } IGMP_MIB_IF_GROUPS_LIST, *PIGMP_MIB_IF_GROUPS_LIST;
  
 typedef struct _IGMP_MIB_GROUP_INFO {
     union {
         DWORD        IfIndex;
         DWORD       GroupAddr;
     };
     DWORD       IpAddr;
     DWORD       GroupUpTime;
     DWORD       GroupExpiryTime;
     DWORD       LastReporter;
     DWORD       V1HostPresentTimeLeft;
     DWORD       Flags;   
 } IGMP_MIB_GROUP_INFO, *PIGMP_MIB_GROUP_INFO;
  
 typedef struct _IGMP_MIB_IF_STATS {
     DWORD       IfIndex;                    // same as in MIB_IF_CONFIG
     DWORD       IpAddr;                     // same as in MIB_IF_CONFIG
     DWORD       IfType;                     // same as in MIB_IF_CONFIG
     BYTE        State;                      // bound/enabled
     BYTE        QuerierState;               // (not)querier
     DWORD       IgmpProtocolType;           // router/proxy, and ver(1/2/3)
     DWORD       QuerierIpAddr;
     DWORD       ProxyIfIndex;               // IfIndex of proxy(req by mib) 
     DWORD       QuerierPresentTimeLeft;   
     DWORD       LastQuerierChangeTime;
     DWORD       V1QuerierPresentTimeLeft;   //obsolete
     DWORD       Uptime;                     // seconds it has been activated
     DWORD       TotalIgmpPacketsReceived; 
     DWORD       TotalIgmpPacketsForRouter;   
     DWORD       GeneralQueriesReceived;
     DWORD       WrongVersionQueries;
     DWORD       JoinsReceived;
     DWORD       LeavesReceived;
     DWORD       CurrentGroupMemberships;
     DWORD       GroupMembershipsAdded;
     DWORD       WrongChecksumPackets;
     DWORD       ShortPacketsReceived;
     DWORD       LongPacketsReceived;
     DWORD       PacketsWithoutRtrAlert;    
 } IGMP_MIB_IF_STATS, *PIGMP_MIB_IF_STATS;
  
 typedef struct _IGMP_MIB_GROUP_IFS_LIST {
     DWORD       GroupAddr;
     DWORD       NumInterfaces;
     BYTE        Buffer[1];
 } IGMP_MIB_GROUP_IFS_LIST, *PIGMP_MIB_GROUP_IFS_LIST;
  
 typedef struct _IGMP_MIB_GROUP_SOURCE_INFO_V3 {
     DWORD       Source;
     DWORD       SourceExpiryTime;   //not valid for exclusion mode
     DWORD       SourceUpTime;
     DWORD       Flags;
 } IGMP_MIB_GROUP_SOURCE_INFO_V3, *PIGMP_MIB_GROUP_SOURCE_INFO_V3;
  
  
 typedef struct _IGMP_MIB_GROUP_INFO_V3 
 {
     union {
         DWORD        IfIndex;
         DWORD       GroupAddr;
     };
     DWORD       IpAddr;
     DWORD       GroupUpTime;
     DWORD       GroupExpiryTime;
   
     DWORD       LastReporter;
     DWORD       V1HostPresentTimeLeft;
     DWORD       Flags;
     
     //v3 additions
     DWORD       Version; //1/2/3
     DWORD       Size;   //size of this struct
     DWORD       FilterType;//EXCLUSION/INCLUSION
     DWORD       V2HostPresentTimeLeft;
     DWORD       NumSources;
     //IGMP_MIB_GROUP_SOURCE_INFO_V3      Sources[0];
     
 } IGMP_MIB_GROUP_INFO_V3, *PIGMP_MIB_GROUP_INFO_V3;
  
 typedef struct _INTERFACE_ROUTE_ENTRY
 {
     DWORD               dwIndex;
     INTERFACE_ROUTE_INFO    routeInfo;
 }INTERFACE_ROUTE_ENTRY, *PINTERFACE_ROUTE_ENTRY;
  
 typedef struct _IP_NAT_MIB_QUERY {
     ULONG Oid;
     union {
         ULONG Index;
         UCHAR Data;
     };
 } IP_NAT_MIB_QUERY, *PIP_NAT_MIB_QUERY;
  
 typedef enum _IP_NAT_DIRECTION {
     NatInboundDirection = 0,
     NatOutboundDirection
 } IP_NAT_DIRECTION, *PIP_NAT_DIRECTION;
  
 typedef struct _IP_NAT_SESSION_MAPPING {
     UCHAR Protocol;       // see NAT_PROTOCOL_* above
     ULONG PrivateAddress;
     USHORT PrivatePort;
     ULONG PublicAddress;
     USHORT PublicPort;
     ULONG RemoteAddress;
     USHORT RemotePort;
     IP_NAT_DIRECTION Direction;
     ULONG IdleTime;       // in seconds
 } IP_NAT_SESSION_MAPPING, *PIP_NAT_SESSION_MAPPING;
  
 typedef struct _IP_NAT_ENUMERATE_SESSION_MAPPINGS {
     IN ULONG Index;
     IN OUT ULONG EnumerateContext[4];
     OUT ULONG EnumerateCount;
     OUT ULONG EnumerateTotalHint;
     OUT IP_NAT_SESSION_MAPPING EnumerateTable[1];
 } IP_NAT_ENUMERATE_SESSION_MAPPINGS, *PIP_NAT_ENUMERATE_SESSION_MAPPINGS;
  
 typedef struct _IP_NAT_INTERFACE_STATISTICS {
     OUT ULONG TotalMappings;
     OUT ULONG InboundMappings;
     OUT ULONG64 BytesForward;
     OUT ULONG64 BytesReverse;
     OUT ULONG64 PacketsForward;
     OUT ULONG64 PacketsReverse;
     OUT ULONG64 RejectsForward;
     OUT ULONG64 RejectsReverse;
 } IP_NAT_INTERFACE_STATISTICS, *PIP_NAT_INTERFACE_STATISTICS;
  
 typedef struct _IP_DNS_PROXY_MIB_QUERY {
     ULONG Oid;
     union {
         ULONG Index;
         UCHAR Data;
     };
 } IP_DNS_PROXY_MIB_QUERY, *PIP_DNS_PROXY_MIB_QUERY;
  
 typedef struct _IP_DNS_PROXY_STATISTICS {
     ULONG MessagesIgnored;
     ULONG QueriesReceived;
     ULONG ResponsesReceived;
     ULONG QueriesSent;
     ULONG ResponsesSent;
 } IP_DNS_PROXY_STATISTICS, *PIP_DNS_PROXY_STATISTICS;
  
 typedef struct _IP_AUTO_DHCP_MIB_QUERY {
     ULONG Oid;
     union {
         ULONG Index;
         UCHAR Data;
     };
     ULONG Reserved;
 } IP_AUTO_DHCP_MIB_QUERY, *PIP_AUTO_DHCP_MIB_QUERY;
  
 typedef struct _IP_AUTO_DHCP_STATISTICS {
     ULONG MessagesIgnored;
     ULONG BootpOffersSent;
     ULONG DiscoversReceived;
     ULONG InformsReceived;
     ULONG OffersSent;
     ULONG RequestsReceived;
     ULONG AcksSent;
     ULONG NaksSent;
     ULONG DeclinesReceived;
     ULONG ReleasesReceived;
 } IP_AUTO_DHCP_STATISTICS, *PIP_AUTO_DHCP_STATISTICS;
  
  
 typedef struct _MIB_DA_MSG {
     UINT32 op_code;   /* IN: MIB manager operation code */
     UINT32 ret_code;   /* OUT: MIB manager return code */
     UINT32 in_snmp_id[44];   /* IN: SNMP ID array (get_next) */
     UINT32 obj_id[17];   /* IN: object ID array (get, set) */
     UINT32 attr_id;   /* IN: attribute ID (set) */
     UINT32 inst_id[23];   /* IN: instance ID array (get, set) */
     UINT32 next_snmp_id[44];   /* OUT: SNMP ID array (get_next) */
     UINT32 creator;   /* OUT: creator of instance (get, get_next) */
     UINT32 attr_type;   /* OUT: for resolveVarBind */
     UINT32 inst_cnt;   /* OUT: # of insts for caching (get_next) */
     UINT32 map_flag;   /* IN: flag - is this request mapped? */
     ULONG_PTR data[32];     /* IN: attribute value (set) */
                           /* OUT: entire record (get, get_next) */
 } MIB_DA_MSG;
  
  
 typedef struct _IP_AUTO_DHCP_GLOBAL_INFO {
     ULONG LoggingLevel;
     ULONG Flags;
     ULONG LeaseTime;
     ULONG ScopeNetwork;
     ULONG ScopeMask;
     ULONG ExclusionCount;
     ULONG ExclusionArray;
 } IP_AUTO_DHCP_GLOBAL_INFO, *PIP_AUTO_DHCP_GLOBAL_INFO;
  
  
 typedef struct _IP_AUTO_DHCP_INTERFACE_INFO {
     ULONG Flags;
 } IP_AUTO_DHCP_INTERFACE_INFO, *PIP_AUTO_DHCP_INTERFACE_INFO;
  
 typedef struct _IP_DNS_PROXY_GLOBAL_INFO {
     ULONG LoggingLevel;
     ULONG Flags;
     ULONG TimeoutSeconds;
 } IP_DNS_PROXY_GLOBAL_INFO, *PIP_DNS_PROXY_GLOBAL_INFO;
  
 typedef struct _IP_DNS_PROXY_INTERFACE_INFO {
     ULONG Flags;
 } IP_DNS_PROXY_INTERFACE_INFO, *PIP_DNS_PROXY_INTERFACE_INFO;
  
 typedef struct _IP_NAT_GLOBAL_INFO {
     ULONG LoggingLevel; // see IPNATHLP.H (IPNATHLP_LOGGING_*).
     ULONG Flags;
     RTR_INFO_BLOCK_HEADER Header;
 } IP_NAT_GLOBAL_INFO, *PIP_NAT_GLOBAL_INFO;
  
 typedef struct _IP_NAT_TIMEOUT {
     ULONG TCPTimeoutSeconds;
     ULONG UDPTimeoutSeconds;
 } IP_NAT_TIMEOUT, *PIP_NAT_TIMEOUT;
  
 typedef struct _IP_NAT_INTERFACE_INFO {
     ULONG Index;
     ULONG Flags;
     RTR_INFO_BLOCK_HEADER Header;
 } IP_NAT_INTERFACE_INFO, *PIP_NAT_INTERFACE_INFO;
  
  
 typedef struct _IP_NAT_ADDRESS_RANGE {
     ULONG StartAddress;
     ULONG EndAddress;
     ULONG SubnetMask;
 } IP_NAT_ADDRESS_RANGE, *PIP_NAT_ADDRESS_RANGE;
  
 typedef struct _IP_NAT_PORT_MAPPING {
     UCHAR Protocol;
     USHORT PublicPort;
     ULONG PublicAddress;  // OPTIONAL - see IP_NAT_ADDRESS_UNSPECIFIED
     USHORT PrivatePort;
     ULONG PrivateAddress;
 } IP_NAT_PORT_MAPPING, *PIP_NAT_PORT_MAPPING;
  
  
 typedef struct _IP_NAT_ADDRESS_MAPPING {
     ULONG PrivateAddress;
     ULONG PublicAddress;
     BOOLEAN AllowInboundSessions;
 } IP_NAT_ADDRESS_MAPPING, *PIP_NAT_ADDRESS_MAPPING;
  
 typedef struct IP_ALG_GLOBAL_INFO {
     ULONG LoggingLevel;
     ULONG Flags;
 } IP_ALG_GLOBAL_INFO, *PIP_ALG_GLOBAL_INFO;
  
 typedef struct _RIP_GLOBAL_INFO {
     DWORD       EventLogMask;
 } RIP_GLOBAL_INFO, 
  *PRIP_GLOBAL_INFO;
  
 typedef struct _RIP_ROUTE_FILTER_INFO {
     UCHAR        Network[4];
     UCHAR        Mask[4];
 } RIP_ROUTE_FILTER_INFO, 
  *PRIP_ROUTE_FILTER_INFO;
  
 typedef struct _RIP_IF_FILTERS {
     ULONG            SupplyFilterAction;
     ULONG            SupplyFilterCount;
     ULONG            ListenFilterAction;
     ULONG            ListenFilterCount;
     RIP_ROUTE_FILTER_INFO   RouteFilter[1];
 } RIP_IF_FILTERS, 
  *PRIP_IF_FILTERS;
  
 typedef struct _RIP_IF_CONFIG {
     RIP_IF_INFO     RipIfInfo;
     RIP_IF_FILTERS  RipIfFilters;
 } RIP_IF_CONFIG, 
  *PRIP_IF_CONFIG;
  
 typedef struct _SAP_GLOBAL_INFO {
     DWORD       EventLogMask;
 } SAP_GLOBAL_INFO, 
  *PSAP_GLOBAL_INFO;
  
 typedef struct _OSPF_ROUTE_FILTER
 {
     DWORD   dwAddress;
     DWORD   dwMask;
 }OSPF_ROUTE_FILTER, *POSPF_ROUTE_FILTER;
  
 typedef enum _OSPF_FILTER_ACTION
 {
     ACTION_DROP = 0,
     ACTION_ACCEPT = 1
 }OSPF_FILTER_ACTION, *POSPF_FILTER_ACTION;
  
 typedef struct _OSPF_ROUTE_FILTER_INFO
 {
     DWORD               type;
     OSPF_FILTER_ACTION  ofaActionOnMatch;
     DWORD               dwNumFilters;
     OSPF_ROUTE_FILTER   pFilters[1];
 }OSPF_ROUTE_FILTER_INFO, *POSPF_ROUTE_FILTER_INFO;
  
 typedef struct _OSPF_PROTO_FILTER_INFO
 {
     DWORD               type;
     OSPF_FILTER_ACTION  ofaActionOnMatch;
     DWORD               dwNumProtoIds;
     DWORD               pdwProtoId[1];
 }OSPF_PROTO_FILTER_INFO, *POSPF_PROTO_FILTER_INFO;
  
 typedef struct _OSPF_GLOBAL_PARAM
 {
     DWORD    type;
     DWORD    create;
     DWORD    enable;    
     DWORD      routerId;
     DWORD    ASBrdrRtr;
     DWORD      logLevel;
  }OSPF_GLOBAL_PARAM, *POSPF_GLOBAL_PARAM;
  
 typedef struct _OSPF_AREA_PARAM
 {
     DWORD    type;
     DWORD    create;
     DWORD    enable;    
     DWORD      areaId;
     DWORD    authType;
     DWORD    importASExtern;
     DWORD    stubMetric;
     DWORD    importSumAdv;
 }OSPF_AREA_PARAM, *POSPF_AREA_PARAM;
  
 typedef struct _OSPF_AREA_RANGE_PARAM
 {
     DWORD    type;
     DWORD    create;
     DWORD    enable;    
     DWORD      areaId;
     DWORD      rangeNet;
     DWORD      rangeMask;
 }OSPF_AREA_RANGE_PARAM, *POSPF_AREA_RANGE_PARAM;
  
 typedef struct _OSPF_VIRT_INTERFACE_PARAM
 {
     DWORD    type;    
     DWORD    create;    
     DWORD    enable;    
     DWORD      transitAreaId;
     DWORD      virtNeighborRouterId;
     DWORD    transitDelay;
     DWORD    retransInterval;
     DWORD    helloInterval;
     DWORD    deadInterval;
     BYTE    password[8];
 }OSPF_VIRT_INTERFACE_PARAM, *POSPF_VIRT_INTERFACE_PARAM;
  
 typedef struct _OSPF_INTERFACE_PARAM
 {
     DWORD    type;            
     DWORD    create;            
     DWORD    enable;
     DWORD      intfIpAddr;
     DWORD      intfSubnetMask;
     DWORD      areaId;
     DWORD    intfType;
     DWORD    routerPriority;    
     DWORD    transitDelay;
     DWORD    retransInterval;
     DWORD    helloInterval;
     DWORD    deadInterval;
     DWORD    pollInterval;
     DWORD    metricCost;
     BYTE    password[8];
     DWORD    mtuSize;
 }OSPF_INTERFACE_PARAM, *POSPF_INTERFACE_PARAM;
  
 typedef struct _OSPF_NBMA_NEIGHBOR_PARAM
 {
     DWORD    type;    
     DWORD    create;    
     DWORD    enable;    
     DWORD      neighborIpAddr;
     DWORD      intfIpAddr;
     DWORD    neighborPriority;
 }OSPF_NBMA_NEIGHBOR_PARAM, *POSPF_NBMA_NEIGHBOR_PARAM;
  
  
 typedef enum _RASDEVICETYPE
 {
     RDT_Modem = 0,
     RDT_X25,
     RDT_Isdn,
     RDT_Serial,
     RDT_FrameRelay,
     RDT_Atm,
     RDT_Sonet,
     RDT_Sw56,
     RDT_Tunnel_Pptp,
     RDT_Tunnel_L2tp,
     RDT_Irda,
     RDT_Parallel, 
     RDT_Other,
     RDT_PPPoE,  
     RDT_Tunnel_Sstp,
     RDT_Tunnel_Ikev2,
     RDT_Tunnel = 0x00010000,
     RDT_Direct  = 0x00020000,
     RDT_Null_Modem = 0x00040000,
     RDT_Broadband = 0x00080000
 } RASDEVICETYPE;
  
  
 typedef enum _RASMAN_STATUS {
     OPEN    = 0,
     CLOSED  = 1,
     UNAVAILABLE = 2,
     REMOVED = 3
 } RASMAN_STATUS;
  
 typedef enum _ReqTypes {
 REQTYPE_PORTENUM= 21,
 REQTYPE_GETINFO= 22,
 REQTYPE_GETDEVCONFIG= 73,
 REQTYPE_SETDEVICECONFIGINFO= 94,
 REQTYPE_GETDEVICECONFIGINFO= 95,
 REQTYPE_GETCALLEDID= 105,
 REQTYPE_SETCALLEDID= 106,
 REQTYPE_GETNDISWANDRIVERCAPS= 111
 } ReqTypes;
  
 typedef enum _RASMAN_STATE {
     CONNECTING  = 0,
     LISTENING   = 1,
     CONNECTED   = 2,
     DISCONNECTING   = 3,
     DISCONNECTED    = 4,
     LISTENCOMPLETED = 5,
 } RASMAN_STATE;
  
 typedef enum _RASMAN_DISCONNECT_TYPE {
     USER_REQUESTED = 0,
     REMOTE_DISCONNECTION = 1,
     HARDWARE_FAILURE = 2,
     NOT_DISCONNECTED = 3
 } RASMAN_DISCONNECT_TYPE;
  
 typedef enum _RASMAN_USAGE {
     CALL_NONE = 0x00,
     CALL_IN = 0x01,
     CALL_OUT = 0x02,
     CALL_ROUTER = 0x04,
     CALL_LOGON = 0x08,
     CALL_OUT_ONLY = 0x10,
     CALL_IN_ONLY = 0x20,
     CALL_OUTBOUND_ROUTER = 0x40
 } RASMAN_USAGE;
  
 typedef struct _RequestBuffer {
     DWORD       RB_PCBIndex; 
     ReqTypes    RB_Reqtype;  
     DWORD       RB_Dummy;
     DWORD       RB_Done;
     LONGLONG    Alignment;
     BYTE        RB_Buffer[1];
 } RequestBuffer;
 typedef struct DeviceConfigInfo
 {
     DWORD           retcode;
     DWORD           dwVersion;
     DWORD           cbBuffer;
     DWORD           cEntries;
     BYTE            abdata[1];
 } DeviceConfigInfo;
 typedef struct _RAS_DEVICE_INFO
 {
     DWORD           dwVersion;
     BOOL            fWrite;
     BOOL            fRasEnabled;
     BOOL            fRouterEnabled;
     BOOL            fRouterOutboundEnabled;
     DWORD           dwTapiLineId;
     DWORD           dwError;
     DWORD           dwNumEndPoints;
     DWORD           dwMaxOutCalls;
     DWORD           dwMaxInCalls;
     DWORD           dwMinWanEndPoints;
     DWORD           dwMaxWanEndPoints;
     RASDEVICETYPE   eDeviceType;
     GUID            guidDevice;
     CHAR            szPortName[17];
     CHAR            szDeviceName[129];
     WCHAR           wszDeviceName[129];
 } RAS_DEVICE_INFO, *PRAS_DEVICE_INFO;
  
  
 typedef struct _RAS_CALLEDID_INFO
 {
     DWORD           dwSize;
     BYTE            bCalledId[1];
 } RAS_CALLEDID_INFO, *PRAS_CALLEDID_INFO;
  
 typedef struct GetSetCalledId
 {
     DWORD               retcode;
     BOOL                fWrite;
     DWORD               dwSize;
     GUID                guidDevice;
     RAS_DEVICE_INFO     rdi;
     RAS_CALLEDID_INFO   rciInfo;
 } GetSetCalledId;
  
 typedef struct _RAS_NDISWAN_DRIVER_INFO
 {
     ULONG   DriverCaps;
     ULONG   Reserved;
 } RAS_NDISWAN_DRIVER_INFO, *P_NDISWAN_DRIVER_INFO;
  
 typedef struct GetNdiswanDriverCapsStruct
 {
     DWORD                   retcode;
     RAS_NDISWAN_DRIVER_INFO NdiswanDriverInfo;
 } GetNdiswanDriverCapsStruct;
  
 typedef struct GetDevConfigStruct
 {
     DWORD  retcode;
     CHAR   devicetype[17];
     DWORD  size;
     BYTE   config[1];
  
 } GetDevConfigStruct;
  
 typedef     struct Enum
 {
     DWORD   retcode;
     DWORD   size;
     DWORD   entries;
     BYTE    buffer[1];
 } Enum;
  
 typedef struct _RASMAN_PORT_32 {
     DWORD P_Port;
     CHAR P_PortName[16];
     RASMAN_STATUS P_Status;
     RASDEVICETYPE P_rdtDeviceType;
     RASMAN_USAGE P_ConfiguredUsage;
     RASMAN_USAGE P_CurrentUsage;
     CHAR P_MediaName[16];
     CHAR P_DeviceType[16];
     CHAR P_DeviceName[129];
     DWORD P_LineDeviceId;
     DWORD P_AddressId;
 } RASMAN_PORT_32;
  
 typedef struct _RASMAN_INFO {
     RASMAN_STATUS   RI_PortStatus;
     RASMAN_STATE    RI_ConnState;
     DWORD           RI_LinkSpeed;
     DWORD           RI_LastError;
     RASMAN_USAGE    RI_CurrentUsage;
     CHAR            RI_DeviceTypeConnecting [16];
     CHAR            RI_DeviceConnecting [129];
     CHAR            RI_szDeviceType[16];
     CHAR            RI_szDeviceName[129];
     CHAR            RI_szPortName[17];
     RASMAN_DISCONNECT_TYPE    RI_DisconnectType;
     DWORD           RI_OwnershipFlag;
     DWORD           RI_ConnectDuration;
     DWORD           RI_BytesReceived;
     CHAR            RI_Phonebook[261];
     CHAR            RI_PhoneEntry[257];
     HANDLE          RI_ConnectionHandle;
     DWORD           RI_SubEntry;
     RASDEVICETYPE   RI_rdtDeviceType;
     GUID            RI_GuidEntry;    
     DWORD           RI_dwSessionId;
     DWORD           RI_dwFlags;
     GUID            RI_CorrelationGuid;
 }RASMAN_INFO;
  
 typedef struct Info
 {
     union {
         DWORD         retcode;
         HANDLE        paddingField;
     };
     RASMAN_INFO   info;
 } Info;
  
  
 #define RASRPC_MaxEntryName    256
 #define RASRPC_MaxPortName     16
 #define RASRPC_MaxDeviceName   128
 #define RASRPC_MaxPhoneNumber  128
 #define RASRPC_MAX_PATH        260
  
 typedef struct _RASRPC_CALLBACKLIST
 {
     WCHAR pszPortName[RASRPC_MaxPortName + 1];
     WCHAR pszDeviceName[RASRPC_MaxDeviceName + 1];
     WCHAR pszNumber[RASRPC_MaxPhoneNumber + 1];
     DWORD dwDeviceType;
     [unique] struct _RASRPC_CALLBACKLIST *pNext;
 } RASRPC_CALLBACKLIST, *LPRASRPC_CALLBACKLIST;
  
 typedef struct _RASRPC_STRINGLIST
 {
     WCHAR psz[256];
     [unique] struct _RASRPC_STRINGLIST *pNext;
 } RASRPC_STRINGLIST, *LPRASRPC_STRINGLIST;
  
 typedef struct _RASRPC_LOCATIONLIST
 {
     DWORD dwLocationId;
     DWORD iPrefix;
     DWORD iSuffix;
     [unique] struct _RASRPC_LOCATIONLIST *pNext;
 } RASRPC_LOCATIONLIST, *LPRASRPC_LOCATIONLIST;
  
 typedef struct _RASRPC_PBUSER
 {
     BOOL fOperatorDial;
     BOOL fPreviewPhoneNumber;
     BOOL fUseLocation;
     BOOL fShowLights;
     BOOL fShowConnectStatus;
     BOOL fCloseOnDial;
     BOOL fAllowLogonPhonebookEdits;
     BOOL fAllowLogonLocationEdits;
     BOOL fSkipConnectComplete;
     BOOL fNewEntryWizard;
     DWORD dwRedialAttempts;
     DWORD dwRedialSeconds;
     DWORD dwIdleDisconnectSeconds;
     BOOL fRedialOnLinkFailure;
     BOOL fPopupOnTopWhenRedialing;
     BOOL fExpandAutoDialQuery;
     DWORD dwCallbackMode;
     [unique] LPRASRPC_CALLBACKLIST pCallbacks;
     WCHAR pszLastCallbackByCaller[129];
     DWORD dwPhonebookMode;
     WCHAR pszPersonalFile[260];
     WCHAR pszAlternatePath[260];
     [unique] LPRASRPC_STRINGLIST pPhonebooks;
     [unique] LPRASRPC_STRINGLIST pAreaCodes;
     BOOL fUseAreaAndCountry;
     [unique] LPRASRPC_STRINGLIST pPrefixes;
     [unique] LPRASRPC_STRINGLIST pSuffixes;
     [unique] LPRASRPC_LOCATIONLIST pLocations;
     DWORD dwXPhonebook;
     DWORD dwYPhonebook;
     WCHAR pszDefaultEntry[257];
     BOOL fInitialized;
     BOOL fDirty;
 } RASRPC_PBUSER, *LPRASRPC_PBUSER;
  
  
  
  
 [
     uuid(8f09f000-b7ed-11ce-bbd2-00001a181cad),
     version(0.0),
     pointer_default(unique)
 ]
  
  
  
 interface dimsvc
 {
     
     
     DWORD
     RMprAdminServerGetInfo (
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwLevel,
         [out]               PDIM_INFORMATION_CONTAINER  pInfoStruct
         );
     
     
     
     DWORD
     RRasAdminConnectionEnum (
         [in]              DIM_HANDLE                  hDimServer,
         [in]              DWORD                       dwLevel,
         [in,out]          PDIM_INFORMATION_CONTAINER  pInfoStruct,
         [in]              DWORD                       dwPreferedMaximumLength,
         [out]             LPDWORD                     lpdwEntriesRead,
         [out]             LPDWORD                     lpdwTotalEntries,
         [in,out,unique]   LPDWORD                     lpdwResumeHandle
         );
     
     
     
     DWORD
     RRasAdminConnectionGetInfo (
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwLevel,
         [in]                DWORD                       hDimConnection,
         [out]               PDIM_INFORMATION_CONTAINER  pInfoStruct
         );
     
     
     
     DWORD
     RRasAdminConnectionClearStats (
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hDimConnection
         );
     
     
     
     DWORD
     RRasAdminPortEnum (
         [in]                DIM_HANDLE                 hDimServer,
         [in]                DWORD                      dwLevel,
         [in]                DWORD                      hRasConnection,
         [in,out]            PDIM_INFORMATION_CONTAINER pInfoStruct,
         [in]        DWORD                       dwPreferedMaximumLength,
         [out]               LPDWORD                    lpdwEntriesRead,
         [out]              LPDWORD                     lpdwTotalEntries,
         [in,out,unique]     LPDWORD                    lpdwResumeHandle
         );
     
     
     
     DWORD
     RRasAdminPortGetInfo (
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwLevel,
         [in]                DWORD                       hPort,
         [out]               PDIM_INFORMATION_CONTAINER  pInfoStruct
         );
     
     
     
     DWORD
     RRasAdminPortClearStats (
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hPort
         );
     
     
     DWORD 
     RRasAdminPortReset (
         [in]                DIM_HANDLE                 hDimServer,
         [in]                DWORD                      hPort
         );
  
  
     DWORD
     RRasAdminPortDisconnect (
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hPort
         );
     
     
     
     DWORD
     RRouterInterfaceTransportSetGlobalInfo(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwTransportId,
         [in]                PDIM_INTERFACE_CONTAINER    pInfoStruct
         );
     
     
     
     DWORD
     RRouterInterfaceTransportGetGlobalInfo(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwTransportId,
         [in,out]            PDIM_INTERFACE_CONTAINER    pInfoStruct
         );
     
     
     
     DWORD
     RRouterInterfaceGetHandle(
         [in]                DIM_HANDLE          hDimServer,
         [in,string]         LPWSTR              lpwsInterfaceName,
         [in,out]            LPDWORD             phInterface,
         [in]                DWORD               fIncludeClientInterfaces
         );
     
     
     
     DWORD
     RRouterInterfaceCreate(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwLevel,
         [in]                PDIM_INFORMATION_CONTAINER  pInfoStruct,
         [in,out]            LPDWORD                     phInterface
         );
     
     
     
     DWORD
     RRouterInterfaceGetInfo(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwLevel,
         [in,out]            PDIM_INFORMATION_CONTAINER  pInfoStruct,
         [in]                DWORD                       hInterface
         );
     
     
     
     DWORD
     RRouterInterfaceSetInfo(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwLevel,
         [in]                PDIM_INFORMATION_CONTAINER  pInfoStruct,
         [in]                DWORD                       hInterface
         );
     
     
     
     DWORD
     RRouterInterfaceDelete(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface
         );
     
     
     
     DWORD
     RRouterInterfaceTransportRemove(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface,
         [in]                DWORD                       dwTransportId
         );
     
     
     
     DWORD
     RRouterInterfaceTransportAdd(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface,
         [in]                DWORD                       dwTransportId,
         [in]                PDIM_INTERFACE_CONTAINER    pInfoStruct
         );
     
     
     
     DWORD
     RRouterInterfaceTransportGetInfo(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface,
         [in]                DWORD                       dwTransportId,
         [in,out]            PDIM_INTERFACE_CONTAINER    pInfoStruct
         );
     
     
     
     DWORD
     RRouterInterfaceTransportSetInfo(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface,
         [in]                DWORD                       dwTransportId,
         [in]                PDIM_INTERFACE_CONTAINER    pInfoStruct
         );
     
     
     
     DWORD
     RRouterInterfaceEnum (
         [in]                DIM_HANDLE                 hDimServer,
         [in]                DWORD                      dwLevel,
         [in,out]            PDIM_INFORMATION_CONTAINER pInfoStruct,
         [in]                DWORD               dwPreferedMaximumLength,
         [out]               LPDWORD                    lpdwEntriesRead,
         [out]               LPDWORD                    lpdwTotalEntries,
         [in,out,unique]     LPDWORD                    lpdwResumeHandle
         );
     
     
     
     DWORD
     RRouterInterfaceConnect(
         [in]                DIM_HANDLE                hDimServer,
         [in]                DWORD                     hInterface,
         [in]                ULONG_PTR                 hEvent,
         [in]                DWORD                     fBlocking,
         [in]                DWORD                     dwCallersProcessId
         );
     
     
     
     DWORD
     RRouterInterfaceDisconnect(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface
         );
     
     
     
     DWORD
     RRouterInterfaceUpdateRoutes(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface,
         [in]                DWORD                       dwTransportId,
         [in]                ULONG_PTR                   hEvent,
         [in]                DWORD                       dwClientProcessId
     );
     
     
     
     DWORD
     RRouterInterfaceQueryUpdateResult(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface,
         [in]                DWORD                       dwTransportId,
         [out]               LPDWORD                     pUpdateResult
     );
     
     
     
     DWORD
     RRouterInterfaceUpdatePhonebookInfo(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hInterface
         );
     
     
     
     DWORD
     RMIBEntryCreate(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwPid,
         [in]                DWORD                       dwRoutingPid,
         [in]                PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
     );
     
     
     
     DWORD
     RMIBEntryDelete(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwPid,
         [in]                DWORD                       dwRoutingPid,
         [in]                PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
     );
     
     
     
     DWORD
     RMIBEntrySet(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwPid,
         [in]                DWORD                       dwRoutingPid,
         [in]                PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
     );
     
     
     
     DWORD 
     RMIBEntryGet(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwPid,
         [in]                DWORD                       dwRoutingPid,
         [in,out]            PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
     );
     
     
     
     DWORD
     RMIBEntryGetFirst(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwPid,
         [in]                DWORD                       dwRoutingPid,
         [in,out]            PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
     );
     
     
     
     DWORD
     RMIBEntryGetNext(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwPid,
         [in]                DWORD                       dwRoutingPid,
         [in,out]            PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
     );
    
     DWORD 
     RMIBGetTrapInfo( 
         [in]                DIM_HANDLE                   hDimServer, 
         [in]                DWORD                        dwPid, 
         [in]                DWORD                        dwRoutingPid, 
         [in, out]           PDIM_MIB_ENTRY_CONTAINER     pInfoStruct 
     );
  
  
  
  
     DWORD
     RMIBSetTrapInfo( 
         [in]                DIM_HANDLE                  hDimServer, 
         [in]                DWORD                       dwPid, 
         [in]                DWORD                       dwRoutingPid, 
         [in]                ULONG_PTR                   hEvent, 
         [in]                DWORD                       dwClientProcessId, 
         [in, out]           PDIM_MIB_ENTRY_CONTAINER    pInfoStruct 
     );
  
  
  
     DWORD 
     RRasAdminConnectionNotification( 
         [in]                DIM_HANDLE                   hDimServer, 
         [in]                DWORD                        fRegister, 
         [in]                DWORD                        dwClientProcessId, 
         [in]                ULONG_PTR                    hEventNotification 
     );
  
  
  
     DWORD
     RRasAdminSendUserMessage(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hDimConnection,
         [in,string]         LPWSTR                      lpwszMessage
         );
     
     
     
     DWORD 
     RRouterDeviceEnum( 
         [in]                DIM_HANDLE                  hDimServer, 
         [in]                DWORD                       dwLevel, 
         [in, out]           PDIM_INFORMATION_CONTAINER  pInfoStruct, 
         [in, out]           LPDWORD                     lpdwTotalEntries
     );
  
  
  
     DWORD 
     RRouterInterfaceTransportCreate( 
         [in]                DIM_HANDLE                   hDimServer, 
         [in]                DWORD                        dwTransportId,
         [in, string]        LPWSTR                       lpwsTransportName, 
         [in]                PDIM_INTERFACE_CONTAINER   pInfoStruct, 
         [in, string]        LPWSTR                       lpwsDLLPath 
     );
  
  
  
     DWORD 
     RRouterInterfaceDeviceGetInfo( 
         [in]              DIM_HANDLE                     hDimServer, 
         [in]              DWORD                          dwLevel, 
         [in, out]         PDIM_INFORMATION_CONTAINER     pInfoStruct, 
         [in]              DWORD                          dwIndex, 
         [in]              DWORD                          hInterface 
     );
  
  
  
     DWORD 
     RRouterInterfaceDeviceSetInfo( 
         [in]              DIM_HANDLE                     hDimServer, 
         [in]              DWORD                          dwLevel, 
         [in]              PDIM_INFORMATION_CONTAINER     pInfoStruct, 
         [in]              DWORD                          dwIndex, 
         [in]              DWORD                          hInterface 
     );
  
  
  
     DWORD
     RRouterInterfaceSetCredentialsEx(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwLevel,
         [in]                PDIM_INFORMATION_CONTAINER  pInfoStruct,
         [in]                DWORD                       hInterface
         );
    
     
     DWORD
     RRouterInterfaceGetCredentialsEx(
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       dwLevel,
         [in,out]            PDIM_INFORMATION_CONTAINER  pInfoStruct,
         [in]                DWORD                       hInterface
         );
     
   
     DWORD 
     RRasAdminConnectionRemoveQuarantine( 
         [in]                DIM_HANDLE                  hDimServer,
         [in]                DWORD                       hRasConnection, 
         [in]                BOOL                        fIsIpAddress 
     );
  
  
  
     DWORD
     RMprAdminServerSetInfo(
         [in]                 DIM_HANDLE                   hDimServer, 
         [in]                 DWORD                        dwLevel, 
         [in]                 PDIM_INFORMATION_CONTAINER   pInfoStruct 
     );
  
  
  
     DWORD
     RMprAdminServerGetInfoEx(
         [in]                 DIM_HANDLE                    hDimServer, 
         [in, out]            PMPR_SERVER_EX_IDL            pServerConfig 
 ); 
  
  
  
 DWORD
 RRasAdminConnectionEnumEx (
     [in]                                    DIM_HANDLE                  hDimServer,
     [in]                                    PMPRAPI_OBJECT_HEADER_IDL   objectHeader,
     [in]                                    DWORD                       dwPreferedMaxLen,
     [out]                                   LPDWORD                     lpdwEntriesRead,
     [out]                                   LPDWORD                     lpdNumTotalElements,
     [out, size_is(,*lpdwEntriesRead)]       PRAS_CONNECTION_EX_IDL      *pRasConections,
     [in,out,unique]                         LPDWORD                     lpdwResumeHandle);
  
  
 DWORD
 RRasAdminConnectionGetInfoEx (
     [in]                DIM_HANDLE                  hDimServer,
     [in]                DWORD                       hDimConnection,
     [in]                PMPRAPI_OBJECT_HEADER_IDL   objectHeader,
     [out]               PRAS_CONNECTION_EX_IDL      pRasConnection
     );
  
  
 DWORD
 RMprAdminServerSetInfoEx (
     [in]                DIM_HANDLE                          hDimServer,
     [in]                PMPR_SERVER_SET_CONFIG_EX_IDL       pServerConfig);
  
  
 DWORD
 RRasAdminUpdateConnection(
     [in]            DIM_HANDLE                  hDimServer,
     [in]            DWORD                       hDimConnection,
     [in]            PRAS_UPDATE_CONNECTION_IDL  pServerConfig);
  
  
 DWORD
 RRouterInterfaceSetCredentialsLocal(
     [in]            DIM_HANDLE                 hDimServer,
     [in,string]     LPWSTR                     lpwsInterfaceName,
     [in,string]     LPWSTR                     lpwsUserName,
     [in,string]     LPWSTR                     lpwsDomainName,
     [in,string]     LPWSTR                     lpwsPassword);
     
 DWORD
 RRouterInterfaceGetCredentialsLocal(
     [in]            DIM_HANDLE                 hDimServer,
     [in,string]     LPWSTR                     lpwsInterfaceName,
     [out] [string]  LPWSTR                     *lpwsUserName,
     [out] [string]  LPWSTR                     *lpwsDomainName,
     [out] [string]  LPWSTR                     *lpwsPassword);
  
 DWORD
 RRouterInterfaceGetCustomInfoEx(
     [in]                DIM_HANDLE                  hDimServer,
     [in]                DWORD                       hInterface,
     [in,out]            PMPR_IF_CUSTOMINFOEX_IDL    pIfCustomConfig
     );
     
 DWORD
 RRouterInterfaceSetCustomInfoEx(
     [in]                DIM_HANDLE                  hDimServer,
     [in]                DWORD                       hInterface,
     [in,out]            PMPR_IF_CUSTOMINFOEX_IDL    pIfCustomConfig
     );
 }
  
  
 [
 uuid(20610036-fa22-11cf-9823-00a0c911e5df),
 version(1.0)
 ]
  
 interface rasrpc
 {
  
 void Opnum0NotUsedOnWire(void);
  
 void Opnum1NotUsedOnWire(void);
  
 void Opnum2NotUsedOnWire(void);
  
 void Opnum3NotUsedOnWire(void);
  
 void Opnum4NotUsedOnWire(void);
  
  
 DWORD
 RasRpcDeleteEntry(
     [in] handle_t h,
     [in, string] LPWSTR lpszPhonebook,
     [in, string] LPWSTR lpszEntry
     );
  
 void Opnum6NotUsedOnWire(void);
  
 void Opnum7NotUsedOnWire(void);
  
 void Opnum8NotUsedOnWire(void);
  
 DWORD
 RasRpcGetUserPreferences(
     [in] handle_t h,
     [in, out] LPRASRPC_PBUSER pUser,
     [in] DWORD dwMode
     );
  
 DWORD
 RasRpcSetUserPreferences(
     [in] handle_t h,
     [in] LPRASRPC_PBUSER pUser,
     [in] DWORD dwMode
     );
  
 UINT
 RasRpcGetSystemDirectory(
     [in] handle_t h,
     [in, out, string, size_is(uSize)] LPWSTR lpBuffer,
     [in, range(0, RASRPC_MAX_PATH)] UINT uSize
     );
  
  
 DWORD
 RasRpcSubmitRequest (
     [in] handle_t h,
     [in, out, unique, size_is(dwcbBufSize)] PBYTE pReqBuffer,
     [in] DWORD dwcbBufSize
     );
  
 void Opnum13NotUsedOnWire(void);
  
 DWORD
 RasRpcGetInstalledProtocolsEx(
     [in] handle_t h,
     [in] BOOL fRouter,
     [in] BOOL fRasCli,
     [in] BOOL fRasSrv
     );    
  
 DWORD
 RasRpcGetVersion(
     [in] handle_t h,
     [in, out, ref] LPDWORD pdwVersion
 );
  
 void Opnum16NotUsedOnWire(void);
 }
 [
     uuid(66a2db1b-d706-11d0-a37b-00c04fc9da04),
     helpstring("IRemoteNetworkConfig Interface"),
     pointer_default(unique)
 ]
 interface IRemoteNetworkConfig : IUnknown
 {
     HRESULT UpgradeRouterConfig();
     HRESULT SetUserConfig(
         [in] LPCOLESTR pszService,
         [in] LPCOLESTR pszNewGroup
     );
 };
  
  
 [
     uuid(66a2db20-d706-11d0-a37b-00c04fc9da04),
     helpstring("IRemoteRouterRestart Interface"),
     pointer_default(unique)
 ]
 interface IRemoteRouterRestart : IUnknown
 {
     HRESULT RestartRouter(
         [in] DWORD dwFlags
     );
 };
  
  
 [
     uuid(66a2db21-d706-11d0-a37b-00c04fc9da04),
     helpstring("IRemoteSetDnsConfig Interface"),
     pointer_default(unique)
 ]
 interface IRemoteSetDnsConfig : IUnknown
 {
     HRESULT SetDnsConfig(
         [in] DWORD dwConfigId,
         [in] DWORD dwNewValue
     );
 };
  
  
 [
     uuid(66a2db22-d706-11d0-a37b-00c04fc9da04),
     helpstring("IRemoteICFICSConfig Interface"),
     pointer_default(unique)
 ]
 interface IRemoteICFICSConfig : IUnknown
 {
     //The following methods are for determining if 
     // ICF/ICS is enabled on any connection
     HRESULT GetIcfEnabled(
         [out] BOOL * status
     );
     HRESULT GetIcsEnabled(
         [out] BOOL * status
     );
 };
  
 [
     uuid(67e08fc2-2984-4b62-b92e-fc1aae64bbbb),
     helpstring("IRemoteStringIdConfig Interface"),
     pointer_default(unique)
 ]
 interface IRemoteStringIdConfig : IUnknown
 {
     HRESULT GetStringFromId([in] UINT stringId, [out] BSTR * pBstrName);
 };
  
 [
     uuid(6139d8a4-e508-4ebb-bac7-d7f275145897),
     helpstring("IRemoteIPV6Config Interface"),
     pointer_default(unique)
 ]
 interface IRemoteIPV6Config : IUnknown
 {
     typedef struct tagIPV6Address
     {
         unsigned char bytes[16];
     }IPV6Address;
  
     HRESULT GetAddressList(
         [in, string] wchar_t *pszInterfaceName, 
         [out] DWORD *pdwNumAddresses,  
         [out, size_is(, *pdwNumAddresses)] IPV6Address **ppIPV6AddressList,
         [in] DWORD dwIfIndex
     );
 };
  
 [
     uuid(5ff9bdf6-bd91-4d8b-a614-d6317acc8dd8),
     helpstring("IRemoteSstpCertCheck Interface"),
     pointer_default(unique)
 ]
 interface IRemoteSstpCertCheck : IUnknown
 {
 #define PCWSTR      [string] const wchar_t*
  
     HRESULT CheckIfCertificateAllowedRR(
         [in] PCWSTR adminCertName, 
         [in, out] PSSTP_CERT_INFO_1 certSha1,
         [in, out] PSSTP_CERT_INFO_1 certSha256
     );
};