/*++ 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), #ifdef __midl ms_union, #endif // __midl endpoint("mscn_np:[\\pipe\\ipsec]"), 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 { DWORD dwNumFilters; [size_is(dwNumFilters)] PTRANSPORT_FILTER pTransportFilters; } TRANSPORT_FILTER_CONTAINER, * PTRANSPORT_FILTER_CONTAINER; typedef struct _TUNNEL_FILTER_CONTAINER { DWORD dwNumFilters; [size_is(dwNumFilters)] PTUNNEL_FILTER pTunnelFilters; } TUNNEL_FILTER_CONTAINER, * PTUNNEL_FILTER_CONTAINER; typedef struct _IPSEC_QM_POLICY_CONTAINER { DWORD dwNumPolicies; [size_is(dwNumPolicies)] PIPSEC_QM_POLICY pPolicies; } IPSEC_QM_POLICY_CONTAINER, * PIPSEC_QM_POLICY_CONTAINER; typedef struct _IPSEC_MM_POLICY_CONTAINER { DWORD dwNumPolicies; [size_is(dwNumPolicies)] PIPSEC_MM_POLICY pPolicies; } IPSEC_MM_POLICY_CONTAINER, * PIPSEC_MM_POLICY_CONTAINER; typedef struct _MM_AUTH_METHODS_CONTAINER { DWORD dwNumAuthMethods; [size_is(dwNumAuthMethods)] PMM_AUTH_METHODS pMMAuthMethods; } MM_AUTH_METHODS_CONTAINER, * PMM_AUTH_METHODS_CONTAINER; typedef struct _MM_FILTER_CONTAINER { DWORD dwNumFilters; [size_is(dwNumFilters)] PMM_FILTER pMMFilters; } MM_FILTER_CONTAINER, * PMM_FILTER_CONTAINER; typedef struct _MM_SA_CONTAINER { DWORD dwNumMMSAs; [size_is(dwNumMMSAs)] PIPSEC_MM_SA pMMSAs; } MM_SA_CONTAINER, * PMM_SA_CONTAINER; typedef struct _IPSEC_STATISTICS_CONTAINER { DWORD dwNumIpsecStats; [size_is(dwNumIpsecStats)] PIPSEC_STATISTICS pIpsecStatistics; } IPSEC_STATISTICS_CONTAINER, * PIPSEC_STATISTICS_CONTAINER; typedef struct _QM_SA_CONTAINER { DWORD dwNumQMSAs; [size_is(dwNumQMSAs)] PIPSEC_QM_SA pQMSAs; } QM_SA_CONTAINER, * PQM_SA_CONTAINER; typedef struct _QM_FILTER_CONTAINER { DWORD dwNumFilters; [size_is(dwNumFilters)] PIPSEC_QM_FILTER pQMFilters; } QM_FILTER_CONTAINER, * PQM_FILTER_CONTAINER; typedef struct _IPSEC_INTERFACE_CONTAINER { DWORD dwNumInterfaces; [size_is(dwNumInterfaces)] PIPSEC_INTERFACE_INFO pIpsecInterfaces; } IPSEC_INTERFACE_CONTAINER, * PIPSEC_INTERFACE_CONTAINER; DWORD RpcAddTransportFilter( [in, string, unique] STRING_HANDLE pServerName, [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 dwLevel, [in] GUID gGenericFilterID, [in, out] PTRANSPORT_FILTER_CONTAINER * ppFilterContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetTransportFilter( [in] TRANSPORTFILTER_HANDLE hFilter, [in] PTRANSPORT_FILTER_CONTAINER pFilterContainer ); DWORD RpcGetTransportFilter( [in] TRANSPORTFILTER_HANDLE hFilter, [in, out] PTRANSPORT_FILTER_CONTAINER * ppFilterContainer ); DWORD RpcAddQMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwFlags, [in] PIPSEC_QM_POLICY_CONTAINER pQMPolicyContainer ); DWORD RpcDeleteQMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in, string, unique] LPWSTR pszPolicyName ); DWORD RpcEnumQMPolicies( [in, string, unique] STRING_HANDLE pServerName, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetQMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in, string, unique] LPWSTR pszPolicyName, [in] PIPSEC_QM_POLICY_CONTAINER pQMPolicyContainer ); DWORD RpcGetQMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in, string, unique] LPWSTR pszPolicyName, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer ); DWORD RpcAddMMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwFlags, [in] PIPSEC_MM_POLICY_CONTAINER pMMPolicyContainer ); DWORD RpcDeleteMMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in, string, unique] LPWSTR pszPolicyName ); DWORD RpcEnumMMPolicies( [in, string, unique] STRING_HANDLE pServerName, [in, out] PIPSEC_MM_POLICY_CONTAINER * ppMMPolicyContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetMMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in, string, unique] LPWSTR pszPolicyName, [in] PIPSEC_MM_POLICY_CONTAINER pMMPolicyContainer ); DWORD RpcGetMMPolicy( [in, string, unique] STRING_HANDLE pServerName, [in, string, unique] LPWSTR pszPolicyName, [in, out] PIPSEC_MM_POLICY_CONTAINER * ppMMPolicyContainer ); DWORD RpcAddMMFilter( [in, string, unique] STRING_HANDLE pServerName, [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 dwLevel, [in] GUID gGenericFilterID, [in, out] PMM_FILTER_CONTAINER * ppMMFilterContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetMMFilter( [in] MMFILTER_HANDLE hMMFilter, [in] PMM_FILTER_CONTAINER pMMFilterContainer ); DWORD RpcGetMMFilter( [in] MMFILTER_HANDLE hMMFilter, [in, out] PMM_FILTER_CONTAINER * ppMMFilterContainer ); DWORD RpcMatchMMFilter( [in, string, unique] STRING_HANDLE pServerName, [in] PMM_FILTER_CONTAINER pMMFilterContainer, [in] DWORD dwFlags, [in, out] PMM_FILTER_CONTAINER * ppMMFilterContainer, [in, out] PIPSEC_MM_POLICY_CONTAINER * ppMMPolicyContainer, [in, out] PMM_AUTH_METHODS_CONTAINER * ppMMAuthContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcMatchTransportFilter( [in, string, unique] STRING_HANDLE pServerName, [in] PTRANSPORT_FILTER_CONTAINER pTxFilterContainer, [in] DWORD dwFlags, [in, out] PTRANSPORT_FILTER_CONTAINER * ppTxFilterContainer, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcGetQMPolicyByID( [in, string, unique] STRING_HANDLE pServerName, [in] GUID gQMPolicyID, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer ); DWORD RpcGetMMPolicyByID( [in, string, unique] STRING_HANDLE pServerName, [in] GUID gMMPolicyID, [in, out] PIPSEC_MM_POLICY_CONTAINER * ppMMPolicyContainer ); DWORD RpcAddMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwFlags, [in] PMM_AUTH_METHODS_CONTAINER pMMAuthContainer ); DWORD RpcDeleteMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] GUID gMMAuthID ); DWORD RpcEnumMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in, out] PMM_AUTH_METHODS_CONTAINER * ppMMAuthContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] GUID gMMAuthID, [in] PMM_AUTH_METHODS_CONTAINER pMMAuthContainer ); DWORD RpcGetMMAuthMethods( [in, string, unique] STRING_HANDLE pServerName, [in] GUID gMMAuthID, [in, out] PMM_AUTH_METHODS_CONTAINER * ppMMAuthContainer ); DWORD RpcInitiateIKENegotiation( [in, string, unique] STRING_HANDLE pServerName, [in] PQM_FILTER_CONTAINER pQMFilterContainer, [in] DWORD dwClientProcessId, [in] ULONG uhClientEvent, [in] DWORD dwFlags, [in, out, unique] IKENEGOTIATION_HANDLE * phIKENegotiation ); DWORD RpcQueryIKENegotiationStatus( [in] IKENEGOTIATION_HANDLE hIKENegotiation, [out, ref] SA_NEGOTIATION_STATUS_INFO * pNegotiationStatus ); DWORD RpcCloseIKENegotiationHandle( [in, out] IKENEGOTIATION_HANDLE * phIKENegotiation ); DWORD RpcEnumMMSAs( [in, string, unique] STRING_HANDLE pServerName, [in] PMM_SA_CONTAINER pMMTemplate, [in, out] PMM_SA_CONTAINER * ppMMSAContainer, [in, out, unique] LPDWORD pdwNumEntries, [in, out, unique] LPDWORD pdwTotalMMsAvailable, [in, out, unique] LPDWORD pdwEnumHandle, [in] DWORD dwFlags ); DWORD RpcDeleteMMSAs( [in, string, unique] STRING_HANDLE pServerName, [in] PMM_SA_CONTAINER pMMTemplate, [in] DWORD dwFlags ); DWORD RpcDeleteQMSAs( [in, string, unique] STRING_HANDLE pServerName, [in] PQM_SA_CONTAINER pQMSAContainer, [in] DWORD dwFlags ); DWORD RpcQueryIKEStatistics( [in, string, unique] STRING_HANDLE pServerName, [out, ref] IKE_STATISTICS * pIKEStatistics ); DWORD RpcRegisterIKENotifyClient( [in, string, unique] STRING_HANDLE pServerName, [in] DWORD dwClientProcessId, [in] ULONG uhClientEvent, [in] PQM_SA_CONTAINER pQMSATemplateContainer, [out] IKENOTIFY_HANDLE *phNotifyHandle, [in] DWORD dwFlags ); DWORD RpcQueryNotifyData( [in] IKENOTIFY_HANDLE uhNotifyHandle, [in,out] PDWORD pdwNumEntries, [in,out] PQM_SA_CONTAINER *ppQMSAContainer, [in] DWORD dwFlags ); DWORD RpcCloseNotifyHandle( [in, out] IKENOTIFY_HANDLE *phHandle ); DWORD RpcQueryIPSecStatistics( [in, string, unique] STRING_HANDLE pServerName, [in, out] PIPSEC_STATISTICS_CONTAINER * ppIpsecStatsContainer ); DWORD RpcEnumQMSAs( [in, string, unique] STRING_HANDLE pServerName, [in] PQM_SA_CONTAINER pQMSATempContainer, [in, out] PQM_SA_CONTAINER * ppQMSAContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwNumTotalQMSAs, [in, out, unique] LPDWORD pdwResumeHandle, [in] DWORD dwFlags ); DWORD RpcAddTunnelFilter( [in, string, unique] STRING_HANDLE pServerName, [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 dwLevel, [in] GUID gGenericFilterID, [in, out] PTUNNEL_FILTER_CONTAINER * ppFilterContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcSetTunnelFilter( [in] TUNNELFILTER_HANDLE hFilter, [in] PTUNNEL_FILTER_CONTAINER pFilterContainer ); DWORD RpcGetTunnelFilter( [in] TUNNELFILTER_HANDLE hFilter, [in, out] PTUNNEL_FILTER_CONTAINER * ppFilterContainer ); DWORD RpcMatchTunnelFilter( [in, string, unique] STRING_HANDLE pServerName, [in] PTUNNEL_FILTER_CONTAINER pTnFilterContainer, [in] DWORD dwFlags, [in, out] PTUNNEL_FILTER_CONTAINER * ppTnFilterContainer, [in, out] PIPSEC_QM_POLICY_CONTAINER * ppQMPolicyContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwResumeHandle ); DWORD RpcOpenMMFilterHandle( [in, string, unique] STRING_HANDLE pServerName, [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] PTRANSPORT_FILTER_CONTAINER pFilterContainer, [out] TRANSPORTFILTER_HANDLE * phFilter ); DWORD RpcCloseTransportFilterHandle( [in, out] TRANSPORTFILTER_HANDLE * phFilter ); DWORD RpcOpenTunnelFilterHandle( [in, string, unique] STRING_HANDLE pServerName, [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] PIPSEC_INTERFACE_CONTAINER pIpsecIfTempContainer, [in, out] PIPSEC_INTERFACE_CONTAINER * ppIpsecIfContainer, [in] DWORD dwPreferredNumEntries, [in, out, unique] LPDWORD pdwNumTotalInterfaces, [in, out, unique] LPDWORD pdwResumeHandle, [in] DWORD dwFlags ); DWORD RpcIPSecAddSA( [in, string, unique] STRING_HANDLE pServerName, [in,out] PIPSEC_QM_POLICY_CONTAINER pQMPolicyContainer, [in] PQM_FILTER_CONTAINER pQMFilterContainer, [in,out] DWORD *uhLarvalContext, [in] DWORD dwInboundKeyMatLen, [in, size_is(dwInboundKeyMatLen)] BYTE *pInboundKeyMat, [in] DWORD dwOutboundKeyMatLen, [in, size_is(dwOutboundKeyMatLen)] BYTE *pOutboundKeyMat, [in, size_is(sizeof(IKE_COOKIE_PAIR))] BYTE *pContextInfo, DWORD dwFlags); }