/*** Autogenerated by WIDL 6.0-rc1 from include/iketypes.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __iketypes_h__
#define __iketypes_h__

/* Forward declarations */

/* Headers for imported files */

#include <fwptypes.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */

#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

#define IKEEXT_ERROR_CODE_COUNT (ERROR_IPSEC_IKE_NEG_STATUS_END - ERROR_IPSEC_IKE_NEG_STATUS_BEGIN)

/* Please keep in sync with winerror.h defines.  */

#define IKEEXT_CERT_FLAG_ENABLE_ACCOUNT_MAPPING          (0x1)
#define IKEEXT_CERT_FLAG_DISABLE_REQUEST_PAYLOAD         (0x2)
#define IKEEXT_CERT_FLAG_USE_NAP_CERTIFICATE             (0x4)
#define IKEEXT_CERT_FLAG_INTERMEDIATE_CA                 (0x8)
#define IKEEXT_CERT_FLAG_IGNORE_INIT_CERT_MAP_FAILURE    (0x10)
#define IKEEXT_CERT_FLAG_PREFER_NAP_CERTIFICATE_OUTBOUND (0x20)
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define IKEEXT_CERT_FLAG_SELECT_NAP_CERTIFICATE          (0x40)
#define IKEEXT_CERT_FLAG_VERIFY_NAP_CERTIFICATE          (0x80)
#define IKEEXT_CERT_FLAG_FOLLOW_RENEWAL_CERTIFICATE      (0x100)
#endif

#define IKEEXT_CERT_AUTH_FLAG_SSL_ONE_WAY            (0x1)
#define IKEEXT_CERT_AUTH_FLAG_DISABLE_CRL_CHECK      (0x2)
#define IKEEXT_CERT_AUTH_ENABLE_CRL_CHECK_STRONG     (0x4)
#define IKEEXT_CERT_AUTH_DISABLE_SSL_CERT_VALIDATION (0x8)
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define IKEEXT_CERT_AUTH_ALLOW_HTTP_CERT_LOOKUP      (0x10)
#define IKEEXT_CERT_AUTH_URL_CONTAINS_BUNDLE         (0x20)
#endif

#define IKEEXT_KERB_AUTH_DISABLE_INITIATOR_TOKEN_GENERATION (0x1)
#define IKEEXT_KERB_AUTH_DONT_ACCEPT_EXPLICIT_CREDENTIALS   (0x2)
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define IKEEXT_KERB_AUTH_FORCE_PROXY_ON_INITIATOR           (0x4)
#endif

#define IKEEXT_RESERVED_AUTH_DISABLE_INITIATOR_TOKEN_GENERATION (0x1)

#define IKEEXT_NTLM_V2_AUTH_DONT_ACCEPT_EXPLICIT_CREDENTIALS (0x1)

#define IKEEXT_POLICY_FLAG_DISABLE_DIAGNOSTICS (0x00000001)
#define IKEEXT_POLICY_FLAG_NO_MACHINE_LUID_VERIFY (0x00000002)
#define IKEEXT_POLICY_FLAG_NO_IMPERSONATION_LUID_VERIFY (0x00000004)
#define IKEEXT_POLICY_FLAG_ENABLE_OPTIONAL_DH (0x00000008)

#define IKEEXT_CERT_CREDENTIAL_FLAG_NAP_CERT (0x1)

#if (NTDDI_VERSION >= NTDDI_WIN7)
#define IKEEXT_PSK_FLAG_LOCAL_AUTH_ONLY  (0x1)
#define IKEEXT_PSK_FLAG_REMOTE_AUTH_ONLY (0x2)

#define IKEEXT_EAP_FLAG_LOCAL_AUTH_ONLY   (0x1)
#define IKEEXT_EAP_FLAG_REMOTE_AUTH_ONLY  (0x2)
#endif

#ifndef __IPSEC_V4_UDP_ENCAPSULATION0_FWD_DECLARED
#define __IPSEC_V4_UDP_ENCAPSULATION0_FWD_DECLARED
typedef struct IPSEC_V4_UDP_ENCAPSULATION0_ IPSEC_V4_UDP_ENCAPSULATION0;
#endif

typedef UINT64 IKEEXT_COOKIE;

typedef enum IKEEXT_EM_SA_STATE_ {
    IKEEXT_EM_SA_STATE_NONE = 0,
    IKEEXT_EM_SA_STATE_SENT_ATTS = 1,
    IKEEXT_EM_SA_STATE_SSPI_SENT = 2,
    IKEEXT_EM_SA_STATE_AUTH_COMPLETE = 3,
    IKEEXT_EM_SA_STATE_FINAL = 4,
    IKEEXT_EM_SA_STATE_COMPLETE = 5,
    IKEEXT_EM_SA_STATE_MAX = 6
} IKEEXT_EM_SA_STATE;

typedef enum IKEEXT_SA_ROLE_ {
    IKEEXT_SA_ROLE_INITIATOR = 0,
    IKEEXT_SA_ROLE_RESPONDER = 1,
    IKEEXT_SA_ROLE_MAX = 2
} IKEEXT_SA_ROLE;

typedef enum IKEEXT_AUTHENTICATION_METHOD_TYPE_ {
    IKEEXT_PRESHARED_KEY = 0,
    IKEEXT_CERTIFICATE = 1,
    IKEEXT_KERBEROS = 2,
    IKEEXT_ANONYMOUS = 3,
    IKEEXT_SSL = 4,
    IKEEXT_NTLM_V2 = 5,
    IKEEXT_IPV6_CGA = 6,
    IKEEXT_CERTIFICATE_ECDSA_P256 = 7,
    IKEEXT_CERTIFICATE_ECDSA_P384 = 8,
    IKEEXT_SSL_ECDSA_P256 = 9,
    IKEEXT_SSL_ECDSA_P384 = 10,
    IKEEXT_EAP = 11,
    IKEEXT_RESERVED = 12,
    IKEEXT_AUTHENTICATION_METHOD_TYPE_MAX = 13
} IKEEXT_AUTHENTICATION_METHOD_TYPE;

typedef enum IKEEXT_KEY_MODULE_TYPE_ {
    IKEEXT_KEY_MODULE_IKE = 0,
    IKEEXT_KEY_MODULE_AUTHIP = 1,
    IKEEXT_KEY_MODULE_IKEV2 = 2,
    IKEEXT_KEY_MODULE_MAX = 3
} IKEEXT_KEY_MODULE_TYPE;

typedef enum IKEEXT_MM_SA_STATE_ {
    IKEEXT_MM_SA_STATE_NONE = 0,
    IKEEXT_MM_SA_STATE_SA_SENT = 1,
    IKEEXT_MM_SA_STATE_SSPI_SENT = 2,
    IKEEXT_MM_SA_STATE_FINAL = 3,
    IKEEXT_MM_SA_STATE_FINAL_SENT = 4,
    IKEEXT_MM_SA_STATE_COMPLETE = 5,
    IKEEXT_MM_SA_STATE_MAX = 6
} IKEEXT_MM_SA_STATE;

typedef enum IKEEXT_QM_SA_STATE_ {
    IKEEXT_QM_SA_STATE_NONE = 0,
    IKEEXT_QM_SA_STATE_INITIAL = 1,
    IKEEXT_QM_SA_STATE_FINAL = 2,
    IKEEXT_QM_SA_STATE_COMPLETE = 3,
    IKEEXT_QM_SA_STATE_MAX = 4
} IKEEXT_QM_SA_STATE;

typedef enum IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE_ {
    IKEEXT_IMPERSONATION_NONE = 0,
    IKEEXT_IMPERSONATION_SOCKET_PRINCIPAL = 1,
    IKEEXT_IMPERSONATION_MAX = 2
} IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE;

typedef enum IKEEXT_CERT_CONFIG_TYPE_ {
    IKEEXT_CERT_CONFIG_EXPLICIT_TRUST_LIST = 0,
    IKEEXT_CERT_CONFIG_ENTERPRISE_STORE = 1,
    IKEEXT_CERT_CONFIG_TRUSTED_ROOT_STORE = 2,
    IKEEXT_CERT_CONFIG_UNSPECIFIED = 3,
    IKEEXT_CERT_CONFIG_TYPE_MAX = 4
} IKEEXT_CERT_CONFIG_TYPE;

typedef enum IKEEXT_CIPHER_TYPE_ {
    IKEEXT_CIPHER_DES = 0,
    IKEEXT_CIPHER_3DES = 1,
    IKEEXT_CIPHER_AES_128 = 2,
    IKEEXT_CIPHER_AES_192 = 3,
    IKEEXT_CIPHER_AES_256 = 4,
    IKEEXT_CIPHER_TYPE_MAX = 5
} IKEEXT_CIPHER_TYPE;

typedef enum IKEEXT_INTEGRITY_TYPE_ {
    IKEEXT_INTEGRITY_MD5 = 0,
    IKEEXT_INTEGRITY_SHA1 = 1,
    IKEEXT_INTEGRITY_SHA_256 = 2,
    IKEEXT_INTEGRITY_SHA_384 = 3,
    IKEEXT_INTEGRITY_TYPE_MAX = 4
} IKEEXT_INTEGRITY_TYPE;

typedef enum IKEEXT_DH_GROUP_ {
    IKEEXT_DH_GROUP_NONE = 0,
    IKEEXT_DH_GROUP_1 = 1,
    IKEEXT_DH_GROUP_2 = 2,
    IKEEXT_DH_GROUP_14 = 3,
    IKEEXT_DH_GROUP_2048 = IKEEXT_DH_GROUP_14,
    IKEEXT_DH_ECP_256 = 4,
    IKEEXT_DH_ECP_384 = 5,
    IKEEXT_DH_GROUP_24 = 6,
    IKEEXT_DH_GROUP_MAX = 7
} IKEEXT_DH_GROUP;

typedef struct IKEEXT_CERT_ROOT_CONFIG0_ {
    FWP_BYTE_BLOB certData;
    UINT32 flags;
} IKEEXT_CERT_ROOT_CONFIG0;

typedef struct IKEEXT_KERBEROS_AUTHENTICATION0__ {
    UINT32 flags;
} IKEEXT_KERBEROS_AUTHENTICATION0;

typedef struct IKEEXT_NTLM_V2_AUTHENTICATION0__ {
    UINT32 flags;
} IKEEXT_NTLM_V2_AUTHENTICATION0;

typedef struct IKEEXT_PRESHARED_KEY_AUTHENTICATION0__ {
    FWP_BYTE_BLOB presharedKey;
} IKEEXT_PRESHARED_KEY_AUTHENTICATION0;

typedef struct IKEEXT_PRESHARED_KEY_AUTHENTICATION1__ {
    FWP_BYTE_BLOB presharedKey;
    UINT32 flags;
} IKEEXT_PRESHARED_KEY_AUTHENTICATION1;

typedef struct IKEEXT_CERTIFICATE_AUTHENTICATION0_ {
    IKEEXT_CERT_CONFIG_TYPE inboundConfigType;
    __C89_NAMELESS union {
        __C89_NAMELESS struct {
            UINT32 inboundRootArraySize;
            IKEEXT_CERT_ROOT_CONFIG0 *inboundRootArray;
        } __C89_NAMELESSSTRUCTNAME;
        IKEEXT_CERT_ROOT_CONFIG0 *inboundEnterpriseStoreConfig;
        IKEEXT_CERT_ROOT_CONFIG0 *inboundTrustedRootStoreConfig;
    } __C89_NAMELESSUNIONNAME1;
    IKEEXT_CERT_CONFIG_TYPE outboundConfigType;
    __C89_NAMELESS union {
        __C89_NAMELESS struct {
            UINT32 outboundRootArraySize;
            IKEEXT_CERT_ROOT_CONFIG0 *outboundRootArray;
        } __C89_NAMELESSSTRUCTNAME;
        IKEEXT_CERT_ROOT_CONFIG0 *outboundEnterpriseStoreConfig;
        IKEEXT_CERT_ROOT_CONFIG0 *outboundTrustedRootStoreConfig;
    } __C89_NAMELESSUNIONNAME2;
    UINT32 flags;
} IKEEXT_CERTIFICATE_AUTHENTICATION0;

#if NTDDI_VERSION >= NTDDI_WIN7
typedef struct IKEEXT_CERTIFICATE_AUTHENTICATION1_ {
    IKEEXT_CERT_CONFIG_TYPE inboundConfigType;
    __C89_NAMELESS union {
        __C89_NAMELESS struct {
            UINT32 inboundRootArraySize;
            IKEEXT_CERT_ROOT_CONFIG0 *inboundRootArray;
        } __C89_NAMELESSSTRUCTNAME;
        IKEEXT_CERT_ROOT_CONFIG0 *inboundEnterpriseStoreConfig;
        IKEEXT_CERT_ROOT_CONFIG0 *inboundTrustedRootStoreConfig;
    } __C89_NAMELESSUNIONNAME1;
    IKEEXT_CERT_CONFIG_TYPE outboundConfigType;
    __C89_NAMELESS union {
        __C89_NAMELESS struct {
            UINT32 outboundRootArraySize;
            IKEEXT_CERT_ROOT_CONFIG0 *outboundRootArray;
        } __C89_NAMELESSSTRUCTNAME;
        IKEEXT_CERT_ROOT_CONFIG0 *outboundEnterpriseStoreConfig;
        IKEEXT_CERT_ROOT_CONFIG0 *outboundTrustedRootStoreConfig;
    } __C89_NAMELESSUNIONNAME2;
    UINT32 flags;
    FWP_BYTE_BLOB localCertLocationUrl;
} IKEEXT_CERTIFICATE_AUTHENTICATION1;
#endif

#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef enum IKEEXT_CERT_CRITERIA_NAME_TYPE_ {
    IKEEXT_CERT_CRITERIA_DNS = 0,
    IKEEXT_CERT_CRITERIA_UPN = 1,
    IKEEXT_CERT_CRITERIA_RFC822 = 2,
    IKEEXT_CERT_CRITERIA_CN = 3,
    IKEEXT_CERT_CRITERIA_OU = 4,
    IKEEXT_CERT_CRITERIA_O = 5,
    IKEEXT_CERT_CRITERIA_DC = 6,
    IKEEXT_CERT_CRITERIA_NAME_TYPE_MAX = 7
} IKEEXT_CERT_CRITERIA_NAME_TYPE;

typedef struct IKEEXT_CERT_EKUS0_ {
    ULONG numEku;
    LPSTR *eku;
} IKEEXT_CERT_EKUS0;

typedef struct IKEEXT_CERT_NAME0_ {
    IKEEXT_CERT_CRITERIA_NAME_TYPE nameType;
    LPWSTR certName;
} IKEEXT_CERT_NAME0;

typedef struct IKEEXT_CERTIFICATE_CRITERIA0_ {
    FWP_BYTE_BLOB certData;
    FWP_BYTE_BLOB certHash;
    IKEEXT_CERT_EKUS0 *eku;
    IKEEXT_CERT_NAME0 *name;
    UINT32 flags;
} IKEEXT_CERTIFICATE_CRITERIA0;

typedef struct IKEEXT_CERTIFICATE_AUTHENTICATION2_ {
    IKEEXT_CERT_CONFIG_TYPE inboundConfigType;
    __C89_NAMELESS union {
        __C89_NAMELESS struct {
            UINT32 inboundRootArraySize;
            IKEEXT_CERTIFICATE_CRITERIA0 *inboundRootCriteria;
        } __C89_NAMELESSSTRUCTNAME1;
        __C89_NAMELESS struct {
            UINT32 inboundEnterpriseStoreArraySize;
            IKEEXT_CERTIFICATE_CRITERIA0 *inboundEnterpriseStoreCriteria;
        } __C89_NAMELESSSTRUCTNAME2;
        __C89_NAMELESS struct {
            UINT32 inboundRootStoreArraySize;
            IKEEXT_CERTIFICATE_CRITERIA0 *inboundTrustedRootStoreCriteria;
        } __C89_NAMELESSSTRUCTNAME3;
    } __C89_NAMELESSUNIONNAME1;
    IKEEXT_CERT_CONFIG_TYPE outboundConfigType;
    __C89_NAMELESS union {
        __C89_NAMELESS struct {
            UINT32 outboundRootArraySize;
            IKEEXT_CERTIFICATE_CRITERIA0 *outboundRootCriteria;
        } __C89_NAMELESSSTRUCTNAME1;
        __C89_NAMELESS struct {
            UINT32 outboundEnterpriseStoreArraySize;
            IKEEXT_CERTIFICATE_CRITERIA0 *outboundEnterpriseStoreCriteria;
        } __C89_NAMELESSSTRUCTNAME2;
        __C89_NAMELESS struct {
            UINT32 outboundRootStoreArraySize;
            IKEEXT_CERTIFICATE_CRITERIA0 *outboundTrustedRootStoreCriteria;
        } __C89_NAMELESSSTRUCTNAME3;
    } __C89_NAMELESSUNIONNAME2;
    UINT32 flags;
    FWP_BYTE_BLOB localCertLocationUrl;
} IKEEXT_CERTIFICATE_AUTHENTICATION2;
#endif

typedef struct IKEEXT_IPV6_CGA_AUTHENTICATION0_ {
    wchar_t *keyContainerName;
    wchar_t *cspName;
    UINT32 cspType;
    FWP_BYTE_ARRAY16 cgaModifier;
    BYTE cgaCollisionCount;
} IKEEXT_IPV6_CGA_AUTHENTICATION0;

#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef struct IKEEXT_KERBEROS_AUTHENTICATION1__ {
    UINT32 flags;
    wchar_t *proxyServer;
} IKEEXT_KERBEROS_AUTHENTICATION1;
#endif

typedef struct IKEEXT_RESERVED_AUTHENTICATION0__ {
    UINT32 flags;
} IKEEXT_RESERVED_AUTHENTICATION0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_EAP_AUTHENTICATION0__ {
    UINT32 flags;
} IKEEXT_EAP_AUTHENTICATION0;
#endif

typedef struct IKEEXT_AUTHENTICATION_METHOD0_ {
    IKEEXT_AUTHENTICATION_METHOD_TYPE authenticationMethodType;
    __C89_NAMELESS union {
        IKEEXT_PRESHARED_KEY_AUTHENTICATION0 presharedKeyAuthentication;
        IKEEXT_CERTIFICATE_AUTHENTICATION0 certificateAuthentication;
        IKEEXT_KERBEROS_AUTHENTICATION0 kerberosAuthentication;
        IKEEXT_NTLM_V2_AUTHENTICATION0 ntlmV2Authentication;
        IKEEXT_CERTIFICATE_AUTHENTICATION0 sslAuthentication;
        IKEEXT_IPV6_CGA_AUTHENTICATION0 cgaAuthentication;
    } __C89_NAMELESSUNIONNAME;
} IKEEXT_AUTHENTICATION_METHOD0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_AUTHENTICATION_METHOD1_ {
    IKEEXT_AUTHENTICATION_METHOD_TYPE authenticationMethodType;
    __C89_NAMELESS union {
        IKEEXT_PRESHARED_KEY_AUTHENTICATION1 presharedKeyAuthentication;
        IKEEXT_CERTIFICATE_AUTHENTICATION1 certificateAuthentication;
        IKEEXT_KERBEROS_AUTHENTICATION0 kerberosAuthentication;
        IKEEXT_NTLM_V2_AUTHENTICATION0 ntlmV2Authentication;
        IKEEXT_CERTIFICATE_AUTHENTICATION1 sslAuthentication;
        IKEEXT_IPV6_CGA_AUTHENTICATION0 cgaAuthentication;
        IKEEXT_EAP_AUTHENTICATION0 eapAuthentication;
    } __C89_NAMELESSUNIONNAME;
} IKEEXT_AUTHENTICATION_METHOD1;
#endif

#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef struct IKEEXT_AUTHENTICATION_METHOD2_ {
    IKEEXT_AUTHENTICATION_METHOD_TYPE authenticationMethodType;
    __C89_NAMELESS union {
        IKEEXT_PRESHARED_KEY_AUTHENTICATION1 presharedKeyAuthentication;
        IKEEXT_CERTIFICATE_AUTHENTICATION2 certificateAuthentication;
        IKEEXT_KERBEROS_AUTHENTICATION1 kerberosAuthentication;
        IKEEXT_RESERVED_AUTHENTICATION0 reservedAuthentication;
        IKEEXT_NTLM_V2_AUTHENTICATION0 ntlmV2Authentication;
        IKEEXT_CERTIFICATE_AUTHENTICATION2 sslAuthentication;
        IKEEXT_IPV6_CGA_AUTHENTICATION0 cgaAuthentication;
        IKEEXT_EAP_AUTHENTICATION0 eapAuthentication;
    } __C89_NAMELESSUNIONNAME;
} IKEEXT_AUTHENTICATION_METHOD2;
#endif

typedef struct IKEEXT_CIPHER_ALGORITHM0_ {
    IKEEXT_CIPHER_TYPE algoIdentifier;
    UINT32 keyLen;
    UINT32 rounds;
} IKEEXT_CIPHER_ALGORITHM0;

typedef struct IKEEXT_INTEGRITY_ALGORITHM0_ {
    IKEEXT_INTEGRITY_TYPE algoIdentifier;
} IKEEXT_INTEGRITY_ALGORITHM0;

typedef struct IKEEXT_PROPOSAL0_ {
    IKEEXT_CIPHER_ALGORITHM0 cipherAlgorithm;
    IKEEXT_INTEGRITY_ALGORITHM0 integrityAlgorithm;
    UINT32 maxLifetimeSeconds;
    IKEEXT_DH_GROUP dhGroup;
    UINT32 quickModeLimit;
} IKEEXT_PROPOSAL0;

typedef struct IKEEXT_POLICY0_ {
    UINT32 softExpirationTime;
    UINT32 numAuthenticationMethods;
    IKEEXT_AUTHENTICATION_METHOD0 *authenticationMethods;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE initiatorImpersonationType;
    UINT32 numIkeProposals;
    IKEEXT_PROPOSAL0 *ikeProposals;
    UINT32 flags;
    UINT32 maxDynamicFilters;
} IKEEXT_POLICY0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_POLICY1_ {
    UINT32 softExpirationTime;
    UINT32 numAuthenticationMethods;
    IKEEXT_AUTHENTICATION_METHOD1 *authenticationMethods;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE initiatorImpersonationType;
    UINT32 numIkeProposals;
    IKEEXT_PROPOSAL0 *ikeProposals;
    UINT32 flags;
    UINT32 maxDynamicFilters;
    UINT32 retransmitDurationSecs;
} IKEEXT_POLICY1;
#endif

#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef struct IKEEXT_POLICY2_ {
    UINT32 softExpirationTime;
    UINT32 numAuthenticationMethods;
    IKEEXT_AUTHENTICATION_METHOD2 *authenticationMethods;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE initiatorImpersonationType;
    UINT32 numIkeProposals;
    IKEEXT_PROPOSAL0 *ikeProposals;
    UINT32 flags;
    UINT32 maxDynamicFilters;
    UINT32 retransmitDurationSecs;
} IKEEXT_POLICY2;
#endif

typedef struct IKEEXT_EM_POLICY0_ {
    UINT32 numAuthenticationMethods;
    IKEEXT_AUTHENTICATION_METHOD0 *authenticationMethods;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE initiatorImpersonationType;
} IKEEXT_EM_POLICY0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_EM_POLICY1_ {
    UINT32 numAuthenticationMethods;
    IKEEXT_AUTHENTICATION_METHOD1 *authenticationMethods;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE initiatorImpersonationType;
} IKEEXT_EM_POLICY1;
#endif

#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef struct IKEEXT_EM_POLICY2_ {
    UINT32 numAuthenticationMethods;
    IKEEXT_AUTHENTICATION_METHOD2 *authenticationMethods;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE initiatorImpersonationType;
} IKEEXT_EM_POLICY2;
#endif

typedef struct IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0_ {
    UINT32 currentActiveMainModes;
    UINT32 totalMainModesStarted;
    UINT32 totalSuccessfulMainModes;
    UINT32 totalFailedMainModes;
    UINT32 totalResponderMainModes;
    UINT32 currentNewResponderMainModes;
    UINT32 currentActiveQuickModes;
    UINT32 totalQuickModesStarted;
    UINT32 totalSuccessfulQuickModes;
    UINT32 totalFailedQuickModes;
    UINT32 totalAcquires;
    UINT32 totalReinitAcquires;
    UINT32 currentActiveExtendedModes;
    UINT32 totalExtendedModesStarted;
    UINT32 totalSuccessfulExtendedModes;
    UINT32 totalFailedExtendedModes;
    UINT32 totalImpersonationExtendedModes;
    UINT32 totalImpersonationMainModes;
} IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS1_ {
    UINT32 currentActiveMainModes;
    UINT32 totalMainModesStarted;
    UINT32 totalSuccessfulMainModes;
    UINT32 totalFailedMainModes;
    UINT32 totalResponderMainModes;
    UINT32 currentNewResponderMainModes;
    UINT32 currentActiveQuickModes;
    UINT32 totalQuickModesStarted;
    UINT32 totalSuccessfulQuickModes;
    UINT32 totalFailedQuickModes;
    UINT32 totalAcquires;
    UINT32 totalReinitAcquires;
    UINT32 currentActiveExtendedModes;
    UINT32 totalExtendedModesStarted;
    UINT32 totalSuccessfulExtendedModes;
    UINT32 totalFailedExtendedModes;
    UINT32 totalImpersonationExtendedModes;
    UINT32 totalImpersonationMainModes;
} IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS1;
#endif

typedef struct IKEEXT_KEYMODULE_STATISTICS0_ {
    IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0 v4Statistics;
    IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0 v6Statistics;
    UINT32 errorFrequencyTable[97];
    UINT32 mainModeNegotiationTime;
    UINT32 quickModeNegotiationTime;
    UINT32 extendedModeNegotiationTime;
} IKEEXT_KEYMODULE_STATISTICS0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_KEYMODULE_STATISTICS1_ {
    IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS1 v4Statistics;
    IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS1 v6Statistics;
    UINT32 errorFrequencyTable[97];
    UINT32 mainModeNegotiationTime;
    UINT32 quickModeNegotiationTime;
    UINT32 extendedModeNegotiationTime;
} IKEEXT_KEYMODULE_STATISTICS1;
#endif

typedef struct IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS0_ {
    UINT32 totalSocketReceiveFailures;
    UINT32 totalSocketSendFailures;
} IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS1_ {
    UINT32 totalSocketReceiveFailures;
    UINT32 totalSocketSendFailures;
} IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS1;
#endif

typedef struct IKEEXT_COMMON_STATISTICS0_ {
    IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS0 v4Statistics;
    IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS0 v6Statistics;
    UINT32 totalPacketsReceived;
    UINT32 totalInvalidPacketsReceived;
    UINT32 currentQueuedWorkitems;
} IKEEXT_COMMON_STATISTICS0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_COMMON_STATISTICS1_ {
    IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS1 v4Statistics;
    IKEEXT_IP_VERSION_SPECIFIC_COMMON_STATISTICS1 v6Statistics;
    UINT32 totalPacketsReceived;
    UINT32 totalInvalidPacketsReceived;
    UINT32 currentQueuedWorkitems;
} IKEEXT_COMMON_STATISTICS1;
#endif

typedef struct IKEEXT_STATISTICS0_ {
    IKEEXT_KEYMODULE_STATISTICS0 ikeStatistics;
    IKEEXT_KEYMODULE_STATISTICS0 authipStatistics;
    IKEEXT_COMMON_STATISTICS0 commonStatistics;
} IKEEXT_STATISTICS0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_STATISTICS1_ {
    IKEEXT_KEYMODULE_STATISTICS1 ikeStatistics;
    IKEEXT_KEYMODULE_STATISTICS1 authipStatistics;
    IKEEXT_KEYMODULE_STATISTICS1 ikeV2Statistics;
    IKEEXT_COMMON_STATISTICS1 commonStatistics;
} IKEEXT_STATISTICS1;
#endif

typedef struct IKEEXT_TRAFFIC0_ {
    FWP_IP_VERSION ipVersion;
    __C89_NAMELESS union {
        UINT32 localV4Address;
        UINT8 localV6Address[16];
    } __C89_NAMELESSUNIONNAME1;
    __C89_NAMELESS union {
        UINT32 remoteV4Address;
        UINT8 remoteV6Address[16];
    } __C89_NAMELESSUNIONNAME2;
    UINT64 authIpFilterId;
} IKEEXT_TRAFFIC0;

typedef struct IKEEXT_COOKIE_PAIR0_ {
    IKEEXT_COOKIE initiator;
    IKEEXT_COOKIE responder;
} IKEEXT_COOKIE_PAIR0;

typedef struct IKEEXT_CERTIFICATE_CREDENTIAL0_ {
    FWP_BYTE_BLOB subjectName;
    FWP_BYTE_BLOB certHash;
    UINT32 flags;
} IKEEXT_CERTIFICATE_CREDENTIAL0;

typedef struct IKEEXT_NAME_CREDENTIAL0_ {
    wchar_t *principalName;
} IKEEXT_NAME_CREDENTIAL0;
typedef struct IKEEXT_CREDENTIAL0_ {
    IKEEXT_AUTHENTICATION_METHOD_TYPE authenticationMethodType;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE impersonationType;
    __C89_NAMELESS union {
        IKEEXT_PRESHARED_KEY_AUTHENTICATION0 *presharedKey;
        IKEEXT_CERTIFICATE_CREDENTIAL0 *certificate;
        IKEEXT_NAME_CREDENTIAL0 *name;
    } __C89_NAMELESSUNIONNAME;
} IKEEXT_CREDENTIAL0;

typedef struct IKEEXT_CREDENTIAL_PAIR0_ {
    IKEEXT_CREDENTIAL0 localCredentials;
    IKEEXT_CREDENTIAL0 peerCredentials;
} IKEEXT_CREDENTIAL_PAIR0;

typedef struct IKEEXT_CREDENTIALS0_ {
    UINT32 numCredentials;
    IKEEXT_CREDENTIAL_PAIR0 *credentials;
} IKEEXT_CREDENTIALS0;

typedef struct IKEEXT_SA_DETAILS0_ {
    UINT64 saId;
    IKEEXT_KEY_MODULE_TYPE keyModuleType;
    FWP_IP_VERSION ipVersion;
    __C89_NAMELESS union {
        IPSEC_V4_UDP_ENCAPSULATION0 *v4UdpEncapsulation;
    } __C89_NAMELESSUNIONNAME;
    IKEEXT_TRAFFIC0 ikeTraffic;
    IKEEXT_PROPOSAL0 ikeProposal;
    IKEEXT_COOKIE_PAIR0 cookiePair;
    IKEEXT_CREDENTIALS0 ikeCredentials;
    GUID ikePolicyKey;
    UINT64 virtualIfTunnelId;
} IKEEXT_SA_DETAILS0;

#if (NTDDI_VERSION >= NTDDI_WIN7)
typedef struct IKEEXT_CERTIFICATE_CREDENTIAL1_ {
    FWP_BYTE_BLOB subjectName;
    FWP_BYTE_BLOB certHash;
    UINT32 flags;
    FWP_BYTE_BLOB certificate;
} IKEEXT_CERTIFICATE_CREDENTIAL1;

typedef struct IKEEXT_CREDENTIAL1_ {
    IKEEXT_AUTHENTICATION_METHOD_TYPE authenticationMethodType;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE impersonationType;
    __C89_NAMELESS union {
        IKEEXT_PRESHARED_KEY_AUTHENTICATION1 *presharedKey;
        IKEEXT_CERTIFICATE_CREDENTIAL1 *certificate;
        IKEEXT_NAME_CREDENTIAL0 *name;
    } __C89_NAMELESSUNIONNAME;
} IKEEXT_CREDENTIAL1;

typedef struct IKEEXT_CREDENTIAL_PAIR1_ {
    IKEEXT_CREDENTIAL1 localCredentials;
    IKEEXT_CREDENTIAL1 peerCredentials;
} IKEEXT_CREDENTIAL_PAIR1;

typedef struct IKEEXT_CREDENTIALS1_ {
    UINT32 numCredentials;
    IKEEXT_CREDENTIAL_PAIR1 *credentials;
} IKEEXT_CREDENTIALS1;

typedef struct IKEEXT_SA_DETAILS1_ {
    UINT64 saId;
    IKEEXT_KEY_MODULE_TYPE keyModuleType;
    FWP_IP_VERSION ipVersion;
    __C89_NAMELESS union {
        IPSEC_V4_UDP_ENCAPSULATION0 *v4UdpEncapsulation;
    } __C89_NAMELESSUNIONNAME;
    IKEEXT_TRAFFIC0 ikeTraffic;
    IKEEXT_PROPOSAL0 ikeProposal;
    IKEEXT_COOKIE_PAIR0 cookiePair;
    IKEEXT_CREDENTIALS1 ikeCredentials;
    GUID ikePolicyKey;
    UINT64 virtualIfTunnelId;
    FWP_BYTE_BLOB correlationKey;
} IKEEXT_SA_DETAILS1;
#endif

#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef struct IKEEXT_CREDENTIAL2_ {
    IKEEXT_AUTHENTICATION_METHOD_TYPE authenticationMethodType;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE impersonationType;
    __C89_NAMELESS union {
        IKEEXT_PRESHARED_KEY_AUTHENTICATION1 *presharedKey;
        IKEEXT_CERTIFICATE_CREDENTIAL1 *certificate;
        IKEEXT_NAME_CREDENTIAL0 *name;
    } __C89_NAMELESSUNIONNAME;
} IKEEXT_CREDENTIAL2;

typedef struct IKEEXT_CREDENTIAL_PAIR2_ {
    IKEEXT_CREDENTIAL2 localCredentials;
    IKEEXT_CREDENTIAL2 peerCredentials;
} IKEEXT_CREDENTIAL_PAIR2;

typedef struct IKEEXT_CREDENTIALS2_ {
    UINT32 numCredentials;
    IKEEXT_CREDENTIAL_PAIR2 *credentials;
} IKEEXT_CREDENTIALS2;

typedef struct IKEEXT_SA_DETAILS2_ {
    UINT64 saId;
    IKEEXT_KEY_MODULE_TYPE keyModuleType;
    FWP_IP_VERSION ipVersion;
    __C89_NAMELESS union {
        IPSEC_V4_UDP_ENCAPSULATION0 *v4UdpEncapsulation;
    } __C89_NAMELESSUNIONNAME;
    IKEEXT_TRAFFIC0 ikeTraffic;
    IKEEXT_PROPOSAL0 ikeProposal;
    IKEEXT_COOKIE_PAIR0 cookiePair;
    IKEEXT_CREDENTIALS2 ikeCredentials;
    GUID ikePolicyKey;
    UINT64 virtualIfTunnelId;
    FWP_BYTE_BLOB correlationKey;
} IKEEXT_SA_DETAILS2;
#endif

typedef struct IKEEXT_SA_ENUM_TEMPLATE0_ {
    FWP_CONDITION_VALUE0 localSubNet;
    FWP_CONDITION_VALUE0 remoteSubNet;
    FWP_BYTE_BLOB localMainModeCertHash;
} IKEEXT_SA_ENUM_TEMPLATE0;

#endif /* WINAPI_PARTITION_DESKTOP.  */
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __iketypes_h__ */
