/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: mpradmin.h Abstract: This file contains the structures, defines and function prototypes for the following APIs: MprAdminIsServiceRunning MprAdminServerConnect MprAdminServerDisconnect MprAdminBufferFree MprAdminPortEnum MprAdminConnectionEnum MprAdminPortGetInfo MprAdminConnectionGetInfo MprAdminPortClearStats MprAdminPortReset MprAdminConnectionClearStats MprAdminPortDisconnect MprAdminGetErrorString MprAdminAcceptNewConnection MprAdminAcceptNewLink MprAdminConnectionHangupNotification MprAdminLinkHangupNotification MprAdminGetIpAddressForUser MprAdminReleaseIpAddress MprAdminInitializeDll MprAdminTerminateDll MprAdminAcceptNewConnection2 MprAdminConnectionHangupNotification2 MprAdminUserGetInfo MprAdminUserSetInfo MprAdminSendUserMessage MprAdminGetPDCServer MprAdminRegisterConnectionNotification MprAdminDeregisterConnectionNotification MprAdminIsServiceRunning MprAdminServerConnect MprAdminServerDisconnect MprAdminBufferFree MprAdminServerGetInfo MprAdminGetErrorString MprAdminTransportCreate MprAdminTransportSetInfo MprAdminTransportGetInfo MprAdminInterfaceCreate MprAdminInterfaceDelete MprAdminInterfaceGetInfo MprAdminInterfaceTransportAdd MprAdminInterfaceTransportGetInfo MprAdminInterfaceTransportSetInfo MprAdminInterfaceTransportRemove MprAdminInterfaceGetHandle MprAdminInterfaceSetCredentials MprAdminInterfaceGetCredentials MprAdminInterfaceEnum MprAdminInterfaceConnect MprAdminInterfaceDisconnect MprAdminInterfaceUpdateRoutes MprAdminInterfaceQueryUpdateResult MprAdminInterfaceUpdatePhonebookInfo MprAdminMIBServerConnect MprAdminMIBServerDisconnect MprAdminMIBBufferFree MprAdminMIBEntryCreate MprAdminMIBEntryDelete MprAdminMIBEntryGet MprAdminMIBEntrySet MprAdminMIBEntryGetFirst MprAdminMIBEntryGetNext MprAdminMIBSetTrapInfo MprAdminMIBGetTrapInfo All MIB APIs operate with the conceptual MIB row. MprConfigServerConnect MprConfigServerDisconnect MprConfigBufferFree MprConfigServerGetInfo MprConfigServerBackup MprConfigServerRestore MprConfigTransportCreate MprConfigTransportDelete MprConfigTransportGetHandle MprConfigTransportSetInfo MprConfigTransportGetInfo MprConfigTransportEnum MprConfigInterfaceCreate MprConfigInterfaceDelete MprConfigInterfaceGetHandle MprConfigInterfaceGetInfo MprConfigInterfaceEnum MprConfigInterfaceTransportAdd MprConfigInterfaceTransportRemove MprConfigInterfaceTransportGetHandle MprConfigInterfaceTransportGetInfo MprConfigInterfaceTransportSetInfo MprConfigInterfaceTransportEnum MprSetupIpInIpInterfaceFriendlyNameEnum MprSetupIpInIpInterfaceFriendlyNameFree MprSetupIpInIpInterfaceFriendlyNameCreate MprSetupIpInIpInterfaceFriendlyNameDelete --*/ #ifndef __ROUTING_MPRADMIN_H__ #define __ROUTING_MPRADMIN_H__ #if _MSC_VER > 1000 #pragma once #endif #include #include #ifdef __cplusplus extern "C" { #endif //#if(WINVER >= 0x0403) // // Name of the Routing and RemoteAccess Service // #define RRAS_SERVICE_NAME TEXT("RemoteAccess") // // Protocol IDs // #define PID_IPX 0x0000002B #define PID_IP 0x00000021 #define PID_NBF 0x0000003F #define PID_ATALK 0x00000029 #define MAX_INTERFACE_NAME_LEN 256 #define MAX_TRANSPORT_NAME_LEN 40 #define MAX_MEDIA_NAME 16 #define MAX_PORT_NAME 16 #define MAX_DEVICE_NAME 128 #define MAX_PHONE_NUMBER_LEN 128 #define MAX_DEVICETYPE_NAME 16 // // MPR Interface structures and definitions. // // // MPR Interface types // 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_CONNECTION_STATE { ROUTER_IF_STATE_UNREACHABLE, ROUTER_IF_STATE_DISCONNECTED, ROUTER_IF_STATE_CONNECTING, ROUTER_IF_STATE_CONNECTED } ROUTER_CONNECTION_STATE; #define MPR_INTERFACE_OUT_OF_RESOURCES 0x00000001 #define MPR_INTERFACE_ADMIN_DISABLED 0x00000002 #define MPR_INTERFACE_CONNECTION_FAILURE 0x00000004 #define MPR_INTERFACE_SERVICE_PAUSED 0x00000008 #define MPR_INTERFACE_DIALOUT_HOURS_RESTRICTION 0x00000010 #define MPR_INTERFACE_NO_MEDIA_SENSE 0x00000020 #define MPR_INTERFACE_NO_DEVICE 0x00000040 typedef struct _MPR_INTERFACE_0 { IN OUT WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1]; OUT HANDLE hInterface; IN OUT BOOL fEnabled; IN OUT ROUTER_INTERFACE_TYPE dwIfType; OUT ROUTER_CONNECTION_STATE dwConnectionState; OUT DWORD fUnReachabilityReasons; OUT DWORD dwLastError; } MPR_INTERFACE_0, *PMPR_INTERFACE_0; typedef struct _MPR_IPINIP_INTERFACE_0 { WCHAR wszFriendlyName[MAX_INTERFACE_NAME_LEN+1]; GUID Guid; }MPR_IPINIP_INTERFACE_0, *PMPR_IPINIP_INTERFACE_0; #if(WINVER >= 0x0500) typedef struct _MPR_INTERFACE_1 { IN OUT WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1]; OUT HANDLE hInterface; IN OUT BOOL fEnabled; IN OUT ROUTER_INTERFACE_TYPE dwIfType; OUT ROUTER_CONNECTION_STATE dwConnectionState; OUT DWORD fUnReachabilityReasons; OUT DWORD dwLastError; OUT LPWSTR lpwsDialoutHoursRestriction; } MPR_INTERFACE_1, *PMPR_INTERFACE_1; // // MPR_INTERFACE_2 definitions // #define MPR_MaxDeviceType RAS_MaxDeviceType #define MPR_MaxPhoneNumber RAS_MaxPhoneNumber #define MPR_MaxIpAddress RAS_MaxIpAddress #define MPR_MaxIpxAddress RAS_MaxIpxAddress #define MPR_MaxEntryName RAS_MaxEntryName #define MPR_MaxDeviceName RAS_MaxDeviceName #define MPR_MaxCallbackNumber RAS_MaxCallbackNumber #define MPR_MaxAreaCode RAS_MaxAreaCode #define MPR_MaxPadType RAS_MaxPadType #define MPR_MaxX25Address RAS_MaxX25Address #define MPR_MaxFacilities RAS_MaxFacilities #define MPR_MaxUserData RAS_MaxUserData // // MPR_INTERFACE_2 'dwfOptions' bit flags. // #define MPRIO_SpecificIpAddr RASEO_SpecificIpAddr #define MPRIO_SpecificNameServers RASEO_SpecificNameServers #define MPRIO_IpHeaderCompression RASEO_IpHeaderCompression #define MPRIO_RemoteDefaultGateway RASEO_RemoteDefaultGateway #define MPRIO_DisableLcpExtensions RASEO_DisableLcpExtensions #define MPRIO_SwCompression RASEO_SwCompression #define MPRIO_RequireEncryptedPw RASEO_RequireEncryptedPw #define MPRIO_RequireMsEncryptedPw RASEO_RequireMsEncryptedPw #define MPRIO_RequireDataEncryption RASEO_RequireDataEncryption #define MPRIO_NetworkLogon RASEO_NetworkLogon #define MPRIO_PromoteAlternates RASEO_PromoteAlternates #define MPRIO_SecureLocalFiles RASEO_SecureLocalFiles #define MPRIO_RequireEAP RASEO_RequireEAP #define MPRIO_RequirePAP RASEO_RequirePAP #define MPRIO_RequireSPAP RASEO_RequireSPAP #define MPRIO_SharedPhoneNumbers RASEO_SharedPhoneNumbers #define MPRIO_RequireCHAP RASEO_RequireCHAP #define MPRIO_RequireMsCHAP RASEO_RequireMsCHAP #define MPRIO_RequireMsCHAP2 RASEO_RequireMsCHAP2 #if (WINVER >= 0x501) #define MPRIO_IpSecPreSharedKey 0x80000000 #endif // // MPR_INTERFACE_2 'dwProtocols' bit flags. // #define MPRNP_Ipx RASNP_Ipx #define MPRNP_Ip RASNP_Ip // // MPR_INTERFACE_2 'szDeviceType' default strings. // #define MPRDT_Modem RASDT_Modem #define MPRDT_Isdn RASDT_Isdn #define MPRDT_X25 RASDT_X25 #define MPRDT_Vpn RASDT_Vpn #define MPRDT_Pad RASDT_Pad #define MPRDT_Generic RASDT_Generic #define MPRDT_Serial RASDT_Serial #define MPRDT_FrameRelay RASDT_FrameRelay #define MPRDT_Atm RASDT_Atm #define MPRDT_Sonet RASDT_Sonet #define MPRDT_SW56 RASDT_SW56 #define MPRDT_Irda RASDT_Irda #define MPRDT_Parallel RASDT_Parallel // // MPR_INTERFACE_2 'dwType' settings // #define MPRET_Phone RASET_Phone #define MPRET_Vpn RASET_Vpn #define MPRET_Direct RASET_Direct // // MPR_INTERFACE_2 'dwDialMode' values. // #define MPRDM_DialFirst 0 #define MPRDM_DialAll RASEDM_DialAll #define MPRDM_DialAsNeeded RASEDM_DialAsNeeded // // MPR_INTERFACE_2 'dwIdleDisconnectSeconds' constants. // #define MPRIDS_Disabled RASIDS_Disabled #define MPRIDS_UseGlobalValue RASIDS_UseGlobalValue // // MPR_INTERFACE_2 encryption types. // #define MPR_ET_None ET_None #define MPR_ET_Require ET_Require #define MPR_ET_RequireMax ET_RequireMax #define MPR_ET_Optional ET_Optional // // MPR_INTERFACE_2 Vpn strategies // #define MPR_VS_Default VS_Default #define MPR_VS_PptpOnly VS_PptpOnly #define MPR_VS_PptpFirst VS_PptpFirst #define MPR_VS_L2tpOnly VS_L2tpOnly #define MPR_VS_L2tpFirst VS_L2tpFirst // // Used to create/get/set a demand dial interface plus its // ras configuration. // typedef struct _MPR_INTERFACE_2 { IN OUT WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1]; OUT HANDLE hInterface; IN OUT BOOL fEnabled; IN OUT ROUTER_INTERFACE_TYPE dwIfType; OUT ROUTER_CONNECTION_STATE dwConnectionState; OUT DWORD fUnReachabilityReasons; OUT DWORD dwLastError; // // Demand dial-specific properties // DWORD dwfOptions; // // Location/phone number // WCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ]; PWCHAR szAlternates; // // PPP/Ip // DWORD ipaddr; DWORD ipaddrDns; DWORD ipaddrDnsAlt; DWORD ipaddrWins; DWORD ipaddrWinsAlt; // // NetProtocols // DWORD dwfNetProtocols; // // Device // WCHAR szDeviceType[ MPR_MaxDeviceType + 1 ]; WCHAR szDeviceName[ MPR_MaxDeviceName + 1 ]; // // X.25 // WCHAR szX25PadType[ MPR_MaxPadType + 1 ]; WCHAR szX25Address[ MPR_MaxX25Address + 1 ]; WCHAR szX25Facilities[ MPR_MaxFacilities + 1 ]; WCHAR szX25UserData[ MPR_MaxUserData + 1 ]; DWORD dwChannels; // // Multilink // DWORD dwSubEntries; DWORD dwDialMode; DWORD dwDialExtraPercent; DWORD dwDialExtraSampleSeconds; DWORD dwHangUpExtraPercent; DWORD dwHangUpExtraSampleSeconds; // // Idle timeout // DWORD dwIdleDisconnectSeconds; // // Entry Type // DWORD dwType; // // EncryptionType // DWORD dwEncryptionType; // // EAP information // DWORD dwCustomAuthKey; DWORD dwCustomAuthDataSize; LPBYTE lpbCustomAuthData; // // Guid of the connection // GUID guidId; // // Vpn Strategy // DWORD dwVpnStrategy; } MPR_INTERFACE_2, *PMPR_INTERFACE_2; // // Used to set/get per-link information for multilinked demand // dial interfaces. // typedef struct _MPR_DEVICE_0 { // // Device // WCHAR szDeviceType[ MPR_MaxDeviceType + 1 ]; WCHAR szDeviceName[ MPR_MaxDeviceName + 1 ]; } MPR_DEVICE_0, *PMPR_DEVICE_0; typedef struct _MPR_DEVICE_1 { // // Device // WCHAR szDeviceType[ MPR_MaxDeviceType + 1 ]; WCHAR szDeviceName[ MPR_MaxDeviceName + 1 ]; // // Phone numbers // WCHAR szLocalPhoneNumber[ MPR_MaxPhoneNumber + 1 ]; PWCHAR szAlternates; } MPR_DEVICE_1, *PMPR_DEVICE_1; // // Used to get/set extended credentials information such as // eap credentials info. // typedef struct _MPR_CREDENTIALSEX_0 { DWORD dwSize; LPBYTE lpbCredentialsInfo; } MPR_CREDENTIALSEX_0, *PMPR_CREDENTIALSEX_0; typedef struct _MPR_CREDENTIALSEX_1 { DWORD dwSize; LPBYTE lpbCredentialsInfo; } MPR_CREDENTIALSEX_1, *PMPR_CREDENTIALSEX_1; #endif /* WINVER >= 0x0500 */ typedef struct _MPR_TRANSPORT_0 { OUT DWORD dwTransportId; OUT HANDLE hTransport; OUT WCHAR wszTransportName[MAX_TRANSPORT_NAME_LEN+1]; } MPR_TRANSPORT_0, *PMPR_TRANSPORT_0; typedef struct _MPR_IFTRANSPORT_0 { OUT DWORD dwTransportId; OUT HANDLE hIfTransport; OUT WCHAR wszIfTransportName[MAX_TRANSPORT_NAME_LEN+1]; } MPR_IFTRANSPORT_0, *PMPR_IFTRANSPORT_0; typedef struct _MPR_SERVER_0 { OUT BOOL fLanOnlyMode; OUT DWORD dwUpTime; // In seconds OUT DWORD dwTotalPorts; OUT DWORD dwPortsInUse; } MPR_SERVER_0, *PMPR_SERVER_0; // // Port condition codes // 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; // // Hardware condition codes // typedef enum _RAS_HARDWARE_CONDITION { RAS_HARDWARE_OPERATIONAL, RAS_HARDWARE_FAILURE } RAS_HARDWARE_CONDITION; typedef struct _RAS_PORT_0 { OUT HANDLE hPort; OUT HANDLE hConnection; OUT RAS_PORT_CONDITION dwPortCondition; OUT DWORD dwTotalNumberOfCalls; OUT DWORD dwConnectDuration; // In seconds OUT WCHAR wszPortName[ MAX_PORT_NAME + 1 ]; OUT WCHAR wszMediaName[ MAX_MEDIA_NAME + 1 ]; OUT WCHAR wszDeviceName[ MAX_DEVICE_NAME + 1 ]; OUT WCHAR wszDeviceType[ MAX_DEVICETYPE_NAME + 1 ]; } RAS_PORT_0, *PRAS_PORT_0; typedef struct _RAS_PORT_1 { OUT HANDLE hPort; OUT HANDLE hConnection; OUT RAS_HARDWARE_CONDITION dwHardwareCondition; OUT DWORD dwLineSpeed; // in bits/second OUT DWORD dwBytesXmited; OUT DWORD dwBytesRcved; OUT DWORD dwFramesXmited; OUT DWORD dwFramesRcved; OUT DWORD dwCrcErr; OUT DWORD dwTimeoutErr; OUT DWORD dwAlignmentErr; OUT DWORD dwHardwareOverrunErr; OUT DWORD dwFramingErr; OUT DWORD dwBufferOverrunErr; OUT DWORD dwCompressionRatioIn; OUT DWORD dwCompressionRatioOut; } RAS_PORT_1, *PRAS_PORT_1; // // Maximum length of address string, e.g. "255.255.255.255" for IP. // #define IPADDRESSLEN 15 #define IPXADDRESSLEN 22 #define ATADDRESSLEN 32 typedef struct _PPP_NBFCP_INFO { OUT DWORD dwError; OUT WCHAR wszWksta[ NETBIOS_NAME_LEN + 1 ]; } PPP_NBFCP_INFO; typedef struct _PPP_IPCP_INFO { OUT DWORD dwError; OUT WCHAR wszAddress[ IPADDRESSLEN + 1 ]; OUT WCHAR wszRemoteAddress[ IPADDRESSLEN + 1 ]; } PPP_IPCP_INFO; // // PPP_IPCP_INFO2 dwOptions values. // #define PPP_IPCP_VJ 0x00000001 typedef struct _PPP_IPCP_INFO2 { OUT DWORD dwError; OUT WCHAR wszAddress[ IPADDRESSLEN + 1 ]; OUT WCHAR wszRemoteAddress[ IPADDRESSLEN + 1 ]; OUT DWORD dwOptions; OUT DWORD dwRemoteOptions; } PPP_IPCP_INFO2; typedef struct _PPP_IPXCP_INFO { OUT DWORD dwError; OUT WCHAR wszAddress[ IPXADDRESSLEN + 1 ]; } PPP_IPXCP_INFO; typedef struct _PPP_ATCP_INFO { OUT DWORD dwError; OUT WCHAR wszAddress[ ATADDRESSLEN + 1 ]; } PPP_ATCP_INFO; typedef struct _PPP_INFO { OUT PPP_NBFCP_INFO nbf; OUT PPP_IPCP_INFO ip; OUT PPP_IPXCP_INFO ipx; OUT PPP_ATCP_INFO at; } PPP_INFO; #if(WINVER >= 0x0500) // // PPP_CCP dwCompressionAlgorithm values. // #define RASCCPCA_MPPC 0x00000006 #define RASCCPCA_STAC 0x00000005 // // PPP_CCP dwOptions values. // #define PPP_CCP_COMPRESSION 0x00000001 #define PPP_CCP_ENCRYPTION40BITOLD 0x00000010 #define PPP_CCP_ENCRYPTION40BIT 0x00000020 #define PPP_CCP_ENCRYPTION128BIT 0x00000040 #define PPP_CCP_ENCRYPTION56BIT 0x00000080 #define PPP_CCP_HISTORYLESS 0x01000000 typedef struct _PPP_CCP_INFO { OUT DWORD dwError; OUT DWORD dwCompressionAlgorithm; OUT DWORD dwOptions; OUT DWORD dwRemoteCompressionAlgorithm; OUT DWORD dwRemoteOptions; } PPP_CCP_INFO; // // PPP_LCP dwAuthenticatonProtocol values. // #define PPP_LCP_PAP 0xC023 #define PPP_LCP_SPAP 0xC027 #define PPP_LCP_CHAP 0xC223 #define PPP_LCP_EAP 0xC227 // // PPP_LCP dwAuthenticatonData values. // #define PPP_LCP_CHAP_MD5 0x05 #define PPP_LCP_CHAP_MS 0x80 #define PPP_LCP_CHAP_MSV2 0x81 // // PPP_LCP dwOption values // #define PPP_LCP_MULTILINK_FRAMING 0x00000001 #define PPP_LCP_PFC 0x00000002 #define PPP_LCP_ACFC 0x00000004 #define PPP_LCP_SSHF 0x00000008 #define PPP_LCP_DES_56 0x00000010 #define PPP_LCP_3_DES 0x00000020 typedef struct _PPP_LCP_INFO { OUT DWORD dwError; OUT DWORD dwAuthenticationProtocol; OUT DWORD dwAuthenticationData; OUT DWORD dwRemoteAuthenticationProtocol; OUT DWORD dwRemoteAuthenticationData; OUT DWORD dwTerminateReason; OUT DWORD dwRemoteTerminateReason; OUT DWORD dwOptions; OUT DWORD dwRemoteOptions; OUT DWORD dwEapTypeId; OUT DWORD dwRemoteEapTypeId; } PPP_LCP_INFO; typedef struct _PPP_INFO_2 { OUT PPP_NBFCP_INFO nbf; OUT PPP_IPCP_INFO2 ip; OUT PPP_IPXCP_INFO ipx; OUT PPP_ATCP_INFO at; OUT PPP_CCP_INFO ccp; OUT PPP_LCP_INFO lcp; } PPP_INFO_2; #endif /* WINVER >= 0x0500 */ // // Possible bits set in Connection Flags field // #define RAS_FLAGS_PPP_CONNECTION 0x00000001 #define RAS_FLAGS_MESSENGER_PRESENT 0x00000002 #if(WINVER < 0x0501) #define RAS_FLAGS_RAS_CONNECTION 0x00000004 #endif typedef struct _RAS_CONNECTION_0 { OUT HANDLE hConnection; OUT HANDLE hInterface; OUT DWORD dwConnectDuration; // In seconds OUT ROUTER_INTERFACE_TYPE dwInterfaceType; OUT DWORD dwConnectionFlags; OUT WCHAR wszInterfaceName[ MAX_INTERFACE_NAME_LEN + 1 ]; OUT WCHAR wszUserName[ UNLEN + 1 ]; OUT WCHAR wszLogonDomain[ DNLEN + 1 ]; OUT WCHAR wszRemoteComputer[ NETBIOS_NAME_LEN + 1 ]; } RAS_CONNECTION_0, *PRAS_CONNECTION_0; typedef struct _RAS_CONNECTION_1 { OUT HANDLE hConnection; OUT HANDLE hInterface; OUT PPP_INFO PppInfo; OUT DWORD dwBytesXmited; OUT DWORD dwBytesRcved; OUT DWORD dwFramesXmited; OUT DWORD dwFramesRcved; OUT DWORD dwCrcErr; OUT DWORD dwTimeoutErr; OUT DWORD dwAlignmentErr; OUT DWORD dwHardwareOverrunErr; OUT DWORD dwFramingErr; OUT DWORD dwBufferOverrunErr; OUT DWORD dwCompressionRatioIn; OUT DWORD dwCompressionRatioOut; } RAS_CONNECTION_1, *PRAS_CONNECTION_1; #if(WINVER >= 0x0500) typedef struct _RAS_CONNECTION_2 { OUT HANDLE hConnection; OUT WCHAR wszUserName[ UNLEN + 1 ]; OUT ROUTER_INTERFACE_TYPE dwInterfaceType; OUT GUID guid; OUT PPP_INFO_2 PppInfo2; } RAS_CONNECTION_2, *PRAS_CONNECTION_2; #endif /* WINVER >= 0x0500 */ // // Structures used by the MPRADMIN USER APIs. Use level 0 to get/set this // structure. // // // Bits indicating user's Remote Access privileges and mask to isolate // call back privilege. // // Note: Bit 0 MUST represent NoCallback due to a quirk of the "userparms" // storage method. When a new LAN Manager user is created, bit 0 of the // userparms field is set to 1 and all other bits are 0. These bits are // arranged so this "no Dial-In info" state maps to the "default Dial-In // privilege" state. #define RASPRIV_NoCallback 0x01 #define RASPRIV_AdminSetCallback 0x02 #define RASPRIV_CallerSetCallback 0x04 #define RASPRIV_DialinPrivilege 0x08 // // The following are flags for the bfPrivilege2 member of RAS_USER_1 // structure // #define RASPRIV2_DialinPolicy 0x1 #define RASPRIV_CallbackType (RASPRIV_AdminSetCallback \ | RASPRIV_CallerSetCallback \ | RASPRIV_NoCallback) typedef struct _RAS_USER_0 { OUT BYTE bfPrivilege; OUT WCHAR wszPhoneNumber[ MAX_PHONE_NUMBER_LEN + 1]; } RAS_USER_0, *PRAS_USER_0; typedef struct _RAS_USER_1 { OUT BYTE bfPrivilege; OUT WCHAR wszPhoneNumber[ MAX_PHONE_NUMBER_LEN + 1]; OUT BYTE bfPrivilege2; } RAS_USER_1, *PRAS_USER_1; // // Used as RPC binding handle to server // typedef HANDLE RAS_SERVER_HANDLE; typedef HANDLE MPR_SERVER_HANDLE; typedef HANDLE MIB_SERVER_HANDLE; // // RAS ADMIN APIs // DWORD APIENTRY MprAdminConnectionEnum( IN RAS_SERVER_HANDLE hRasServer, IN DWORD dwLevel, OUT LPBYTE * lplpbBuffer, IN DWORD dwPrefMaxLen, OUT LPDWORD lpdwEntriesRead, OUT LPDWORD lpdwTotalEntries, IN LPDWORD lpdwResumeHandle OPTIONAL ); DWORD APIENTRY MprAdminPortEnum( IN RAS_SERVER_HANDLE hRasServer, IN DWORD dwLevel, IN HANDLE hConnection, OUT LPBYTE * lplpbBuffer, IN DWORD dwPrefMaxLen, OUT LPDWORD lpdwEntriesRead, OUT LPDWORD lpdwTotalEntries, IN LPDWORD lpdwResumeHandle OPTIONAL ); DWORD APIENTRY MprAdminConnectionGetInfo( IN RAS_SERVER_HANDLE hRasServer, IN DWORD dwLevel, IN HANDLE hConnection, OUT LPBYTE * lplpbBuffer ); DWORD APIENTRY MprAdminPortGetInfo( IN RAS_SERVER_HANDLE hRasServer, IN DWORD dwLevel, IN HANDLE hPort, OUT LPBYTE * lplpbBuffer ); DWORD APIENTRY MprAdminConnectionClearStats( IN RAS_SERVER_HANDLE hRasServer, IN HANDLE hConnection ); DWORD APIENTRY MprAdminPortClearStats( IN RAS_SERVER_HANDLE hRasServer, IN HANDLE hPort ); DWORD APIENTRY MprAdminPortReset( IN RAS_SERVER_HANDLE hRasServer, IN HANDLE hPort ); DWORD APIENTRY MprAdminPortDisconnect( IN RAS_SERVER_HANDLE hRasServer, IN HANDLE hPort ); BOOL APIENTRY MprAdminAcceptNewConnection( IN RAS_CONNECTION_0 * pRasConnection0, IN RAS_CONNECTION_1 * pRasConnection1 ); #if(WINVER >= 0x0500) BOOL APIENTRY MprAdminAcceptNewConnection2( IN RAS_CONNECTION_0 * pRasConnection0, IN RAS_CONNECTION_1 * pRasConnection1, IN RAS_CONNECTION_2 * pRasConnection2 ); #endif /* WINVER >= 0x0500 */ BOOL APIENTRY MprAdminAcceptNewLink ( IN RAS_PORT_0 * pRasPort0, IN RAS_PORT_1 * pRasPort1 ); VOID APIENTRY MprAdminConnectionHangupNotification( IN RAS_CONNECTION_0 * pRasConnection0, IN RAS_CONNECTION_1 * pRasConnection1 ); #if(WINVER >= 0x0500) VOID APIENTRY MprAdminConnectionHangupNotification2( IN RAS_CONNECTION_0 * pRasConnection0, IN RAS_CONNECTION_1 * pRasConnection1, IN RAS_CONNECTION_2 * pRasConnection2 ); #endif /* WINVER >= 0x0500 */ #if (WINVER >= 0x501) DWORD APIENTRY MprAdminConnectionRemoveQuarantine( IN HANDLE hRasServer, IN HANDLE hRasConnection, IN BOOL fIsIpAddress ); #endif VOID APIENTRY MprAdminLinkHangupNotification ( IN RAS_PORT_0 * pRasPort0, IN RAS_PORT_1 * pRasPort1 ); DWORD APIENTRY MprAdminGetIpAddressForUser ( IN WCHAR * lpwszUserName, IN WCHAR * lpwszPortName, IN OUT DWORD * lpdwIpAddress, OUT BOOL * bNotifyRelease ); VOID APIENTRY MprAdminReleaseIpAddress ( IN WCHAR * lpszUserName, IN WCHAR * lpszPortName, IN DWORD * lpdwIpAddress ); #if(WINVER >= 0x0500) DWORD APIENTRY MprAdminInitializeDll( VOID ); DWORD APIENTRY MprAdminTerminateDll( VOID ); #endif // // MprAdminUser APIs // DWORD APIENTRY MprAdminUserGetInfo( IN const WCHAR * lpszServer, IN const WCHAR * lpszUser, IN DWORD dwLevel, OUT LPBYTE lpbBuffer ); DWORD APIENTRY MprAdminUserSetInfo( IN const WCHAR * lpszServer, IN const WCHAR * lpszUser, IN DWORD dwLevel, IN const LPBYTE lpbBuffer ); #if(WINVER >= 0x0500) DWORD APIENTRY MprAdminSendUserMessage( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hConnection, IN LPWSTR lpwszMessage ); #endif /* WINVER >= 0x0500 */ DWORD APIENTRY MprAdminGetPDCServer( IN const WCHAR * lpszDomain, IN const WCHAR * lpszServer, OUT LPWSTR lpszPDCServer ); // // Router APIs // BOOL APIENTRY MprAdminIsServiceRunning( IN LPWSTR lpwsServerName ); DWORD APIENTRY MprAdminServerConnect( IN LPWSTR lpwsServerName OPTIONAL, OUT MPR_SERVER_HANDLE * phMprServer ); VOID APIENTRY MprAdminServerDisconnect( IN MPR_SERVER_HANDLE hMprServer ); #if (WINVER >= 0x501) DWORD APIENTRY MprAdminServerGetCredentials( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwLevel, IN LPBYTE * lplpbBuffer ); DWORD APIENTRY MprAdminServerSetCredentials( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwLevel, IN LPBYTE lpbBuffer ); #endif DWORD APIENTRY MprAdminBufferFree( IN LPVOID pBuffer ); DWORD APIENTRY MprAdminGetErrorString( IN DWORD dwError, OUT LPWSTR * lpwsErrorString ); DWORD APIENTRY MprAdminServerGetInfo( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwLevel, OUT LPBYTE * lplpbBuffer ); #if(WINVER >= 0x0500) DWORD APIENTRY MprAdminTransportCreate( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwTransportId, IN LPWSTR lpwsTransportName OPTIONAL, IN LPBYTE pGlobalInfo, IN DWORD dwGlobalInfoSize, IN LPBYTE pClientInterfaceInfo OPTIONAL, IN DWORD dwClientInterfaceInfoSize OPTIONAL, IN LPWSTR lpwsDLLPath ); #endif /* WINVER >= 0x0500 */ DWORD APIENTRY MprAdminTransportSetInfo( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwTransportId, IN LPBYTE pGlobalInfo OPTIONAL, IN DWORD dwGlobalInfoSize, IN LPBYTE pClientInterfaceInfo OPTIONAL, IN DWORD dwClientInterfaceInfoSize ); DWORD APIENTRY MprAdminTransportGetInfo( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwTransportId, OUT LPBYTE * ppGlobalInfo OPTIONAL, OUT LPDWORD lpdwGlobalInfoSize OPTIONAL, OUT LPBYTE * ppClientInterfaceInfo OPTIONAL, OUT LPDWORD lpdwClientInterfaceInfoSize OPTIONAL ); #if(WINVER >= 0x0500) DWORD APIENTRY MprAdminDeviceEnum( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwLevel, OUT LPBYTE* lplpbBuffer, OUT LPDWORD lpdwTotalEntries); #endif /* WINVER >= 0x0500 */ DWORD APIENTRY MprAdminInterfaceGetHandle( IN MPR_SERVER_HANDLE hMprServer, IN LPWSTR lpwsInterfaceName, OUT HANDLE * phInterface, IN BOOL fIncludeClientInterfaces ); DWORD APIENTRY MprAdminInterfaceCreate( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwLevel, IN LPBYTE lpbBuffer, OUT HANDLE * phInterface ); DWORD APIENTRY MprAdminInterfaceGetInfo( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwLevel, IN LPBYTE * lplpbBuffer ); DWORD APIENTRY MprAdminInterfaceSetInfo( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwLevel, IN LPBYTE lpbBuffer ); DWORD APIENTRY MprAdminInterfaceDelete( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface ); #if(WINVER >= 0x0500) DWORD APIENTRY MprAdminInterfaceDeviceGetInfo( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwIndex, IN DWORD dwLevel, OUT LPBYTE* lplpBuffer ); DWORD APIENTRY MprAdminInterfaceDeviceSetInfo( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwIndex, IN DWORD dwLevel, IN LPBYTE lplpBuffer ); #endif /* WINVER >= 0x0500 */ DWORD APIENTRY MprAdminInterfaceTransportRemove( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwTransportId ); DWORD APIENTRY MprAdminInterfaceTransportAdd( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwTransportId, IN LPBYTE pInterfaceInfo, IN DWORD dwInterfaceInfoSize ); DWORD APIENTRY MprAdminInterfaceTransportGetInfo( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwTransportId, OUT LPBYTE * ppInterfaceInfo, OUT LPDWORD lpdwpInterfaceInfoSize OPTIONAL ); DWORD APIENTRY MprAdminInterfaceTransportSetInfo( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwTransportId, IN LPBYTE pInterfaceInfo, IN DWORD dwInterfaceInfoSize ); DWORD APIENTRY MprAdminInterfaceEnum( IN MPR_SERVER_HANDLE hMprServer, IN DWORD dwLevel, OUT LPBYTE * lplpbBuffer, IN DWORD dwPrefMaxLen, OUT LPDWORD lpdwEntriesRead, OUT LPDWORD lpdwTotalEntries, IN LPDWORD lpdwResumeHandle OPTIONAL ); DWORD APIENTRY MprSetupIpInIpInterfaceFriendlyNameEnum( IN PWCHAR pwszMachineName, OUT LPBYTE* lplpBuffer, OUT LPDWORD lpdwEntriesRead ); DWORD APIENTRY MprSetupIpInIpInterfaceFriendlyNameFree( IN LPVOID lpBuffer ); DWORD APIENTRY MprSetupIpInIpInterfaceFriendlyNameCreate( PWCHAR pwszMachineName, PMPR_IPINIP_INTERFACE_0 pNameInformation ); DWORD APIENTRY MprSetupIpInIpInterfaceFriendlyNameDelete( IN PWCHAR pwszMachineName, IN GUID *pGuid ); DWORD APIENTRY MprAdminInterfaceSetCredentials( IN LPWSTR lpwsServer OPTIONAL, IN LPWSTR lpwsInterfaceName, IN LPWSTR lpwsUserName OPTIONAL, IN LPWSTR lpwsDomainName OPTIONAL, IN LPWSTR lpwsPassword OPTIONAL ); DWORD APIENTRY MprAdminInterfaceGetCredentials( IN LPWSTR lpwsServer OPTIONAL, IN LPWSTR lpwsInterfaceName, OUT LPWSTR lpwsUserName OPTIONAL, OUT LPWSTR lpwsPassword OPTIONAL, OUT LPWSTR lpwsDomainName OPTIONAL ); #if(WINVER >= 0x0500) DWORD APIENTRY MprAdminInterfaceSetCredentialsEx( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwLevel, IN LPBYTE lpbBuffer ); DWORD APIENTRY MprAdminInterfaceGetCredentialsEx( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwLevel, OUT LPBYTE * lplpbBuffer ); #endif /* WINVER >= 0x0500 */ DWORD APIENTRY MprAdminInterfaceConnect( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN HANDLE hEvent, IN BOOL fSynchronous ); DWORD APIENTRY MprAdminInterfaceDisconnect( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface ); DWORD APIENTRY MprAdminInterfaceUpdateRoutes( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwProtocolId, IN HANDLE hEvent ); DWORD APIENTRY MprAdminInterfaceQueryUpdateResult( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface, IN DWORD dwProtocolId, OUT LPDWORD lpdwUpdateResult ); DWORD APIENTRY MprAdminInterfaceUpdatePhonebookInfo( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hInterface ); #if(WINVER >= 0x0500) DWORD APIENTRY MprAdminRegisterConnectionNotification( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hEventNotification ); DWORD APIENTRY MprAdminDeregisterConnectionNotification( IN MPR_SERVER_HANDLE hMprServer, IN HANDLE hEventNotification ); #endif /* WINVER >= 0x0500 */ // // MIB APIs // DWORD APIENTRY MprAdminMIBServerConnect( IN LPWSTR lpwsServerName OPTIONAL, OUT MIB_SERVER_HANDLE * phMibServer ); VOID APIENTRY MprAdminMIBServerDisconnect( IN MIB_SERVER_HANDLE hMibServer ); DWORD APIENTRY MprAdminMIBEntryCreate( IN MIB_SERVER_HANDLE hMibServer, IN DWORD dwPid, IN DWORD dwRoutingPid, IN LPVOID lpEntry, IN DWORD dwEntrySize ); DWORD APIENTRY MprAdminMIBEntryDelete( IN MIB_SERVER_HANDLE hMibServer, IN DWORD dwProtocolId, IN DWORD dwRoutingPid, IN LPVOID lpEntry, IN DWORD dwEntrySize ); DWORD APIENTRY MprAdminMIBEntrySet( IN MIB_SERVER_HANDLE hMibServer, IN DWORD dwProtocolId, IN DWORD dwRoutingPid, IN LPVOID lpEntry, IN DWORD dwEntrySize ); DWORD APIENTRY MprAdminMIBEntryGet( IN MIB_SERVER_HANDLE hMibServer, IN DWORD dwProtocolId, IN DWORD dwRoutingPid, IN LPVOID lpInEntry, IN DWORD dwInEntrySize, OUT LPVOID* lplpOutEntry, OUT LPDWORD lpOutEntrySize ); DWORD APIENTRY MprAdminMIBEntryGetFirst( IN MIB_SERVER_HANDLE hMibServer, IN DWORD dwProtocolId, IN DWORD dwRoutingPid, IN LPVOID lpInEntry, IN DWORD dwInEntrySize, OUT LPVOID* lplpOutEntry, OUT LPDWORD lpOutEntrySize ); DWORD APIENTRY MprAdminMIBEntryGetNext( IN MIB_SERVER_HANDLE hMibServer, IN DWORD dwProtocolId, IN DWORD dwRoutingPid, IN LPVOID lpInEntry, IN DWORD dwInEntrySize, OUT LPVOID* lplpOutEntry, OUT LPDWORD lpOutEntrySize ); DWORD APIENTRY MprAdminMIBGetTrapInfo( IN MIB_SERVER_HANDLE hMibServer, IN DWORD dwProtocolId, IN DWORD dwRoutingPid, IN LPVOID lpInData, IN DWORD dwInDataSize, OUT LPVOID* lplpOutData, IN OUT LPDWORD lpOutDataSize ); DWORD APIENTRY MprAdminMIBSetTrapInfo( IN DWORD dwProtocolId, IN DWORD dwRoutingPid, IN HANDLE hEvent, IN LPVOID lpInData, IN DWORD dwInDataSize, OUT LPVOID* lplpOutData, IN OUT LPDWORD lpOutDataSize ); DWORD APIENTRY MprAdminMIBBufferFree( IN LPVOID pBuffer ); // // Configuration APIs // DWORD APIENTRY MprConfigServerInstall( IN DWORD dwLevel, IN PVOID pBuffer ); DWORD APIENTRY MprConfigServerConnect( IN LPWSTR lpwsServerName, OUT HANDLE* phMprConfig ); VOID APIENTRY MprConfigServerDisconnect( IN HANDLE hMprConfig ); DWORD APIENTRY MprConfigServerRefresh( IN HANDLE hMprConfig ); DWORD APIENTRY MprConfigBufferFree( IN LPVOID pBuffer ); DWORD APIENTRY MprConfigServerGetInfo( IN HANDLE hMprConfig, IN DWORD dwLevel, OUT LPBYTE * lplpbBuffer ); DWORD APIENTRY MprConfigServerBackup( IN HANDLE hMprConfig, IN LPWSTR lpwsPath ); DWORD APIENTRY MprConfigServerRestore( IN HANDLE hMprConfig, IN LPWSTR lpwsPath ); DWORD APIENTRY MprConfigTransportCreate( IN HANDLE hMprConfig, IN DWORD dwTransportId, IN LPWSTR lpwsTransportName OPTIONAL, IN LPBYTE pGlobalInfo, IN DWORD dwGlobalInfoSize, IN LPBYTE pClientInterfaceInfo OPTIONAL, IN DWORD dwClientInterfaceInfoSize OPTIONAL, IN LPWSTR lpwsDLLPath, OUT HANDLE* phRouterTransport ); DWORD APIENTRY MprConfigTransportDelete( IN HANDLE hMprConfig, IN HANDLE hRouterTransport ); DWORD APIENTRY MprConfigTransportGetHandle( IN HANDLE hMprConfig, IN DWORD dwTransportId, OUT HANDLE* phRouterTransport ); DWORD APIENTRY MprConfigTransportSetInfo( IN HANDLE hMprConfig, IN HANDLE hRouterTransport, IN LPBYTE pGlobalInfo OPTIONAL, IN DWORD dwGlobalInfoSize OPTIONAL, IN LPBYTE pClientInterfaceInfo OPTIONAL, IN DWORD dwClientInterfaceInfoSize OPTIONAL, IN LPWSTR lpwsDLLPath OPTIONAL ); DWORD APIENTRY MprConfigTransportGetInfo( IN HANDLE hMprConfig, IN HANDLE hRouterTransport, IN OUT LPBYTE* ppGlobalInfo OPTIONAL, OUT LPDWORD lpdwGlobalInfoSize OPTIONAL, IN OUT LPBYTE* ppClientInterfaceInfo OPTIONAL, OUT LPDWORD lpdwClientInterfaceInfoSize OPTIONAL, IN OUT LPWSTR* lplpwsDLLPath OPTIONAL ); DWORD APIENTRY MprConfigTransportEnum( IN HANDLE hMprConfig, IN DWORD dwLevel, IN OUT LPBYTE* lplpBuffer, IN DWORD dwPrefMaxLen, OUT LPDWORD lpdwEntriesRead, OUT LPDWORD lpdwTotalEntries, IN OUT LPDWORD lpdwResumeHandle OPTIONAL ); DWORD APIENTRY MprConfigInterfaceCreate( IN HANDLE hMprConfig, IN DWORD dwLevel, IN LPBYTE lpbBuffer, OUT HANDLE* phRouterInterface ); DWORD APIENTRY MprConfigInterfaceDelete( IN HANDLE hMprConfig, IN HANDLE hRouterInterface ); DWORD APIENTRY MprConfigInterfaceGetHandle( IN HANDLE hMprConfig, IN LPWSTR lpwsInterfaceName, OUT HANDLE* phRouterInterface ); DWORD APIENTRY MprConfigInterfaceGetInfo( IN HANDLE hMprConfig, IN HANDLE hRouterInterface, IN DWORD dwLevel, IN OUT LPBYTE* lplpBuffer, OUT LPDWORD lpdwBufferSize ); DWORD APIENTRY MprConfigInterfaceSetInfo( IN HANDLE hMprConfig, IN HANDLE hRouterInterface, IN DWORD dwLevel, IN LPBYTE lpbBuffer ); DWORD APIENTRY MprConfigInterfaceEnum( IN HANDLE hMprConfig, IN DWORD dwLevel, IN OUT LPBYTE* lplpBuffer, IN DWORD dwPrefMaxLen, OUT LPDWORD lpdwEntriesRead, OUT LPDWORD lpdwTotalEntries, IN OUT LPDWORD lpdwResumeHandle OPTIONAL ); DWORD APIENTRY MprConfigInterfaceTransportAdd( IN HANDLE hMprConfig, IN HANDLE hRouterInterface, IN DWORD dwTransportId, IN LPWSTR lpwsTransportName OPTIONAL, IN LPBYTE pInterfaceInfo, IN DWORD dwInterfaceInfoSize, OUT HANDLE* phRouterIfTransport ); DWORD APIENTRY MprConfigInterfaceTransportRemove( IN HANDLE hMprConfig, IN HANDLE hRouterInterface, IN HANDLE hRouterIfTransport ); DWORD APIENTRY MprConfigInterfaceTransportGetHandle( IN HANDLE hMprConfig, IN HANDLE hRouterInterface, IN DWORD dwTransportId, OUT HANDLE* phRouterIfTransport ); DWORD APIENTRY MprConfigInterfaceTransportGetInfo( IN HANDLE hMprConfig, IN HANDLE hRouterInterface, IN HANDLE hRouterIfTransport, IN OUT LPBYTE* ppInterfaceInfo OPTIONAL, OUT LPDWORD lpdwInterfaceInfoSize OPTIONAL ); DWORD APIENTRY MprConfigInterfaceTransportSetInfo( IN HANDLE hMprConfig, IN HANDLE hRouterInterface, IN HANDLE hRouterIfTransport, IN LPBYTE pInterfaceInfo OPTIONAL, IN DWORD dwInterfaceInfoSize OPTIONAL ); DWORD APIENTRY MprConfigInterfaceTransportEnum( IN HANDLE hMprConfig, IN HANDLE hRouterInterface, IN DWORD dwLevel, IN OUT LPBYTE* lplpBuffer, // MPR_IFTRANSPORT_0 IN DWORD dwPrefMaxLen, OUT LPDWORD lpdwEntriesRead, OUT LPDWORD lpdwTotalEntries, IN OUT LPDWORD lpdwResumeHandle OPTIONAL ); DWORD APIENTRY MprConfigGetFriendlyName( IN HANDLE hMprConfig, IN PWCHAR pszGuidName, OUT PWCHAR pszBuffer, IN DWORD dwBufferSize); DWORD APIENTRY MprConfigGetGuidName( IN HANDLE hMprConfig, IN PWCHAR pszFriendlyName, OUT PWCHAR pszBuffer, IN DWORD dwBufferSize); // // Information block APIs // DWORD APIENTRY MprInfoCreate( IN DWORD dwVersion, OUT LPVOID* lplpNewHeader ); DWORD APIENTRY MprInfoDelete( IN LPVOID lpHeader ); DWORD APIENTRY MprInfoRemoveAll( IN LPVOID lpHeader, OUT LPVOID* lplpNewHeader ); DWORD APIENTRY MprInfoDuplicate( IN LPVOID lpHeader, OUT LPVOID* lplpNewHeader ); DWORD APIENTRY MprInfoBlockAdd( IN LPVOID lpHeader, IN DWORD dwInfoType, IN DWORD dwItemSize, IN DWORD dwItemCount, IN LPBYTE lpItemData, OUT LPVOID* lplpNewHeader ); DWORD APIENTRY MprInfoBlockRemove( IN LPVOID lpHeader, IN DWORD dwInfoType, OUT LPVOID* lplpNewHeader ); DWORD APIENTRY MprInfoBlockSet( IN LPVOID lpHeader, IN DWORD dwInfoType, IN DWORD dwItemSize, IN DWORD dwItemCount, IN LPBYTE lpItemData, OUT LPVOID* lplpNewHeader ); DWORD APIENTRY MprInfoBlockFind( IN LPVOID lpHeader, IN DWORD dwInfoType, OUT LPDWORD lpdwItemSize, // OPTIONAL OUT LPDWORD lpdwItemCount, // OPTIONAL OUT LPBYTE* lplpItemData // OPTIONAL ); DWORD APIENTRY MprInfoBlockQuerySize( IN LPVOID lpHeader ); // // BOOL APIENTRY // MprInfoBlockExists( // IN LPVOID lpHeader, // IN DWORD dwInfoType // ); // #define MprInfoBlockExists(h,t) \ (MprInfoBlockFind((h),(t),NULL,NULL,NULL) == NO_ERROR) #ifdef __cplusplus } #endif //#endif /* WINVER >= 0x0403 */ #endif // __ROUTING_MPRADMIN_H__