2,782 questions
You can find the definitions in SDK headers
It is the same API as FwpmIPsecTunnelAdd2 with FWPM_PROVIDER_CONTEXT3
#if (NTDDI_VERSION >= NTDDI_WIN10_RS3)
typedef struct FWPM_PROVIDER_CONTEXT3_
{
GUID providerContextKey;
FWPM_DISPLAY_DATA0 displayData;
UINT32 flags;
/* [unique] */ GUID *providerKey;
FWP_BYTE_BLOB providerData;
FWPM_PROVIDER_CONTEXT_TYPE type;
/* [switch_is][switch_type] */ union
{
/* [case()][unique] */ IPSEC_KEYING_POLICY1 *keyingPolicy;
/* [case()][unique] */ IPSEC_TRANSPORT_POLICY2 *ikeQmTransportPolicy;
/* [case()][unique] */ IPSEC_TUNNEL_POLICY3 *ikeQmTunnelPolicy;
/* [case()][unique] */ IPSEC_TRANSPORT_POLICY2 *authipQmTransportPolicy;
/* [case()][unique] */ IPSEC_TUNNEL_POLICY3 *authipQmTunnelPolicy;
/* [case()][unique] */ IKEEXT_POLICY2 *ikeMmPolicy;
/* [case()][unique] */ IKEEXT_POLICY2 *authIpMmPolicy;
/* [case()][unique] */ FWP_BYTE_BLOB *dataBuffer;
/* [case()][unique] */ FWPM_CLASSIFY_OPTIONS0 *classifyOptions;
/* [case()][unique] */ IPSEC_TUNNEL_POLICY3 *ikeV2QmTunnelPolicy;
/* [case()][unique] */ IPSEC_TRANSPORT_POLICY2 *ikeV2QmTransportPolicy;
/* [case()][unique] */ IKEEXT_POLICY2 *ikeV2MmPolicy;
/* [case()][unique] */ IPSEC_DOSP_OPTIONS0 *idpOptions;
} ;
UINT64 providerContextId;
} FWPM_PROVIDER_CONTEXT3;
#endif // (NTDDI_VERSION >= NTDDI_WIN10_RS3)
#if (NTDDI_VERSION >= NTDDI_WIN10_RS3)
typedef struct IPSEC_TUNNEL_POLICY3_
{
UINT32 flags;
UINT32 numIpsecProposals;
/* [ref][size_is] */ IPSEC_PROPOSAL0 *ipsecProposals;
IPSEC_TUNNEL_ENDPOINTS2 tunnelEndpoints;
IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
/* [unique] */ IKEEXT_EM_POLICY2 *emPolicy;
UINT32 fwdPathSaLifetime;
UINT32 compartmentId;
UINT32 numTrafficSelectorPolicy;
/* [unique][size_is] */ IPSEC_TRAFFIC_SELECTOR_POLICY0 *trafficSelectorPolicies;
} IPSEC_TUNNEL_POLICY3;
#endif // (NTDDI_VERSION >= NTDDI_WIN10_RS3)
typedef struct IPSEC_TRAFFIC_SELECTOR_POLICY0_
{
UINT32 flags;
UINT32 numLocalTrafficSelectors;
/* [unique][size_is] */ IPSEC_TRAFFIC_SELECTOR0 *localTrafficSelectors;
UINT32 numRemoteTrafficSelectors;
/* [unique][size_is] */ IPSEC_TRAFFIC_SELECTOR0 *remoteTrafficSelectors;
} IPSEC_TRAFFIC_SELECTOR_POLICY0;
typedef struct IPSEC_TRAFFIC_SELECTOR0_
{
UINT8 protocolId;
UINT16 portStart;
UINT16 portEnd;
FWP_IP_VERSION ipVersion;
/* [switch_is][switch_type] */ union
{
/* [case()] */ UINT32 startV4Address;
/* [case()] */ UINT8 startV6Address[ 16 ];
} ;
/* [switch_is][switch_type] */ union
{
/* [case()] */ UINT32 endV4Address;
/* [case()] */ UINT8 endV6Address[ 16 ];
} ;
} IPSEC_TRAFFIC_SELECTOR0;