/*++ Copyright (c) 1999 Microsoft Corporation Module Name: spd.idl Abstract: IDL file for IPSec WINAPIs. Author: krishnaG 21-September-1999 Environment: User Level: Win32 Revision History: abhisheV 29-September-1999 Added the structures. Added the rpc prototypes. --*/ [ uuid(12345678-1234-ABCD-EF00-0123456789AB), version(1.0), pointer_default(unique) ] interface winipsec { import "import.idl"; typedef [context_handle] void * TRANSPORTFILTER_HANDLE; typedef [context_handle] void * TUNNELFILTER_HANDLE; typedef [context_handle] void * MMFILTER_HANDLE; typedef [context_handle] void * IKENEGOTIATION_HANDLE; typedef [context_handle] void * IKENOTIFY_HANDLE; typedef [handle] wchar_t * STRING_HANDLE; typedef struct _TRANSPORT_FILTER_CONTAINER { [range(0,MIDL_MAX_TRANSPORTFILTER_COUNT)] DWORD dwNumFilters; [size_is(dwNumFilters)] PTRANSPORT_FILTER pTransportFilters; } TRANSPORT_FILTER_CONTAINER, * PTRANSPORT_FILTER_CONTAINER; typedef struct _TUNNEL_FILTER_CONTAINER { [range(0,MIDL_MAX_TUNNELFILTER_COUNT)] DWORD dwNumFilters; [size_is(dwNumFilters)] PTUNNEL_FILTER pTunnelFilters; } TUNNEL_FILTER_CONTAINER, * PTUNNEL_FILTER_CONTAINER; typedef struct _IPSEC_QM_POLICY_CONTAINER { [range(0,MIDL_MAX_QMPOLICY_COUNT)] DWORD dwNumPolicies; [size_is(dwNumPolicies)] PIPSEC_QM_POLICY pPolicies; } IPSEC_QM_POLICY_CONTAINER, * PIPSEC_QM_POLICY_CONTAINER; typedef struct _IPSEC_MM_POLICY_CONTAINER { [range(0,MIDL_MAX_MMPOLICY_COUNT)] DWORD dwNumPolicies; [size_is(dwNumPolicies)] PIPSEC_MM_POLICY pPolicies; } IPSEC_MM_POLICY_CONTAINER, * PIPSEC_MM_POLICY_CONTAINER; typedef struct _MM_AUTH_METHODS_CONTAINER { [range(0, MIDL_MAX_MMAUTH_COUNT)] DWORD dwNumAuthMethods; [size_is(dwNumAuthMethods)] PMM_AUTH_METHODS pMMAuthMethods; } MM_AUTH_METHODS_CONTAINER, * PMM_AUTH_METHODS_CONTAINER; typedef struct _MM_FILTER_CONTAINER { [range(0,MIDL_MAX_MMFILTER_COUNT)]DWORD dwNumFilters; [size_is(dwNumFilters)] PMM_FILTER pMMFilters; } MM_FILTER_CONTAINER, * PMM_FILTER_CONTAINER; typedef struct _MM_SA_CONTAINER { [range(0,MIDL_MAX_MMSA_COUNT)] DWORD dwNumMMSAs; [size_is(dwNumMMSAs)] PIPSEC_MM_SA pMMSAs; } MM_SA_CONTAINER, * PMM_SA_CONTAINER; typedef struct _IPSEC_STATISTICS_CONTAINER { [range(0,1)] DWORD dwNumIpsecStats; [size_is(dwNumIpsecStats)] PIPSEC_STATISTICS pIpsecStatistics; } IPSEC_STATISTICS_CONTAINER, * PIPSEC_STATISTICS_CONTAINER; typedef struct _QM_SA_CONTAINER { [range(0,MIDL_MAX_QMSA_COUNT)] DWORD dwNumQMSAs; [size_is(dwNumQMSAs)] PIPSEC_QM_SA pQMSAs; } QM_SA_CONTAINER, * PQM_SA_CONTAINER; typedef struct _QM_FILTER_CONTAINER { [range(0,MIDL_MAX_QMFILTER_COUNT)] DWORD dwNumFilters; [size_is(dwNumFilters)] PIPSEC_QM_FILTER pQMFilters; } QM_FILTER_CONTAINER, * PQM_FILTER_CONTAINER; typedef struct _IPSEC_INTERFACE_CONTAINER { [range(0,MIDL_MAX_INTERFACE_COUNT)] DWORD dwNumInterfaces; [size_is(dwNumInterfaces)] PIPSEC_INTERFACE_INFO pIpsecInterfaces; } IPSEC_INTERFACE_CONTAINER, * PIPSEC_INTERFACE_CONTAINER; typedef struct _SPD_POLICY_STATE_CONTAINER { [range(0,1)] DWORD dwNumPolicyStates; [size_is(dwNumPolicyStates)] PSPD_POLICY_STATE pSpdPolicyStates; } SPD_POLICY_STATE_CONTAINER, * PSPD_POLICY_STATE_CONTAINER; DWORD RpcAddTransportFilter( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] DWORD dwFlags, [in] PTRANSPORT_FILTER_CONTAINER pFilterContainer, [out] TRANSPORTFILTER_HANDLE * phFilter ); DWORD RpcDeleteTransportFilter( [in, out] TRANSPORTFILTER_HANDLE * phFilter ); DWORD RpcEnumTransportFilters( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PTRANSPORT_FILTER_CONTAINER pTemplateFilterContainer, [in] DWORD dwLevel, [in] GUID gGenericFilterID, [in] DWORD dwPreferredNumEntries, [in, out] PTRANSPORT_FILTER_CONTAINER * ppFilterContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetTransportFilter( [in] TRANSPORTFILTER_HANDLE hFilter, [in] DWORD dwVersion, [in] PTRANSPORT_FILTER_CONTAINER pFilterContainer ); DWORD RpcGetTransportFilter( [in] TRANSPORTFILTER_HANDLE hFilter, [in] DWORD dwVersion, [in, out] PTRANSPORT_FILTER_CONTAINER * ppFilterContainer ); DWORD RpcAddQMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] DWORD dwFlags, [in] PIPSEC_QM_POLICY_CONTAINER pQMPolicyContainer ); DWORD RpcDeleteQMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in, string, unique] LPWSTR pszPolicyName ); DWORD RpcEnumQMPolicies( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PIPSEC_QM_POLICY_CONTAINER pQMTempPolicyContainer, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetQMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in, string, unique] LPWSTR pszPolicyName, [in] PIPSEC_QM_POLICY_CONTAINER pQMPolicyContainer ); DWORD RpcGetQMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in, string, unique] LPWSTR pszPolicyName, [in] DWORD dwFlags, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer ); DWORD RpcAddMMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] DWORD dwFlags, [in] PIPSEC_MM_POLICY_CONTAINER pMMPolicyContainer ); DWORD RpcDeleteMMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in, string, unique] LPWSTR pszPolicyName ); DWORD RpcEnumMMPolicies( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PIPSEC_MM_POLICY_CONTAINER pMMTempPolicyContainer, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PIPSEC_MM_POLICY_CONTAINER * ppMMPolicyContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetMMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in, string, unique] LPWSTR pszPolicyName, [in] PIPSEC_MM_POLICY_CONTAINER pMMPolicyContainer ); DWORD RpcGetMMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in, string, unique] LPWSTR pszPolicyName, [in, out] PIPSEC_MM_POLICY_CONTAINER * ppMMPolicyContainer ); DWORD RpcAddMMFilter( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] DWORD dwFlags, [in] PMM_FILTER_CONTAINER pMMFilterContainer, [out] MMFILTER_HANDLE * phMMFilter ); DWORD RpcDeleteMMFilter( [in, out] MMFILTER_HANDLE * phMMFilter ); DWORD RpcEnumMMFilters( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PMM_FILTER_CONTAINER pTemplateFilterContainer, [in] DWORD dwLevel, [in] GUID gGenericFilterID, [in] DWORD dwPreferredNumEntries, [in, out] PMM_FILTER_CONTAINER * ppMMFilterContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetMMFilter( [in] MMFILTER_HANDLE hMMFilter, [in] DWORD dwVersion, [in] PMM_FILTER_CONTAINER pMMFilterContainer ); DWORD RpcGetMMFilter( [in] MMFILTER_HANDLE hMMFilter, [in] DWORD dwVersion, [in, out] PMM_FILTER_CONTAINER * ppMMFilterContainer ); DWORD RpcMatchMMFilter( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PMM_FILTER_CONTAINER pMMFilterContainer, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PMM_FILTER_CONTAINER * ppMMFilterContainer, [in, out] PIPSEC_MM_POLICY_CONTAINER * ppMMPolicyContainer, [in, out] PMM_AUTH_METHODS_CONTAINER * ppMMAuthContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcMatchTransportFilter( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PTRANSPORT_FILTER_CONTAINER pTxFilterContainer, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PTRANSPORT_FILTER_CONTAINER * ppTxFilterContainer, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcGetQMPolicyByID( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] GUID gQMPolicyID, [in] DWORD dwFlags, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer ); DWORD RpcGetMMPolicyByID( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] GUID gMMPolicyID, [in, out] PIPSEC_MM_POLICY_CONTAINER * ppMMPolicyContainer ); DWORD RpcAddMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] DWORD dwFlags, [in] PMM_AUTH_METHODS_CONTAINER pMMAuthContainer ); DWORD RpcDeleteMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] GUID gMMAuthID ); DWORD RpcEnumMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PMM_AUTH_METHODS_CONTAINER pMMTempAuthContainer, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PMM_AUTH_METHODS_CONTAINER * ppMMAuthContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] GUID gMMAuthID, [in] PMM_AUTH_METHODS_CONTAINER pMMAuthContainer ); DWORD RpcGetMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] GUID gMMAuthID, [in, out] PMM_AUTH_METHODS_CONTAINER * ppMMAuthContainer ); DWORD RpcInitiateIKENegotiation( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PQM_FILTER_CONTAINER pQMFilterContainer, [in] DWORD dwClientProcessId, [in] ULONG uhClientEvent, [in] DWORD dwFlags, [in] IPSEC_UDP_ENCAP_CONTEXT UdpEncapContext, [in, out, unique] IKENEGOTIATION_HANDLE * phIKENegotiation ); DWORD RpcQueryIKENegotiationStatus( [in] IKENEGOTIATION_HANDLE hIKENegotiation, [in] DWORD dwVersion, [out, ref] SA_NEGOTIATION_STATUS_INFO * pNegotiationStatus ); DWORD RpcCloseIKENegotiationHandle( [in, out] IKENEGOTIATION_HANDLE * phIKENegotiation ); DWORD RpcEnumMMSAs( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PMM_SA_CONTAINER pMMTemplate, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PMM_SA_CONTAINER * ppMMSAContainer, [in, out, unique] LPDWORD pdwNumEntries, [in, out, unique] LPDWORD pdwTotalMMsAvailable, [in, out, unique] LPDWORD pdwEnumHandle ); DWORD RpcDeleteMMSAs( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PMM_SA_CONTAINER pMMTemplate, [in] DWORD dwFlags ); DWORD RpcDeleteQMSAs( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PQM_SA_CONTAINER pQMSAContainer, [in] DWORD dwFlags ); DWORD RpcQueryIKEStatistics( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [out, ref] IKE_STATISTICS * pIKEStatistics ); DWORD RpcRegisterIKENotifyClient( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] DWORD dwClientProcessId, [in] ULONG uhClientEvent, [in] PQM_SA_CONTAINER pQMSATemplateContainer, [in] DWORD dwFlags, [out] IKENOTIFY_HANDLE * phNotifyHandle ); DWORD RpcQueryIKENotifyData( [in] IKENOTIFY_HANDLE uhNotifyHandle, [in] DWORD dwVersion, [in] DWORD dwFlags, [in, out] PQM_SA_CONTAINER * ppQMSAContainer, [in, out] PDWORD pdwNumEntries ); DWORD RpcCloseIKENotifyHandle( [in, out] IKENOTIFY_HANDLE * phHandle ); DWORD RpcQueryIPSecStatistics( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in, out] PIPSEC_STATISTICS_CONTAINER * ppIpsecStatsContainer ); DWORD RpcEnumQMSAs( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PQM_SA_CONTAINER pQMSATempContainer, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PQM_SA_CONTAINER * ppQMSAContainer, [in, out, unique] LPDWORD pdwNumTotalQMSAs, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcAddTunnelFilter( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] DWORD dwFlags, [in] PTUNNEL_FILTER_CONTAINER pFilterContainer, [out] TUNNELFILTER_HANDLE * phFilter ); DWORD RpcDeleteTunnelFilter( [in, out] TUNNELFILTER_HANDLE * phFilter ); DWORD RpcEnumTunnelFilters( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PTUNNEL_FILTER_CONTAINER pTemplateFilterContainer, [in] DWORD dwLevel, [in] GUID gGenericFilterID, [in] DWORD dwPreferredNumEntries, [in, out] PTUNNEL_FILTER_CONTAINER * ppFilterContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetTunnelFilter( [in] TUNNELFILTER_HANDLE hFilter, [in] DWORD dwVersion, [in] PTUNNEL_FILTER_CONTAINER pFilterContainer ); DWORD RpcGetTunnelFilter( [in] TUNNELFILTER_HANDLE hFilter, [in] DWORD dwVersion, [in, out] PTUNNEL_FILTER_CONTAINER * ppFilterContainer ); DWORD RpcMatchTunnelFilter( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PTUNNEL_FILTER_CONTAINER pTnFilterContainer, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PTUNNEL_FILTER_CONTAINER * ppTnFilterContainer, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcOpenMMFilterHandle( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PMM_FILTER_CONTAINER pMMFilterContainer, [out] MMFILTER_HANDLE * phMMFilter ); DWORD RpcCloseMMFilterHandle( [in, out] MMFILTER_HANDLE * phMMFilter ); DWORD RpcOpenTransportFilterHandle( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PTRANSPORT_FILTER_CONTAINER pFilterContainer, [out] TRANSPORTFILTER_HANDLE * phFilter ); DWORD RpcCloseTransportFilterHandle( [in, out] TRANSPORTFILTER_HANDLE * phFilter ); DWORD RpcOpenTunnelFilterHandle( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PTUNNEL_FILTER_CONTAINER pFilterContainer, [out] TUNNELFILTER_HANDLE * phFilter ); DWORD RpcCloseTunnelFilterHandle( [in, out] TUNNELFILTER_HANDLE * phFilter ); DWORD RpcEnumIpsecInterfaces( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] PIPSEC_INTERFACE_CONTAINER pIpsecIfTempContainer, [in] DWORD dwFlags, [in] DWORD dwPreferredNumEntries, [in, out] PIPSEC_INTERFACE_CONTAINER * ppIpsecIfContainer, [in, out, unique] LPDWORD pdwNumTotalInterfaces, [in, out, unique] LPDWORD pdwResumeHandle ); #define MAX_ADDSA_KEYLEN 1000 DWORD RpcAddSAs( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in] IPSEC_SA_DIRECTION SADirection, [in,out] PIPSEC_QM_POLICY_CONTAINER pQMPolicyContainer, [in] PQM_FILTER_CONTAINER pQMFilterContainer, [in, out] ULONG * puhLarvalContext, [in,range(0,MAX_ADDSA_KEYLEN)] DWORD dwInboundKeyMatLen, [in, size_is(dwInboundKeyMatLen)] BYTE * pInboundKeyMat, [in,range(0,MAX_ADDSA_KEYLEN)] DWORD dwOutboundKeyMatLen, [in, size_is(dwOutboundKeyMatLen)] BYTE *pOutboundKeyMat, [in, size_is(sizeof(IKE_COOKIE_PAIR))] BYTE *pContextInfo, [in] UDP_ENCAP_INFO EncapInfo, DWORD dwFlags); DWORD RpcSetConfigurationVariables( [in, string, unique] STRING_HANDLE pServerName, [in] IKE_CONFIG IKEConfig ); DWORD RpcGetConfigurationVariables( [in, string, unique] STRING_HANDLE pServerName, [out, ref] IKE_CONFIG *pIKEConfig ); DWORD RpcQuerySpdPolicyState( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwVersion, [in, out] PSPD_POLICY_STATE_CONTAINER * ppSpdPolicyStateContainer ); }