Add ALG-API interfaces.


git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@6552 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index ffbd843..58dec81 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -65,6 +65,7 @@
   include/activprof.idl \
   include/activscp.idl \
   include/adhoc.idl \
+  include/alg.idl \
   include/audioclient.idl \
   include/audioendpoints.idl \
   include/audiopolicy.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index b28f10f..b09e933 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -289,6 +289,7 @@
 @HAVE_WIDL_TRUE@  include/activprof.idl \
 @HAVE_WIDL_TRUE@  include/activscp.idl \
 @HAVE_WIDL_TRUE@  include/adhoc.idl \
+@HAVE_WIDL_TRUE@  include/alg.idl \
 @HAVE_WIDL_TRUE@  include/audioclient.idl \
 @HAVE_WIDL_TRUE@  include/audioendpoints.idl \
 @HAVE_WIDL_TRUE@  include/audiopolicy.idl \
diff --git a/mingw-w64-headers/include/alg.h b/mingw-w64-headers/include/alg.h
new file mode 100644
index 0000000..2e423d9
--- /dev/null
+++ b/mingw-w64-headers/include/alg.h
@@ -0,0 +1,1933 @@
+/*** Autogenerated by WIDL 1.6 from alg.idl - Do not edit ***/
+
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __alg_h__
+#define __alg_h__
+
+/* Forward declarations */
+
+#ifndef __IAdapterInfo_FWD_DEFINED__
+#define __IAdapterInfo_FWD_DEFINED__
+typedef interface IAdapterInfo IAdapterInfo;
+#endif
+
+#ifndef __IPendingProxyConnection_FWD_DEFINED__
+#define __IPendingProxyConnection_FWD_DEFINED__
+typedef interface IPendingProxyConnection IPendingProxyConnection;
+#endif
+
+#ifndef __IDataChannel_FWD_DEFINED__
+#define __IDataChannel_FWD_DEFINED__
+typedef interface IDataChannel IDataChannel;
+#endif
+
+#ifndef __IPersistentDataChannel_FWD_DEFINED__
+#define __IPersistentDataChannel_FWD_DEFINED__
+typedef interface IPersistentDataChannel IPersistentDataChannel;
+#endif
+
+#ifndef __IPrimaryControlChannel_FWD_DEFINED__
+#define __IPrimaryControlChannel_FWD_DEFINED__
+typedef interface IPrimaryControlChannel IPrimaryControlChannel;
+#endif
+
+#ifndef __ISecondaryControlChannel_FWD_DEFINED__
+#define __ISecondaryControlChannel_FWD_DEFINED__
+typedef interface ISecondaryControlChannel ISecondaryControlChannel;
+#endif
+
+#ifndef __IEnumAdapterInfo_FWD_DEFINED__
+#define __IEnumAdapterInfo_FWD_DEFINED__
+typedef interface IEnumAdapterInfo IEnumAdapterInfo;
+#endif
+
+#ifndef __IAdapterNotificationSink_FWD_DEFINED__
+#define __IAdapterNotificationSink_FWD_DEFINED__
+typedef interface IAdapterNotificationSink IAdapterNotificationSink;
+#endif
+
+#ifndef __IApplicationGatewayServices_FWD_DEFINED__
+#define __IApplicationGatewayServices_FWD_DEFINED__
+typedef interface IApplicationGatewayServices IApplicationGatewayServices;
+#endif
+
+#ifndef __IApplicationGateway_FWD_DEFINED__
+#define __IApplicationGateway_FWD_DEFINED__
+typedef interface IApplicationGateway IApplicationGateway;
+#endif
+
+#ifndef __ApplicationGatewayServices_FWD_DEFINED__
+#define __ApplicationGatewayServices_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ApplicationGatewayServices ApplicationGatewayServices;
+#else
+typedef struct ApplicationGatewayServices ApplicationGatewayServices;
+#endif /* defined __cplusplus */
+#endif /* defined __ApplicationGatewayServices_FWD_DEFINED__ */
+
+#ifndef __PrimaryControlChannel_FWD_DEFINED__
+#define __PrimaryControlChannel_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class PrimaryControlChannel PrimaryControlChannel;
+#else
+typedef struct PrimaryControlChannel PrimaryControlChannel;
+#endif /* defined __cplusplus */
+#endif /* defined __PrimaryControlChannel_FWD_DEFINED__ */
+
+#ifndef __SecondaryControlChannel_FWD_DEFINED__
+#define __SecondaryControlChannel_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class SecondaryControlChannel SecondaryControlChannel;
+#else
+typedef struct SecondaryControlChannel SecondaryControlChannel;
+#endif /* defined __cplusplus */
+#endif /* defined __SecondaryControlChannel_FWD_DEFINED__ */
+
+#ifndef __AdapterInfo_FWD_DEFINED__
+#define __AdapterInfo_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AdapterInfo AdapterInfo;
+#else
+typedef struct AdapterInfo AdapterInfo;
+#endif /* defined __cplusplus */
+#endif /* defined __AdapterInfo_FWD_DEFINED__ */
+
+#ifndef __EnumAdapterInfo_FWD_DEFINED__
+#define __EnumAdapterInfo_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class EnumAdapterInfo EnumAdapterInfo;
+#else
+typedef struct EnumAdapterInfo EnumAdapterInfo;
+#endif /* defined __cplusplus */
+#endif /* defined __EnumAdapterInfo_FWD_DEFINED__ */
+
+#ifndef __PendingProxyConnection_FWD_DEFINED__
+#define __PendingProxyConnection_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class PendingProxyConnection PendingProxyConnection;
+#else
+typedef struct PendingProxyConnection PendingProxyConnection;
+#endif /* defined __cplusplus */
+#endif /* defined __PendingProxyConnection_FWD_DEFINED__ */
+
+#ifndef __DataChannel_FWD_DEFINED__
+#define __DataChannel_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DataChannel DataChannel;
+#else
+typedef struct DataChannel DataChannel;
+#endif /* defined __cplusplus */
+#endif /* defined __DataChannel_FWD_DEFINED__ */
+
+#ifndef __PersistentDataChannel_FWD_DEFINED__
+#define __PersistentDataChannel_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class PersistentDataChannel PersistentDataChannel;
+#else
+typedef struct PersistentDataChannel PersistentDataChannel;
+#endif /* defined __cplusplus */
+#endif /* defined __PersistentDataChannel_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <oaidl.h>
+#include <ocidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+typedef enum _ALG_ADAPTER_TYPE {
+    eALG_PRIVATE = 0x1,
+    eALG_BOUNDARY = 0x2,
+    eALG_FIREWALLED = 0x4
+} ALG_ADAPTER_TYPE;
+typedef enum _ALG_CAPTURE {
+    eALG_SOURCE_CAPTURE = 0x1,
+    eALG_DESTINATION_CAPTURE = 0x2
+} ALG_CAPTURE;
+typedef enum _ALG_DIRECTION {
+    eALG_INBOUND = 0x1,
+    eALG_OUTBOUND = 0x2,
+    eALG_BOTH = 0x3
+} ALG_DIRECTION;
+typedef enum _ALG_NOTIFICATION {
+    eALG_NONE = 0x0,
+    eALG_SESSION_CREATION = 0x1,
+    eALG_SESSION_DELETION = 0x2,
+    eALG_SESSION_BOTH = 0x3
+} ALG_NOTIFICATION;
+typedef enum _ALG_PROTOCOL {
+    eALG_TCP = 0x1,
+    eALG_UDP = 0x2
+} ALG_PROTOCOL;
+typedef struct _ALG_PRIMARY_CHANNEL_PROPERTIES {
+    ALG_PROTOCOL eProtocol;
+    USHORT usCapturePort;
+    ALG_CAPTURE eCaptureType;
+    WINBOOL fCaptureInbound;
+    ULONG ulListeningAddress;
+    USHORT usListeningPort;
+    ULONG ulAdapterIndex;
+} ALG_PRIMARY_CHANNEL_PROPERTIES;
+typedef struct _ALG_SECONDARY_CHANNEL_PROPERTIES {
+    ALG_PROTOCOL eProtocol;
+    ULONG ulPrivateAddress;
+    USHORT usPrivatePort;
+    ULONG ulPublicAddress;
+    USHORT usPublicPort;
+    ULONG ulRemoteAddress;
+    USHORT usRemotePort;
+    ULONG ulListenAddress;
+    USHORT usListenPort;
+    ALG_DIRECTION eDirection;
+    WINBOOL fPersistent;
+} ALG_SECONDARY_CHANNEL_PROPERTIES;
+typedef struct _ALG_DATA_CHANNEL_PROPERTIES {
+    ALG_PROTOCOL eProtocol;
+    ULONG ulPrivateAddress;
+    USHORT usPrivatePort;
+    ULONG ulPublicAddress;
+    USHORT usPublicPort;
+    ULONG ulRemoteAddress;
+    USHORT usRemotePort;
+    ALG_DIRECTION eDirection;
+    ALG_NOTIFICATION eDesiredNotification;
+} ALG_DATA_CHANNEL_PROPERTIES;
+typedef struct _ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES {
+    ALG_PROTOCOL eProtocol;
+    ULONG ulPrivateAddress;
+    USHORT usPrivatePort;
+    ULONG ulPublicAddress;
+    USHORT usPublicPort;
+    ULONG ulRemoteAddress;
+    USHORT usRemotePort;
+    ALG_DIRECTION eDirection;
+} ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES;
+#define ALG_MAXIMUM_PORT_RANGE_SIZE (10)
+
+/*****************************************************************************
+ * IAdapterInfo interface
+ */
+#ifndef __IAdapterInfo_INTERFACE_DEFINED__
+#define __IAdapterInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAdapterInfo, 0x480bf94a, 0x09fd, 0x4f8a, 0xa3,0xe0, 0xb0,0x70,0x02,0x82,0xd8,0x4d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("480bf94a-09fd-4f8a-a3e0-b0700282d84d")
+IAdapterInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterIndex(
+        ULONG *pulIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterType(
+        ALG_ADAPTER_TYPE *pAdapterType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterAddresses(
+        ULONG *pulAddressCount,
+        ULONG **prgAddresses) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAdapterInfo, 0x480bf94a, 0x09fd, 0x4f8a, 0xa3,0xe0, 0xb0,0x70,0x02,0x82,0xd8,0x4d)
+#endif
+#else
+typedef struct IAdapterInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAdapterInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAdapterInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAdapterInfo* This);
+
+    /*** IAdapterInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAdapterIndex)(
+        IAdapterInfo* This,
+        ULONG *pulIndex);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterType)(
+        IAdapterInfo* This,
+        ALG_ADAPTER_TYPE *pAdapterType);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterAddresses)(
+        IAdapterInfo* This,
+        ULONG *pulAddressCount,
+        ULONG **prgAddresses);
+
+    END_INTERFACE
+} IAdapterInfoVtbl;
+interface IAdapterInfo {
+    CONST_VTBL IAdapterInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAdapterInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAdapterInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAdapterInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IAdapterInfo methods ***/
+#define IAdapterInfo_GetAdapterIndex(This,pulIndex) (This)->lpVtbl->GetAdapterIndex(This,pulIndex)
+#define IAdapterInfo_GetAdapterType(This,pAdapterType) (This)->lpVtbl->GetAdapterType(This,pAdapterType)
+#define IAdapterInfo_GetAdapterAddresses(This,pulAddressCount,prgAddresses) (This)->lpVtbl->GetAdapterAddresses(This,pulAddressCount,prgAddresses)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAdapterInfo_QueryInterface(IAdapterInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAdapterInfo_AddRef(IAdapterInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAdapterInfo_Release(IAdapterInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAdapterInfo methods ***/
+static FORCEINLINE HRESULT IAdapterInfo_GetAdapterIndex(IAdapterInfo* This,ULONG *pulIndex) {
+    return This->lpVtbl->GetAdapterIndex(This,pulIndex);
+}
+static FORCEINLINE HRESULT IAdapterInfo_GetAdapterType(IAdapterInfo* This,ALG_ADAPTER_TYPE *pAdapterType) {
+    return This->lpVtbl->GetAdapterType(This,pAdapterType);
+}
+static FORCEINLINE HRESULT IAdapterInfo_GetAdapterAddresses(IAdapterInfo* This,ULONG *pulAddressCount,ULONG **prgAddresses) {
+    return This->lpVtbl->GetAdapterAddresses(This,pulAddressCount,prgAddresses);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAdapterInfo_GetAdapterIndex_Proxy(
+    IAdapterInfo* This,
+    ULONG *pulIndex);
+void __RPC_STUB IAdapterInfo_GetAdapterIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdapterInfo_GetAdapterType_Proxy(
+    IAdapterInfo* This,
+    ALG_ADAPTER_TYPE *pAdapterType);
+void __RPC_STUB IAdapterInfo_GetAdapterType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdapterInfo_GetAdapterAddresses_Proxy(
+    IAdapterInfo* This,
+    ULONG *pulAddressCount,
+    ULONG **prgAddresses);
+void __RPC_STUB IAdapterInfo_GetAdapterAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAdapterInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPendingProxyConnection interface
+ */
+#ifndef __IPendingProxyConnection_INTERFACE_DEFINED__
+#define __IPendingProxyConnection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IPendingProxyConnection, 0xb68e5043, 0x3e3d, 0x4cc2, 0xb9,0xc1, 0x5f,0x8f,0x88,0xfe,0xe8,0x1c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b68e5043-3e3d-4cc2-b9c1-5f8f88fee81c")
+IPendingProxyConnection : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IPendingProxyConnection, 0xb68e5043, 0x3e3d, 0x4cc2, 0xb9,0xc1, 0x5f,0x8f,0x88,0xfe,0xe8,0x1c)
+#endif
+#else
+typedef struct IPendingProxyConnectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPendingProxyConnection* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPendingProxyConnection* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPendingProxyConnection* This);
+
+    /*** IPendingProxyConnection methods ***/
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        IPendingProxyConnection* This);
+
+    END_INTERFACE
+} IPendingProxyConnectionVtbl;
+interface IPendingProxyConnection {
+    CONST_VTBL IPendingProxyConnectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IPendingProxyConnection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPendingProxyConnection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPendingProxyConnection_Release(This) (This)->lpVtbl->Release(This)
+/*** IPendingProxyConnection methods ***/
+#define IPendingProxyConnection_Cancel(This) (This)->lpVtbl->Cancel(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IPendingProxyConnection_QueryInterface(IPendingProxyConnection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IPendingProxyConnection_AddRef(IPendingProxyConnection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IPendingProxyConnection_Release(IPendingProxyConnection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IPendingProxyConnection methods ***/
+static FORCEINLINE HRESULT IPendingProxyConnection_Cancel(IPendingProxyConnection* This) {
+    return This->lpVtbl->Cancel(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPendingProxyConnection_Cancel_Proxy(
+    IPendingProxyConnection* This);
+void __RPC_STUB IPendingProxyConnection_Cancel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPendingProxyConnection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDataChannel interface
+ */
+#ifndef __IDataChannel_INTERFACE_DEFINED__
+#define __IDataChannel_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDataChannel, 0xad42d12a, 0x4ad0, 0x4856, 0x91,0x9e, 0xe8,0x54,0xc9,0x1d,0x18,0x56);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ad42d12a-4ad0-4856-919e-e854c91d1856")
+IDataChannel : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetChannelProperties(
+        ALG_DATA_CHANNEL_PROPERTIES **ppProperties) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSessionCreationEventHandle(
+        HANDLE *pHandle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSessionDeletionEventHandle(
+        HANDLE *pHandle) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDataChannel, 0xad42d12a, 0x4ad0, 0x4856, 0x91,0x9e, 0xe8,0x54,0xc9,0x1d,0x18,0x56)
+#endif
+#else
+typedef struct IDataChannelVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDataChannel* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDataChannel* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDataChannel* This);
+
+    /*** IDataChannel methods ***/
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        IDataChannel* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetChannelProperties)(
+        IDataChannel* This,
+        ALG_DATA_CHANNEL_PROPERTIES **ppProperties);
+
+    HRESULT (STDMETHODCALLTYPE *GetSessionCreationEventHandle)(
+        IDataChannel* This,
+        HANDLE *pHandle);
+
+    HRESULT (STDMETHODCALLTYPE *GetSessionDeletionEventHandle)(
+        IDataChannel* This,
+        HANDLE *pHandle);
+
+    END_INTERFACE
+} IDataChannelVtbl;
+interface IDataChannel {
+    CONST_VTBL IDataChannelVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDataChannel_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDataChannel_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDataChannel_Release(This) (This)->lpVtbl->Release(This)
+/*** IDataChannel methods ***/
+#define IDataChannel_Cancel(This) (This)->lpVtbl->Cancel(This)
+#define IDataChannel_GetChannelProperties(This,ppProperties) (This)->lpVtbl->GetChannelProperties(This,ppProperties)
+#define IDataChannel_GetSessionCreationEventHandle(This,pHandle) (This)->lpVtbl->GetSessionCreationEventHandle(This,pHandle)
+#define IDataChannel_GetSessionDeletionEventHandle(This,pHandle) (This)->lpVtbl->GetSessionDeletionEventHandle(This,pHandle)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDataChannel_QueryInterface(IDataChannel* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDataChannel_AddRef(IDataChannel* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDataChannel_Release(IDataChannel* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDataChannel methods ***/
+static FORCEINLINE HRESULT IDataChannel_Cancel(IDataChannel* This) {
+    return This->lpVtbl->Cancel(This);
+}
+static FORCEINLINE HRESULT IDataChannel_GetChannelProperties(IDataChannel* This,ALG_DATA_CHANNEL_PROPERTIES **ppProperties) {
+    return This->lpVtbl->GetChannelProperties(This,ppProperties);
+}
+static FORCEINLINE HRESULT IDataChannel_GetSessionCreationEventHandle(IDataChannel* This,HANDLE *pHandle) {
+    return This->lpVtbl->GetSessionCreationEventHandle(This,pHandle);
+}
+static FORCEINLINE HRESULT IDataChannel_GetSessionDeletionEventHandle(IDataChannel* This,HANDLE *pHandle) {
+    return This->lpVtbl->GetSessionDeletionEventHandle(This,pHandle);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDataChannel_Cancel_Proxy(
+    IDataChannel* This);
+void __RPC_STUB IDataChannel_Cancel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataChannel_GetChannelProperties_Proxy(
+    IDataChannel* This,
+    ALG_DATA_CHANNEL_PROPERTIES **ppProperties);
+void __RPC_STUB IDataChannel_GetChannelProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataChannel_GetSessionCreationEventHandle_Proxy(
+    IDataChannel* This,
+    HANDLE *pHandle);
+void __RPC_STUB IDataChannel_GetSessionCreationEventHandle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataChannel_GetSessionDeletionEventHandle_Proxy(
+    IDataChannel* This,
+    HANDLE *pHandle);
+void __RPC_STUB IDataChannel_GetSessionDeletionEventHandle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDataChannel_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistentDataChannel interface
+ */
+#ifndef __IPersistentDataChannel_INTERFACE_DEFINED__
+#define __IPersistentDataChannel_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IPersistentDataChannel, 0xa180e934, 0xd92a, 0x415d, 0x91,0x44, 0x75,0x9f,0x80,0x54,0xe8,0xf6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a180e934-d92a-415d-9144-759f8054e8f6")
+IPersistentDataChannel : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetChannelProperties(
+        ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES **ppProperties) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IPersistentDataChannel, 0xa180e934, 0xd92a, 0x415d, 0x91,0x44, 0x75,0x9f,0x80,0x54,0xe8,0xf6)
+#endif
+#else
+typedef struct IPersistentDataChannelVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistentDataChannel* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistentDataChannel* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistentDataChannel* This);
+
+    /*** IPersistentDataChannel methods ***/
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        IPersistentDataChannel* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetChannelProperties)(
+        IPersistentDataChannel* This,
+        ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES **ppProperties);
+
+    END_INTERFACE
+} IPersistentDataChannelVtbl;
+interface IPersistentDataChannel {
+    CONST_VTBL IPersistentDataChannelVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IPersistentDataChannel_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistentDataChannel_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistentDataChannel_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersistentDataChannel methods ***/
+#define IPersistentDataChannel_Cancel(This) (This)->lpVtbl->Cancel(This)
+#define IPersistentDataChannel_GetChannelProperties(This,ppProperties) (This)->lpVtbl->GetChannelProperties(This,ppProperties)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IPersistentDataChannel_QueryInterface(IPersistentDataChannel* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IPersistentDataChannel_AddRef(IPersistentDataChannel* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IPersistentDataChannel_Release(IPersistentDataChannel* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IPersistentDataChannel methods ***/
+static FORCEINLINE HRESULT IPersistentDataChannel_Cancel(IPersistentDataChannel* This) {
+    return This->lpVtbl->Cancel(This);
+}
+static FORCEINLINE HRESULT IPersistentDataChannel_GetChannelProperties(IPersistentDataChannel* This,ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES **ppProperties) {
+    return This->lpVtbl->GetChannelProperties(This,ppProperties);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistentDataChannel_Cancel_Proxy(
+    IPersistentDataChannel* This);
+void __RPC_STUB IPersistentDataChannel_Cancel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistentDataChannel_GetChannelProperties_Proxy(
+    IPersistentDataChannel* This,
+    ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES **ppProperties);
+void __RPC_STUB IPersistentDataChannel_GetChannelProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistentDataChannel_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPrimaryControlChannel interface
+ */
+#ifndef __IPrimaryControlChannel_INTERFACE_DEFINED__
+#define __IPrimaryControlChannel_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IPrimaryControlChannel, 0x1a2e8b62, 0x9012, 0x4be6, 0x84,0xae, 0x32,0xbd,0x66,0xba,0x65,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1a2e8b62-9012-4be6-84ae-32bd66ba657a")
+IPrimaryControlChannel : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetChannelProperties(
+        ALG_PRIMARY_CHANNEL_PROPERTIES **ppProperties) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOriginalDestinationInformation(
+        ULONG ulSourceAddress,
+        USHORT usSourcePort,
+        ULONG *pulOriginalDestinationAddress,
+        USHORT *pusOriginalDestinationPort,
+        ULONG *pulRemapDestinationAddress,
+        USHORT *pulRemapDestinationPort,
+        IAdapterInfo **ppReceiveAdapter) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IPrimaryControlChannel, 0x1a2e8b62, 0x9012, 0x4be6, 0x84,0xae, 0x32,0xbd,0x66,0xba,0x65,0x7a)
+#endif
+#else
+typedef struct IPrimaryControlChannelVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPrimaryControlChannel* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPrimaryControlChannel* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPrimaryControlChannel* This);
+
+    /*** IPrimaryControlChannel methods ***/
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        IPrimaryControlChannel* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetChannelProperties)(
+        IPrimaryControlChannel* This,
+        ALG_PRIMARY_CHANNEL_PROPERTIES **ppProperties);
+
+    HRESULT (STDMETHODCALLTYPE *GetOriginalDestinationInformation)(
+        IPrimaryControlChannel* This,
+        ULONG ulSourceAddress,
+        USHORT usSourcePort,
+        ULONG *pulOriginalDestinationAddress,
+        USHORT *pusOriginalDestinationPort,
+        ULONG *pulRemapDestinationAddress,
+        USHORT *pulRemapDestinationPort,
+        IAdapterInfo **ppReceiveAdapter);
+
+    END_INTERFACE
+} IPrimaryControlChannelVtbl;
+interface IPrimaryControlChannel {
+    CONST_VTBL IPrimaryControlChannelVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IPrimaryControlChannel_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPrimaryControlChannel_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPrimaryControlChannel_Release(This) (This)->lpVtbl->Release(This)
+/*** IPrimaryControlChannel methods ***/
+#define IPrimaryControlChannel_Cancel(This) (This)->lpVtbl->Cancel(This)
+#define IPrimaryControlChannel_GetChannelProperties(This,ppProperties) (This)->lpVtbl->GetChannelProperties(This,ppProperties)
+#define IPrimaryControlChannel_GetOriginalDestinationInformation(This,ulSourceAddress,usSourcePort,pulOriginalDestinationAddress,pusOriginalDestinationPort,pulRemapDestinationAddress,pulRemapDestinationPort,ppReceiveAdapter) (This)->lpVtbl->GetOriginalDestinationInformation(This,ulSourceAddress,usSourcePort,pulOriginalDestinationAddress,pusOriginalDestinationPort,pulRemapDestinationAddress,pulRemapDestinationPort,ppReceiveAdapter)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IPrimaryControlChannel_QueryInterface(IPrimaryControlChannel* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IPrimaryControlChannel_AddRef(IPrimaryControlChannel* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IPrimaryControlChannel_Release(IPrimaryControlChannel* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IPrimaryControlChannel methods ***/
+static FORCEINLINE HRESULT IPrimaryControlChannel_Cancel(IPrimaryControlChannel* This) {
+    return This->lpVtbl->Cancel(This);
+}
+static FORCEINLINE HRESULT IPrimaryControlChannel_GetChannelProperties(IPrimaryControlChannel* This,ALG_PRIMARY_CHANNEL_PROPERTIES **ppProperties) {
+    return This->lpVtbl->GetChannelProperties(This,ppProperties);
+}
+static FORCEINLINE HRESULT IPrimaryControlChannel_GetOriginalDestinationInformation(IPrimaryControlChannel* This,ULONG ulSourceAddress,USHORT usSourcePort,ULONG *pulOriginalDestinationAddress,USHORT *pusOriginalDestinationPort,ULONG *pulRemapDestinationAddress,USHORT *pulRemapDestinationPort,IAdapterInfo **ppReceiveAdapter) {
+    return This->lpVtbl->GetOriginalDestinationInformation(This,ulSourceAddress,usSourcePort,pulOriginalDestinationAddress,pusOriginalDestinationPort,pulRemapDestinationAddress,pulRemapDestinationPort,ppReceiveAdapter);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPrimaryControlChannel_Cancel_Proxy(
+    IPrimaryControlChannel* This);
+void __RPC_STUB IPrimaryControlChannel_Cancel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPrimaryControlChannel_GetChannelProperties_Proxy(
+    IPrimaryControlChannel* This,
+    ALG_PRIMARY_CHANNEL_PROPERTIES **ppProperties);
+void __RPC_STUB IPrimaryControlChannel_GetChannelProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPrimaryControlChannel_GetOriginalDestinationInformation_Proxy(
+    IPrimaryControlChannel* This,
+    ULONG ulSourceAddress,
+    USHORT usSourcePort,
+    ULONG *pulOriginalDestinationAddress,
+    USHORT *pusOriginalDestinationPort,
+    ULONG *pulRemapDestinationAddress,
+    USHORT *pulRemapDestinationPort,
+    IAdapterInfo **ppReceiveAdapter);
+void __RPC_STUB IPrimaryControlChannel_GetOriginalDestinationInformation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPrimaryControlChannel_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISecondaryControlChannel interface
+ */
+#ifndef __ISecondaryControlChannel_INTERFACE_DEFINED__
+#define __ISecondaryControlChannel_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISecondaryControlChannel, 0xa23f9d10, 0x714c, 0x41fe, 0x84,0x71, 0xff,0xb1,0x9b,0xc2,0x84,0x54);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a23f9d10-714c-41fe-8471-ffb19bc28454")
+ISecondaryControlChannel : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetChannelProperties(
+        ALG_SECONDARY_CHANNEL_PROPERTIES **ppProperties) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOriginalDestinationInformation(
+        ULONG ulSourceAddress,
+        USHORT usSourcePort,
+        ULONG *pulOriginalDestinationAddress,
+        USHORT *pusOriginalDestinationPort,
+        IAdapterInfo **ppReceiveAdapter) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISecondaryControlChannel, 0xa23f9d10, 0x714c, 0x41fe, 0x84,0x71, 0xff,0xb1,0x9b,0xc2,0x84,0x54)
+#endif
+#else
+typedef struct ISecondaryControlChannelVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISecondaryControlChannel* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISecondaryControlChannel* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISecondaryControlChannel* This);
+
+    /*** ISecondaryControlChannel methods ***/
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        ISecondaryControlChannel* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetChannelProperties)(
+        ISecondaryControlChannel* This,
+        ALG_SECONDARY_CHANNEL_PROPERTIES **ppProperties);
+
+    HRESULT (STDMETHODCALLTYPE *GetOriginalDestinationInformation)(
+        ISecondaryControlChannel* This,
+        ULONG ulSourceAddress,
+        USHORT usSourcePort,
+        ULONG *pulOriginalDestinationAddress,
+        USHORT *pusOriginalDestinationPort,
+        IAdapterInfo **ppReceiveAdapter);
+
+    END_INTERFACE
+} ISecondaryControlChannelVtbl;
+interface ISecondaryControlChannel {
+    CONST_VTBL ISecondaryControlChannelVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISecondaryControlChannel_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISecondaryControlChannel_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISecondaryControlChannel_Release(This) (This)->lpVtbl->Release(This)
+/*** ISecondaryControlChannel methods ***/
+#define ISecondaryControlChannel_Cancel(This) (This)->lpVtbl->Cancel(This)
+#define ISecondaryControlChannel_GetChannelProperties(This,ppProperties) (This)->lpVtbl->GetChannelProperties(This,ppProperties)
+#define ISecondaryControlChannel_GetOriginalDestinationInformation(This,ulSourceAddress,usSourcePort,pulOriginalDestinationAddress,pusOriginalDestinationPort,ppReceiveAdapter) (This)->lpVtbl->GetOriginalDestinationInformation(This,ulSourceAddress,usSourcePort,pulOriginalDestinationAddress,pusOriginalDestinationPort,ppReceiveAdapter)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISecondaryControlChannel_QueryInterface(ISecondaryControlChannel* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISecondaryControlChannel_AddRef(ISecondaryControlChannel* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISecondaryControlChannel_Release(ISecondaryControlChannel* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ISecondaryControlChannel methods ***/
+static FORCEINLINE HRESULT ISecondaryControlChannel_Cancel(ISecondaryControlChannel* This) {
+    return This->lpVtbl->Cancel(This);
+}
+static FORCEINLINE HRESULT ISecondaryControlChannel_GetChannelProperties(ISecondaryControlChannel* This,ALG_SECONDARY_CHANNEL_PROPERTIES **ppProperties) {
+    return This->lpVtbl->GetChannelProperties(This,ppProperties);
+}
+static FORCEINLINE HRESULT ISecondaryControlChannel_GetOriginalDestinationInformation(ISecondaryControlChannel* This,ULONG ulSourceAddress,USHORT usSourcePort,ULONG *pulOriginalDestinationAddress,USHORT *pusOriginalDestinationPort,IAdapterInfo **ppReceiveAdapter) {
+    return This->lpVtbl->GetOriginalDestinationInformation(This,ulSourceAddress,usSourcePort,pulOriginalDestinationAddress,pusOriginalDestinationPort,ppReceiveAdapter);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISecondaryControlChannel_Cancel_Proxy(
+    ISecondaryControlChannel* This);
+void __RPC_STUB ISecondaryControlChannel_Cancel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISecondaryControlChannel_GetChannelProperties_Proxy(
+    ISecondaryControlChannel* This,
+    ALG_SECONDARY_CHANNEL_PROPERTIES **ppProperties);
+void __RPC_STUB ISecondaryControlChannel_GetChannelProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISecondaryControlChannel_GetOriginalDestinationInformation_Proxy(
+    ISecondaryControlChannel* This,
+    ULONG ulSourceAddress,
+    USHORT usSourcePort,
+    ULONG *pulOriginalDestinationAddress,
+    USHORT *pusOriginalDestinationPort,
+    IAdapterInfo **ppReceiveAdapter);
+void __RPC_STUB ISecondaryControlChannel_GetOriginalDestinationInformation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISecondaryControlChannel_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumAdapterInfo interface
+ */
+#ifndef __IEnumAdapterInfo_INTERFACE_DEFINED__
+#define __IEnumAdapterInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumAdapterInfo, 0xa23f9d11, 0x714c, 0x41fe, 0x84,0x71, 0xff,0xb1,0x9b,0xc2,0x84,0x54);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a23f9d11-714c-41fe-8471-ffb19bc28454")
+IEnumAdapterInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        IAdapterInfo **rgAI,
+        ULONG *pCeltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumAdapterInfo **ppEnum) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumAdapterInfo, 0xa23f9d11, 0x714c, 0x41fe, 0x84,0x71, 0xff,0xb1,0x9b,0xc2,0x84,0x54)
+#endif
+#else
+typedef struct IEnumAdapterInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumAdapterInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumAdapterInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumAdapterInfo* This);
+
+    /*** IEnumAdapterInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumAdapterInfo* This,
+        ULONG celt,
+        IAdapterInfo **rgAI,
+        ULONG *pCeltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumAdapterInfo* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumAdapterInfo* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumAdapterInfo* This,
+        IEnumAdapterInfo **ppEnum);
+
+    END_INTERFACE
+} IEnumAdapterInfoVtbl;
+interface IEnumAdapterInfo {
+    CONST_VTBL IEnumAdapterInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumAdapterInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumAdapterInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumAdapterInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumAdapterInfo methods ***/
+#define IEnumAdapterInfo_Next(This,celt,rgAI,pCeltFetched) (This)->lpVtbl->Next(This,celt,rgAI,pCeltFetched)
+#define IEnumAdapterInfo_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumAdapterInfo_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumAdapterInfo_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumAdapterInfo_QueryInterface(IEnumAdapterInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumAdapterInfo_AddRef(IEnumAdapterInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumAdapterInfo_Release(IEnumAdapterInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumAdapterInfo methods ***/
+static FORCEINLINE HRESULT IEnumAdapterInfo_Next(IEnumAdapterInfo* This,ULONG celt,IAdapterInfo **rgAI,ULONG *pCeltFetched) {
+    return This->lpVtbl->Next(This,celt,rgAI,pCeltFetched);
+}
+static FORCEINLINE HRESULT IEnumAdapterInfo_Skip(IEnumAdapterInfo* This,ULONG celt) {
+    return This->lpVtbl->Skip(This,celt);
+}
+static FORCEINLINE HRESULT IEnumAdapterInfo_Reset(IEnumAdapterInfo* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumAdapterInfo_Clone(IEnumAdapterInfo* This,IEnumAdapterInfo **ppEnum) {
+    return This->lpVtbl->Clone(This,ppEnum);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumAdapterInfo_Next_Proxy(
+    IEnumAdapterInfo* This,
+    ULONG celt,
+    IAdapterInfo **rgAI,
+    ULONG *pCeltFetched);
+void __RPC_STUB IEnumAdapterInfo_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumAdapterInfo_Skip_Proxy(
+    IEnumAdapterInfo* This,
+    ULONG celt);
+void __RPC_STUB IEnumAdapterInfo_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumAdapterInfo_Reset_Proxy(
+    IEnumAdapterInfo* This);
+void __RPC_STUB IEnumAdapterInfo_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumAdapterInfo_Clone_Proxy(
+    IEnumAdapterInfo* This,
+    IEnumAdapterInfo **ppEnum);
+void __RPC_STUB IEnumAdapterInfo_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumAdapterInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAdapterNotificationSink interface
+ */
+#ifndef __IAdapterNotificationSink_INTERFACE_DEFINED__
+#define __IAdapterNotificationSink_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAdapterNotificationSink, 0x44ab2dc3, 0x23b2, 0x47de, 0x82,0x28, 0x2e,0x1c,0xce,0xeb,0x99,0x11);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("44ab2dc3-23b2-47de-8228-2e1cceeb9911")
+IAdapterNotificationSink : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AdapterAdded(
+        IAdapterInfo *pAdapter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AdapterRemoved(
+        IAdapterInfo *pAdapter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AdapterModified(
+        IAdapterInfo *pAdapter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AdapterUpdatePortMapping(
+        IAdapterInfo *pAdapter) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAdapterNotificationSink, 0x44ab2dc3, 0x23b2, 0x47de, 0x82,0x28, 0x2e,0x1c,0xce,0xeb,0x99,0x11)
+#endif
+#else
+typedef struct IAdapterNotificationSinkVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAdapterNotificationSink* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAdapterNotificationSink* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAdapterNotificationSink* This);
+
+    /*** IAdapterNotificationSink methods ***/
+    HRESULT (STDMETHODCALLTYPE *AdapterAdded)(
+        IAdapterNotificationSink* This,
+        IAdapterInfo *pAdapter);
+
+    HRESULT (STDMETHODCALLTYPE *AdapterRemoved)(
+        IAdapterNotificationSink* This,
+        IAdapterInfo *pAdapter);
+
+    HRESULT (STDMETHODCALLTYPE *AdapterModified)(
+        IAdapterNotificationSink* This,
+        IAdapterInfo *pAdapter);
+
+    HRESULT (STDMETHODCALLTYPE *AdapterUpdatePortMapping)(
+        IAdapterNotificationSink* This,
+        IAdapterInfo *pAdapter);
+
+    END_INTERFACE
+} IAdapterNotificationSinkVtbl;
+interface IAdapterNotificationSink {
+    CONST_VTBL IAdapterNotificationSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAdapterNotificationSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAdapterNotificationSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAdapterNotificationSink_Release(This) (This)->lpVtbl->Release(This)
+/*** IAdapterNotificationSink methods ***/
+#define IAdapterNotificationSink_AdapterAdded(This,pAdapter) (This)->lpVtbl->AdapterAdded(This,pAdapter)
+#define IAdapterNotificationSink_AdapterRemoved(This,pAdapter) (This)->lpVtbl->AdapterRemoved(This,pAdapter)
+#define IAdapterNotificationSink_AdapterModified(This,pAdapter) (This)->lpVtbl->AdapterModified(This,pAdapter)
+#define IAdapterNotificationSink_AdapterUpdatePortMapping(This,pAdapter) (This)->lpVtbl->AdapterUpdatePortMapping(This,pAdapter)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAdapterNotificationSink_QueryInterface(IAdapterNotificationSink* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAdapterNotificationSink_AddRef(IAdapterNotificationSink* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAdapterNotificationSink_Release(IAdapterNotificationSink* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAdapterNotificationSink methods ***/
+static FORCEINLINE HRESULT IAdapterNotificationSink_AdapterAdded(IAdapterNotificationSink* This,IAdapterInfo *pAdapter) {
+    return This->lpVtbl->AdapterAdded(This,pAdapter);
+}
+static FORCEINLINE HRESULT IAdapterNotificationSink_AdapterRemoved(IAdapterNotificationSink* This,IAdapterInfo *pAdapter) {
+    return This->lpVtbl->AdapterRemoved(This,pAdapter);
+}
+static FORCEINLINE HRESULT IAdapterNotificationSink_AdapterModified(IAdapterNotificationSink* This,IAdapterInfo *pAdapter) {
+    return This->lpVtbl->AdapterModified(This,pAdapter);
+}
+static FORCEINLINE HRESULT IAdapterNotificationSink_AdapterUpdatePortMapping(IAdapterNotificationSink* This,IAdapterInfo *pAdapter) {
+    return This->lpVtbl->AdapterUpdatePortMapping(This,pAdapter);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAdapterNotificationSink_AdapterAdded_Proxy(
+    IAdapterNotificationSink* This,
+    IAdapterInfo *pAdapter);
+void __RPC_STUB IAdapterNotificationSink_AdapterAdded_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdapterNotificationSink_AdapterRemoved_Proxy(
+    IAdapterNotificationSink* This,
+    IAdapterInfo *pAdapter);
+void __RPC_STUB IAdapterNotificationSink_AdapterRemoved_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdapterNotificationSink_AdapterModified_Proxy(
+    IAdapterNotificationSink* This,
+    IAdapterInfo *pAdapter);
+void __RPC_STUB IAdapterNotificationSink_AdapterModified_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdapterNotificationSink_AdapterUpdatePortMapping_Proxy(
+    IAdapterNotificationSink* This,
+    IAdapterInfo *pAdapter);
+void __RPC_STUB IAdapterNotificationSink_AdapterUpdatePortMapping_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAdapterNotificationSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IApplicationGatewayServices interface
+ */
+#ifndef __IApplicationGatewayServices_INTERFACE_DEFINED__
+#define __IApplicationGatewayServices_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IApplicationGatewayServices, 0x5134842a, 0xfdce, 0x485d, 0x93,0xcd, 0xde,0x16,0x40,0x64,0x3b,0xbe);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5134842a-fdce-485d-93cd-de1640643bbe")
+IApplicationGatewayServices : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreatePrimaryControlChannel(
+        ULONG uAdapterIndex,
+        ALG_PROTOCOL eProtocol,
+        USHORT usPortToCapture,
+        ALG_CAPTURE eCaptureType,
+        WINBOOL fCaptureInbound,
+        ULONG ulListenAddress,
+        USHORT usListenPort,
+        IPrimaryControlChannel **ppIControlChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSecondaryControlChannel(
+        ALG_PROTOCOL eProtocol,
+        ULONG ulPrivateAddress,
+        USHORT usPrivatePort,
+        ULONG ulPublicAddress,
+        USHORT usPublicPort,
+        ULONG ulRemoteAddress,
+        USHORT usRemotePort,
+        ULONG ulListenAddress,
+        USHORT usListenPort,
+        ALG_DIRECTION eDirection,
+        WINBOOL fPersistent,
+        ISecondaryControlChannel **ppControlChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBestSourceAddressForDestinationAddress(
+        ULONG ulDstAddress,
+        WINBOOL fDemandDial,
+        ULONG *pulBestSrcAddress) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PrepareProxyConnection(
+        ALG_PROTOCOL eProtocol,
+        ULONG ulSrcAddress,
+        USHORT usSrcPort,
+        ULONG ulDstAddress,
+        USHORT usDstPort,
+        WINBOOL fNoTimeout,
+        IPendingProxyConnection **ppPendingConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PrepareSourceModifiedProxyConnection(
+        ALG_PROTOCOL eProtocol,
+        ULONG ulSrcAddress,
+        USHORT usSrcPort,
+        ULONG ulDstAddress,
+        USHORT usDstPort,
+        ULONG ulNewSrcAddress,
+        USHORT usNewSourcePort,
+        IPendingProxyConnection **ppPendingConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDataChannel(
+        ALG_PROTOCOL eProtocol,
+        ULONG ulPrivateAddress,
+        USHORT usPrivatePort,
+        ULONG ulPublicAddress,
+        USHORT usPublicPort,
+        ULONG ulRemoteAddress,
+        USHORT usRemotePort,
+        ALG_DIRECTION eDirection,
+        ALG_NOTIFICATION eDesiredNotification,
+        WINBOOL fNoTimeout,
+        IDataChannel **ppDataChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePersistentDataChannel(
+        ALG_PROTOCOL eProtocol,
+        ULONG ulPrivateAddress,
+        USHORT usPrivatePort,
+        ULONG ulPublicAddress,
+        USHORT usPublicPort,
+        ULONG ulRemoteAddress,
+        USHORT usRemotePort,
+        ALG_DIRECTION eDirection,
+        IPersistentDataChannel **ppIPersistentDataChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReservePort(
+        USHORT usPortCount,
+        USHORT *pusReservedPort) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseReservedPort(
+        USHORT usReservedPortBase,
+        USHORT usPortCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumerateAdapters(
+        IEnumAdapterInfo **ppIEnumAdapterInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartAdapterNotifications(
+        IAdapterNotificationSink *pSink,
+        DWORD *pdwCookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StopAdapterNotifications(
+        DWORD dwCookieOfSink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LookupAdapterPortMapping(
+        ULONG ulAdapterIndex,
+        UCHAR Protocol,
+        ULONG ulDestinationAddress,
+        USHORT usDestinationPort,
+        ULONG *pulRemapAddress,
+        USHORT *pusRemapPort) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IApplicationGatewayServices, 0x5134842a, 0xfdce, 0x485d, 0x93,0xcd, 0xde,0x16,0x40,0x64,0x3b,0xbe)
+#endif
+#else
+typedef struct IApplicationGatewayServicesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IApplicationGatewayServices* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IApplicationGatewayServices* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IApplicationGatewayServices* This);
+
+    /*** IApplicationGatewayServices methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreatePrimaryControlChannel)(
+        IApplicationGatewayServices* This,
+        ULONG uAdapterIndex,
+        ALG_PROTOCOL eProtocol,
+        USHORT usPortToCapture,
+        ALG_CAPTURE eCaptureType,
+        WINBOOL fCaptureInbound,
+        ULONG ulListenAddress,
+        USHORT usListenPort,
+        IPrimaryControlChannel **ppIControlChannel);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSecondaryControlChannel)(
+        IApplicationGatewayServices* This,
+        ALG_PROTOCOL eProtocol,
+        ULONG ulPrivateAddress,
+        USHORT usPrivatePort,
+        ULONG ulPublicAddress,
+        USHORT usPublicPort,
+        ULONG ulRemoteAddress,
+        USHORT usRemotePort,
+        ULONG ulListenAddress,
+        USHORT usListenPort,
+        ALG_DIRECTION eDirection,
+        WINBOOL fPersistent,
+        ISecondaryControlChannel **ppControlChannel);
+
+    HRESULT (STDMETHODCALLTYPE *GetBestSourceAddressForDestinationAddress)(
+        IApplicationGatewayServices* This,
+        ULONG ulDstAddress,
+        WINBOOL fDemandDial,
+        ULONG *pulBestSrcAddress);
+
+    HRESULT (STDMETHODCALLTYPE *PrepareProxyConnection)(
+        IApplicationGatewayServices* This,
+        ALG_PROTOCOL eProtocol,
+        ULONG ulSrcAddress,
+        USHORT usSrcPort,
+        ULONG ulDstAddress,
+        USHORT usDstPort,
+        WINBOOL fNoTimeout,
+        IPendingProxyConnection **ppPendingConnection);
+
+    HRESULT (STDMETHODCALLTYPE *PrepareSourceModifiedProxyConnection)(
+        IApplicationGatewayServices* This,
+        ALG_PROTOCOL eProtocol,
+        ULONG ulSrcAddress,
+        USHORT usSrcPort,
+        ULONG ulDstAddress,
+        USHORT usDstPort,
+        ULONG ulNewSrcAddress,
+        USHORT usNewSourcePort,
+        IPendingProxyConnection **ppPendingConnection);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDataChannel)(
+        IApplicationGatewayServices* This,
+        ALG_PROTOCOL eProtocol,
+        ULONG ulPrivateAddress,
+        USHORT usPrivatePort,
+        ULONG ulPublicAddress,
+        USHORT usPublicPort,
+        ULONG ulRemoteAddress,
+        USHORT usRemotePort,
+        ALG_DIRECTION eDirection,
+        ALG_NOTIFICATION eDesiredNotification,
+        WINBOOL fNoTimeout,
+        IDataChannel **ppDataChannel);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePersistentDataChannel)(
+        IApplicationGatewayServices* This,
+        ALG_PROTOCOL eProtocol,
+        ULONG ulPrivateAddress,
+        USHORT usPrivatePort,
+        ULONG ulPublicAddress,
+        USHORT usPublicPort,
+        ULONG ulRemoteAddress,
+        USHORT usRemotePort,
+        ALG_DIRECTION eDirection,
+        IPersistentDataChannel **ppIPersistentDataChannel);
+
+    HRESULT (STDMETHODCALLTYPE *ReservePort)(
+        IApplicationGatewayServices* This,
+        USHORT usPortCount,
+        USHORT *pusReservedPort);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseReservedPort)(
+        IApplicationGatewayServices* This,
+        USHORT usReservedPortBase,
+        USHORT usPortCount);
+
+    HRESULT (STDMETHODCALLTYPE *EnumerateAdapters)(
+        IApplicationGatewayServices* This,
+        IEnumAdapterInfo **ppIEnumAdapterInfo);
+
+    HRESULT (STDMETHODCALLTYPE *StartAdapterNotifications)(
+        IApplicationGatewayServices* This,
+        IAdapterNotificationSink *pSink,
+        DWORD *pdwCookie);
+
+    HRESULT (STDMETHODCALLTYPE *StopAdapterNotifications)(
+        IApplicationGatewayServices* This,
+        DWORD dwCookieOfSink);
+
+    HRESULT (STDMETHODCALLTYPE *LookupAdapterPortMapping)(
+        IApplicationGatewayServices* This,
+        ULONG ulAdapterIndex,
+        UCHAR Protocol,
+        ULONG ulDestinationAddress,
+        USHORT usDestinationPort,
+        ULONG *pulRemapAddress,
+        USHORT *pusRemapPort);
+
+    END_INTERFACE
+} IApplicationGatewayServicesVtbl;
+interface IApplicationGatewayServices {
+    CONST_VTBL IApplicationGatewayServicesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IApplicationGatewayServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IApplicationGatewayServices_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IApplicationGatewayServices_Release(This) (This)->lpVtbl->Release(This)
+/*** IApplicationGatewayServices methods ***/
+#define IApplicationGatewayServices_CreatePrimaryControlChannel(This,uAdapterIndex,eProtocol,usPortToCapture,eCaptureType,fCaptureInbound,ulListenAddress,usListenPort,ppIControlChannel) (This)->lpVtbl->CreatePrimaryControlChannel(This,uAdapterIndex,eProtocol,usPortToCapture,eCaptureType,fCaptureInbound,ulListenAddress,usListenPort,ppIControlChannel)
+#define IApplicationGatewayServices_CreateSecondaryControlChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,ulListenAddress,usListenPort,eDirection,fPersistent,ppControlChannel) (This)->lpVtbl->CreateSecondaryControlChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,ulListenAddress,usListenPort,eDirection,fPersistent,ppControlChannel)
+#define IApplicationGatewayServices_GetBestSourceAddressForDestinationAddress(This,ulDstAddress,fDemandDial,pulBestSrcAddress) (This)->lpVtbl->GetBestSourceAddressForDestinationAddress(This,ulDstAddress,fDemandDial,pulBestSrcAddress)
+#define IApplicationGatewayServices_PrepareProxyConnection(This,eProtocol,ulSrcAddress,usSrcPort,ulDstAddress,usDstPort,fNoTimeout,ppPendingConnection) (This)->lpVtbl->PrepareProxyConnection(This,eProtocol,ulSrcAddress,usSrcPort,ulDstAddress,usDstPort,fNoTimeout,ppPendingConnection)
+#define IApplicationGatewayServices_PrepareSourceModifiedProxyConnection(This,eProtocol,ulSrcAddress,usSrcPort,ulDstAddress,usDstPort,ulNewSrcAddress,usNewSourcePort,ppPendingConnection) (This)->lpVtbl->PrepareSourceModifiedProxyConnection(This,eProtocol,ulSrcAddress,usSrcPort,ulDstAddress,usDstPort,ulNewSrcAddress,usNewSourcePort,ppPendingConnection)
+#define IApplicationGatewayServices_CreateDataChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,eDirection,eDesiredNotification,fNoTimeout,ppDataChannel) (This)->lpVtbl->CreateDataChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,eDirection,eDesiredNotification,fNoTimeout,ppDataChannel)
+#define IApplicationGatewayServices_CreatePersistentDataChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,eDirection,ppIPersistentDataChannel) (This)->lpVtbl->CreatePersistentDataChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,eDirection,ppIPersistentDataChannel)
+#define IApplicationGatewayServices_ReservePort(This,usPortCount,pusReservedPort) (This)->lpVtbl->ReservePort(This,usPortCount,pusReservedPort)
+#define IApplicationGatewayServices_ReleaseReservedPort(This,usReservedPortBase,usPortCount) (This)->lpVtbl->ReleaseReservedPort(This,usReservedPortBase,usPortCount)
+#define IApplicationGatewayServices_EnumerateAdapters(This,ppIEnumAdapterInfo) (This)->lpVtbl->EnumerateAdapters(This,ppIEnumAdapterInfo)
+#define IApplicationGatewayServices_StartAdapterNotifications(This,pSink,pdwCookie) (This)->lpVtbl->StartAdapterNotifications(This,pSink,pdwCookie)
+#define IApplicationGatewayServices_StopAdapterNotifications(This,dwCookieOfSink) (This)->lpVtbl->StopAdapterNotifications(This,dwCookieOfSink)
+#define IApplicationGatewayServices_LookupAdapterPortMapping(This,ulAdapterIndex,Protocol,ulDestinationAddress,usDestinationPort,pulRemapAddress,pusRemapPort) (This)->lpVtbl->LookupAdapterPortMapping(This,ulAdapterIndex,Protocol,ulDestinationAddress,usDestinationPort,pulRemapAddress,pusRemapPort)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IApplicationGatewayServices_QueryInterface(IApplicationGatewayServices* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IApplicationGatewayServices_AddRef(IApplicationGatewayServices* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IApplicationGatewayServices_Release(IApplicationGatewayServices* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IApplicationGatewayServices methods ***/
+static FORCEINLINE HRESULT IApplicationGatewayServices_CreatePrimaryControlChannel(IApplicationGatewayServices* This,ULONG uAdapterIndex,ALG_PROTOCOL eProtocol,USHORT usPortToCapture,ALG_CAPTURE eCaptureType,WINBOOL fCaptureInbound,ULONG ulListenAddress,USHORT usListenPort,IPrimaryControlChannel **ppIControlChannel) {
+    return This->lpVtbl->CreatePrimaryControlChannel(This,uAdapterIndex,eProtocol,usPortToCapture,eCaptureType,fCaptureInbound,ulListenAddress,usListenPort,ppIControlChannel);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_CreateSecondaryControlChannel(IApplicationGatewayServices* This,ALG_PROTOCOL eProtocol,ULONG ulPrivateAddress,USHORT usPrivatePort,ULONG ulPublicAddress,USHORT usPublicPort,ULONG ulRemoteAddress,USHORT usRemotePort,ULONG ulListenAddress,USHORT usListenPort,ALG_DIRECTION eDirection,WINBOOL fPersistent,ISecondaryControlChannel **ppControlChannel) {
+    return This->lpVtbl->CreateSecondaryControlChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,ulListenAddress,usListenPort,eDirection,fPersistent,ppControlChannel);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_GetBestSourceAddressForDestinationAddress(IApplicationGatewayServices* This,ULONG ulDstAddress,WINBOOL fDemandDial,ULONG *pulBestSrcAddress) {
+    return This->lpVtbl->GetBestSourceAddressForDestinationAddress(This,ulDstAddress,fDemandDial,pulBestSrcAddress);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_PrepareProxyConnection(IApplicationGatewayServices* This,ALG_PROTOCOL eProtocol,ULONG ulSrcAddress,USHORT usSrcPort,ULONG ulDstAddress,USHORT usDstPort,WINBOOL fNoTimeout,IPendingProxyConnection **ppPendingConnection) {
+    return This->lpVtbl->PrepareProxyConnection(This,eProtocol,ulSrcAddress,usSrcPort,ulDstAddress,usDstPort,fNoTimeout,ppPendingConnection);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_PrepareSourceModifiedProxyConnection(IApplicationGatewayServices* This,ALG_PROTOCOL eProtocol,ULONG ulSrcAddress,USHORT usSrcPort,ULONG ulDstAddress,USHORT usDstPort,ULONG ulNewSrcAddress,USHORT usNewSourcePort,IPendingProxyConnection **ppPendingConnection) {
+    return This->lpVtbl->PrepareSourceModifiedProxyConnection(This,eProtocol,ulSrcAddress,usSrcPort,ulDstAddress,usDstPort,ulNewSrcAddress,usNewSourcePort,ppPendingConnection);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_CreateDataChannel(IApplicationGatewayServices* This,ALG_PROTOCOL eProtocol,ULONG ulPrivateAddress,USHORT usPrivatePort,ULONG ulPublicAddress,USHORT usPublicPort,ULONG ulRemoteAddress,USHORT usRemotePort,ALG_DIRECTION eDirection,ALG_NOTIFICATION eDesiredNotification,WINBOOL fNoTimeout,IDataChannel **ppDataChannel) {
+    return This->lpVtbl->CreateDataChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,eDirection,eDesiredNotification,fNoTimeout,ppDataChannel);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_CreatePersistentDataChannel(IApplicationGatewayServices* This,ALG_PROTOCOL eProtocol,ULONG ulPrivateAddress,USHORT usPrivatePort,ULONG ulPublicAddress,USHORT usPublicPort,ULONG ulRemoteAddress,USHORT usRemotePort,ALG_DIRECTION eDirection,IPersistentDataChannel **ppIPersistentDataChannel) {
+    return This->lpVtbl->CreatePersistentDataChannel(This,eProtocol,ulPrivateAddress,usPrivatePort,ulPublicAddress,usPublicPort,ulRemoteAddress,usRemotePort,eDirection,ppIPersistentDataChannel);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_ReservePort(IApplicationGatewayServices* This,USHORT usPortCount,USHORT *pusReservedPort) {
+    return This->lpVtbl->ReservePort(This,usPortCount,pusReservedPort);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_ReleaseReservedPort(IApplicationGatewayServices* This,USHORT usReservedPortBase,USHORT usPortCount) {
+    return This->lpVtbl->ReleaseReservedPort(This,usReservedPortBase,usPortCount);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_EnumerateAdapters(IApplicationGatewayServices* This,IEnumAdapterInfo **ppIEnumAdapterInfo) {
+    return This->lpVtbl->EnumerateAdapters(This,ppIEnumAdapterInfo);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_StartAdapterNotifications(IApplicationGatewayServices* This,IAdapterNotificationSink *pSink,DWORD *pdwCookie) {
+    return This->lpVtbl->StartAdapterNotifications(This,pSink,pdwCookie);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_StopAdapterNotifications(IApplicationGatewayServices* This,DWORD dwCookieOfSink) {
+    return This->lpVtbl->StopAdapterNotifications(This,dwCookieOfSink);
+}
+static FORCEINLINE HRESULT IApplicationGatewayServices_LookupAdapterPortMapping(IApplicationGatewayServices* This,ULONG ulAdapterIndex,UCHAR Protocol,ULONG ulDestinationAddress,USHORT usDestinationPort,ULONG *pulRemapAddress,USHORT *pusRemapPort) {
+    return This->lpVtbl->LookupAdapterPortMapping(This,ulAdapterIndex,Protocol,ulDestinationAddress,usDestinationPort,pulRemapAddress,pusRemapPort);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_CreatePrimaryControlChannel_Proxy(
+    IApplicationGatewayServices* This,
+    ULONG uAdapterIndex,
+    ALG_PROTOCOL eProtocol,
+    USHORT usPortToCapture,
+    ALG_CAPTURE eCaptureType,
+    WINBOOL fCaptureInbound,
+    ULONG ulListenAddress,
+    USHORT usListenPort,
+    IPrimaryControlChannel **ppIControlChannel);
+void __RPC_STUB IApplicationGatewayServices_CreatePrimaryControlChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_CreateSecondaryControlChannel_Proxy(
+    IApplicationGatewayServices* This,
+    ALG_PROTOCOL eProtocol,
+    ULONG ulPrivateAddress,
+    USHORT usPrivatePort,
+    ULONG ulPublicAddress,
+    USHORT usPublicPort,
+    ULONG ulRemoteAddress,
+    USHORT usRemotePort,
+    ULONG ulListenAddress,
+    USHORT usListenPort,
+    ALG_DIRECTION eDirection,
+    WINBOOL fPersistent,
+    ISecondaryControlChannel **ppControlChannel);
+void __RPC_STUB IApplicationGatewayServices_CreateSecondaryControlChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_GetBestSourceAddressForDestinationAddress_Proxy(
+    IApplicationGatewayServices* This,
+    ULONG ulDstAddress,
+    WINBOOL fDemandDial,
+    ULONG *pulBestSrcAddress);
+void __RPC_STUB IApplicationGatewayServices_GetBestSourceAddressForDestinationAddress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_PrepareProxyConnection_Proxy(
+    IApplicationGatewayServices* This,
+    ALG_PROTOCOL eProtocol,
+    ULONG ulSrcAddress,
+    USHORT usSrcPort,
+    ULONG ulDstAddress,
+    USHORT usDstPort,
+    WINBOOL fNoTimeout,
+    IPendingProxyConnection **ppPendingConnection);
+void __RPC_STUB IApplicationGatewayServices_PrepareProxyConnection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_PrepareSourceModifiedProxyConnection_Proxy(
+    IApplicationGatewayServices* This,
+    ALG_PROTOCOL eProtocol,
+    ULONG ulSrcAddress,
+    USHORT usSrcPort,
+    ULONG ulDstAddress,
+    USHORT usDstPort,
+    ULONG ulNewSrcAddress,
+    USHORT usNewSourcePort,
+    IPendingProxyConnection **ppPendingConnection);
+void __RPC_STUB IApplicationGatewayServices_PrepareSourceModifiedProxyConnection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_CreateDataChannel_Proxy(
+    IApplicationGatewayServices* This,
+    ALG_PROTOCOL eProtocol,
+    ULONG ulPrivateAddress,
+    USHORT usPrivatePort,
+    ULONG ulPublicAddress,
+    USHORT usPublicPort,
+    ULONG ulRemoteAddress,
+    USHORT usRemotePort,
+    ALG_DIRECTION eDirection,
+    ALG_NOTIFICATION eDesiredNotification,
+    WINBOOL fNoTimeout,
+    IDataChannel **ppDataChannel);
+void __RPC_STUB IApplicationGatewayServices_CreateDataChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_CreatePersistentDataChannel_Proxy(
+    IApplicationGatewayServices* This,
+    ALG_PROTOCOL eProtocol,
+    ULONG ulPrivateAddress,
+    USHORT usPrivatePort,
+    ULONG ulPublicAddress,
+    USHORT usPublicPort,
+    ULONG ulRemoteAddress,
+    USHORT usRemotePort,
+    ALG_DIRECTION eDirection,
+    IPersistentDataChannel **ppIPersistentDataChannel);
+void __RPC_STUB IApplicationGatewayServices_CreatePersistentDataChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_ReservePort_Proxy(
+    IApplicationGatewayServices* This,
+    USHORT usPortCount,
+    USHORT *pusReservedPort);
+void __RPC_STUB IApplicationGatewayServices_ReservePort_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_ReleaseReservedPort_Proxy(
+    IApplicationGatewayServices* This,
+    USHORT usReservedPortBase,
+    USHORT usPortCount);
+void __RPC_STUB IApplicationGatewayServices_ReleaseReservedPort_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_EnumerateAdapters_Proxy(
+    IApplicationGatewayServices* This,
+    IEnumAdapterInfo **ppIEnumAdapterInfo);
+void __RPC_STUB IApplicationGatewayServices_EnumerateAdapters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_StartAdapterNotifications_Proxy(
+    IApplicationGatewayServices* This,
+    IAdapterNotificationSink *pSink,
+    DWORD *pdwCookie);
+void __RPC_STUB IApplicationGatewayServices_StartAdapterNotifications_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_StopAdapterNotifications_Proxy(
+    IApplicationGatewayServices* This,
+    DWORD dwCookieOfSink);
+void __RPC_STUB IApplicationGatewayServices_StopAdapterNotifications_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGatewayServices_LookupAdapterPortMapping_Proxy(
+    IApplicationGatewayServices* This,
+    ULONG ulAdapterIndex,
+    UCHAR Protocol,
+    ULONG ulDestinationAddress,
+    USHORT usDestinationPort,
+    ULONG *pulRemapAddress,
+    USHORT *pusRemapPort);
+void __RPC_STUB IApplicationGatewayServices_LookupAdapterPortMapping_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IApplicationGatewayServices_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IApplicationGateway interface
+ */
+#ifndef __IApplicationGateway_INTERFACE_DEFINED__
+#define __IApplicationGateway_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IApplicationGateway, 0x5134842b, 0xfdce, 0x485d, 0x93,0xcd, 0xde,0x16,0x40,0x64,0x3b,0xbe);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5134842b-fdce-485d-93cd-de1640643bbe")
+IApplicationGateway : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        IApplicationGatewayServices *pAlgServices) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IApplicationGateway, 0x5134842b, 0xfdce, 0x485d, 0x93,0xcd, 0xde,0x16,0x40,0x64,0x3b,0xbe)
+#endif
+#else
+typedef struct IApplicationGatewayVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IApplicationGateway* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IApplicationGateway* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IApplicationGateway* This);
+
+    /*** IApplicationGateway methods ***/
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IApplicationGateway* This,
+        IApplicationGatewayServices *pAlgServices);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IApplicationGateway* This);
+
+    END_INTERFACE
+} IApplicationGatewayVtbl;
+interface IApplicationGateway {
+    CONST_VTBL IApplicationGatewayVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IApplicationGateway_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IApplicationGateway_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IApplicationGateway_Release(This) (This)->lpVtbl->Release(This)
+/*** IApplicationGateway methods ***/
+#define IApplicationGateway_Initialize(This,pAlgServices) (This)->lpVtbl->Initialize(This,pAlgServices)
+#define IApplicationGateway_Stop(This) (This)->lpVtbl->Stop(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IApplicationGateway_QueryInterface(IApplicationGateway* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IApplicationGateway_AddRef(IApplicationGateway* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IApplicationGateway_Release(IApplicationGateway* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IApplicationGateway methods ***/
+static FORCEINLINE HRESULT IApplicationGateway_Initialize(IApplicationGateway* This,IApplicationGatewayServices *pAlgServices) {
+    return This->lpVtbl->Initialize(This,pAlgServices);
+}
+static FORCEINLINE HRESULT IApplicationGateway_Stop(IApplicationGateway* This) {
+    return This->lpVtbl->Stop(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IApplicationGateway_Initialize_Proxy(
+    IApplicationGateway* This,
+    IApplicationGatewayServices *pAlgServices);
+void __RPC_STUB IApplicationGateway_Initialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IApplicationGateway_Stop_Proxy(
+    IApplicationGateway* This);
+void __RPC_STUB IApplicationGateway_Stop_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IApplicationGateway_INTERFACE_DEFINED__ */
+
+
+DEFINE_GUID(LIBID_ALGLib, 0xb6d1d098, 0xe235, 0x4b99, 0xba,0x98, 0x7c,0x62,0x4f,0xd8,0x75,0xdb);
+
+/*****************************************************************************
+ * ApplicationGatewayServices coclass
+ */
+
+DEFINE_GUID(CLSID_ApplicationGatewayServices, 0xf8ade1d3, 0x49df, 0x4b75, 0x90,0x05, 0xef,0x95,0x08,0xe6,0xa3,0x37);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("f8ade1d3-49df-4b75-9005-ef9508e6a337") ApplicationGatewayServices;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ApplicationGatewayServices, 0xf8ade1d3, 0x49df, 0x4b75, 0x90,0x05, 0xef,0x95,0x08,0xe6,0xa3,0x37)
+#endif
+#endif
+
+/*****************************************************************************
+ * PrimaryControlChannel coclass
+ */
+
+DEFINE_GUID(CLSID_PrimaryControlChannel, 0x3ceb5509, 0xc1cd, 0x432f, 0x9d,0x8f, 0x65,0xd1,0xe2,0x86,0xaa,0x80);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("3ceb5509-c1cd-432f-9d8f-65d1e286aa80") PrimaryControlChannel;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(PrimaryControlChannel, 0x3ceb5509, 0xc1cd, 0x432f, 0x9d,0x8f, 0x65,0xd1,0xe2,0x86,0xaa,0x80)
+#endif
+#endif
+
+/*****************************************************************************
+ * SecondaryControlChannel coclass
+ */
+
+DEFINE_GUID(CLSID_SecondaryControlChannel, 0x7b3181a0, 0xc92f, 0x4567, 0xb0,0xfa, 0xcd,0x9a,0x10,0xec,0xd7,0xd1);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("7b3181a0-c92f-4567-b0fa-cd9a10ecd7d1") SecondaryControlChannel;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(SecondaryControlChannel, 0x7b3181a0, 0xc92f, 0x4567, 0xb0,0xfa, 0xcd,0x9a,0x10,0xec,0xd7,0xd1)
+#endif
+#endif
+
+/*****************************************************************************
+ * AdapterInfo coclass
+ */
+
+DEFINE_GUID(CLSID_AdapterInfo, 0x6f9942c9, 0xc1b1, 0x4ab5, 0x93,0xda, 0x60,0x58,0x99,0x1d,0xc8,0xf3);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("6f9942c9-c1b1-4ab5-93da-6058991dc8f3") AdapterInfo;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AdapterInfo, 0x6f9942c9, 0xc1b1, 0x4ab5, 0x93,0xda, 0x60,0x58,0x99,0x1d,0xc8,0xf3)
+#endif
+#endif
+
+/*****************************************************************************
+ * EnumAdapterInfo coclass
+ */
+
+DEFINE_GUID(CLSID_EnumAdapterInfo, 0x6f9942ca, 0xc1b1, 0x4ab5, 0x93,0xda, 0x60,0x58,0x99,0x1d,0xc8,0xf3);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("6f9942ca-c1b1-4ab5-93da-6058991dc8f3") EnumAdapterInfo;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(EnumAdapterInfo, 0x6f9942ca, 0xc1b1, 0x4ab5, 0x93,0xda, 0x60,0x58,0x99,0x1d,0xc8,0xf3)
+#endif
+#endif
+
+/*****************************************************************************
+ * PendingProxyConnection coclass
+ */
+
+DEFINE_GUID(CLSID_PendingProxyConnection, 0xd8a68e5e, 0x2b37, 0x426c, 0xa3,0x29, 0xc1,0x17,0xc1,0x4c,0x42,0x9e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("d8a68e5e-2b37-426c-a329-c117c14c429e") PendingProxyConnection;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(PendingProxyConnection, 0xd8a68e5e, 0x2b37, 0x426c, 0xa3,0x29, 0xc1,0x17,0xc1,0x4c,0x42,0x9e)
+#endif
+#endif
+
+/*****************************************************************************
+ * DataChannel coclass
+ */
+
+DEFINE_GUID(CLSID_DataChannel, 0xbbb36f15, 0x408d, 0x4056, 0x8c,0x27, 0x92,0x08,0x43,0xd4,0x0b,0xe5);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("bbb36f15-408d-4056-8c27-920843d40be5") DataChannel;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DataChannel, 0xbbb36f15, 0x408d, 0x4056, 0x8c,0x27, 0x92,0x08,0x43,0xd4,0x0b,0xe5)
+#endif
+#endif
+
+/*****************************************************************************
+ * PersistentDataChannel coclass
+ */
+
+DEFINE_GUID(CLSID_PersistentDataChannel, 0xbc9b54ab, 0x7883, 0x4c13, 0x90,0x9f, 0x03,0x3d,0x03,0x26,0x79,0x90);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("bc9b54ab-7883-4c13-909f-033d03267990") PersistentDataChannel;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(PersistentDataChannel, 0xbc9b54ab, 0x7883, 0x4c13, 0x90,0x9f, 0x03,0x3d,0x03,0x26,0x79,0x90)
+#endif
+#endif
+
+#endif
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __alg_h__ */
diff --git a/mingw-w64-headers/include/alg.idl b/mingw-w64-headers/include/alg.idl
new file mode 100755
index 0000000..7119212
--- /dev/null
+++ b/mingw-w64-headers/include/alg.idl
@@ -0,0 +1,209 @@
+/**
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+cpp_quote("#include <winapifamily.h>")
+cpp_quote("")
+cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
+
+typedef enum _ALG_ADAPTER_TYPE {
+  eALG_PRIVATE = 0x1,
+  eALG_BOUNDARY = 0x2,
+  eALG_FIREWALLED = 0x4
+} ALG_ADAPTER_TYPE;
+
+typedef enum _ALG_CAPTURE {
+  eALG_SOURCE_CAPTURE = 0x1,
+  eALG_DESTINATION_CAPTURE = 0x2
+} ALG_CAPTURE;
+
+typedef enum _ALG_DIRECTION {
+  eALG_INBOUND = 0x1,
+  eALG_OUTBOUND = 0x2,
+  eALG_BOTH = 0x3
+} ALG_DIRECTION;
+
+typedef enum _ALG_NOTIFICATION {
+  eALG_NONE = 0x0,
+  eALG_SESSION_CREATION = 0x1,
+  eALG_SESSION_DELETION = 0x2,
+  eALG_SESSION_BOTH = 0x3
+} ALG_NOTIFICATION;
+
+typedef enum _ALG_PROTOCOL {
+  eALG_TCP = 0x1,
+  eALG_UDP = 0x2
+} ALG_PROTOCOL;
+
+typedef struct _ALG_PRIMARY_CHANNEL_PROPERTIES {
+  ALG_PROTOCOL eProtocol;
+  USHORT usCapturePort;
+  ALG_CAPTURE eCaptureType;
+  BOOL fCaptureInbound;
+  ULONG ulListeningAddress;
+  USHORT usListeningPort;
+  ULONG ulAdapterIndex;
+} ALG_PRIMARY_CHANNEL_PROPERTIES;
+
+typedef struct _ALG_SECONDARY_CHANNEL_PROPERTIES {
+  ALG_PROTOCOL eProtocol;
+  ULONG ulPrivateAddress;
+  USHORT usPrivatePort;
+  ULONG ulPublicAddress;
+  USHORT usPublicPort;
+  ULONG ulRemoteAddress;
+  USHORT usRemotePort;
+  ULONG ulListenAddress;
+  USHORT usListenPort;
+  ALG_DIRECTION eDirection;
+  BOOL fPersistent;
+} ALG_SECONDARY_CHANNEL_PROPERTIES;
+
+typedef struct _ALG_DATA_CHANNEL_PROPERTIES {
+  ALG_PROTOCOL eProtocol;
+  ULONG ulPrivateAddress;
+  USHORT usPrivatePort;
+  ULONG ulPublicAddress;
+  USHORT usPublicPort;
+  ULONG ulRemoteAddress;
+  USHORT usRemotePort;
+  ALG_DIRECTION eDirection;
+  ALG_NOTIFICATION eDesiredNotification;
+} ALG_DATA_CHANNEL_PROPERTIES;
+
+typedef struct _ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES {
+  ALG_PROTOCOL eProtocol;
+  ULONG ulPrivateAddress;
+  USHORT usPrivatePort;
+  ULONG ulPublicAddress;
+  USHORT usPublicPort;
+  ULONG ulRemoteAddress;
+  USHORT usRemotePort;
+  ALG_DIRECTION eDirection;
+} ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES;
+
+const int ALG_MAXIMUM_PORT_RANGE_SIZE = 10;
+
+[object, uuid (480bf94a-09fd-4f8a-a3e0-b0700282d84d), pointer_default (unique)]
+interface IAdapterInfo : IUnknown {
+  HRESULT GetAdapterIndex ([out] ULONG *pulIndex);
+  HRESULT GetAdapterType ([out] ALG_ADAPTER_TYPE *pAdapterType);
+  HRESULT GetAdapterAddresses ([out] ULONG *pulAddressCount,[out, size_is (,*pulAddressCount)] ULONG **prgAddresses);
+};
+
+[object, uuid (B68E5043-3e3d-4cc2-b9c1-5f8f88fee81c), pointer_default (unique)]
+interface IPendingProxyConnection : IUnknown {
+  HRESULT Cancel ();
+};
+
+[object, local, uuid (ad42d12a-4ad0-4856-919e-e854c91d1856), pointer_default (unique)]
+interface IDataChannel : IUnknown {
+  HRESULT Cancel ();
+  HRESULT GetChannelProperties ([out] ALG_DATA_CHANNEL_PROPERTIES **ppProperties);
+  HRESULT GetSessionCreationEventHandle ([out] HANDLE *pHandle);
+  HRESULT GetSessionDeletionEventHandle ([out] HANDLE *pHandle);
+};
+
+[object, uuid (a180e934-d92a-415d-9144-759f8054e8f6), pointer_default (unique)]
+interface IPersistentDataChannel : IUnknown {
+  HRESULT Cancel ();
+  HRESULT GetChannelProperties ([out] ALG_PERSISTENT_DATA_CHANNEL_PROPERTIES **ppProperties);
+};
+
+[object, uuid (1a2e8b62-9012-4be6-84ae-32bd66ba657a), pointer_default (unique)]
+interface IPrimaryControlChannel : IUnknown {
+  HRESULT Cancel ();
+  HRESULT GetChannelProperties ([out] ALG_PRIMARY_CHANNEL_PROPERTIES **ppProperties);
+  HRESULT GetOriginalDestinationInformation ([in] ULONG ulSourceAddress,[in] USHORT usSourcePort,[out] ULONG *pulOriginalDestinationAddress,[out] USHORT *pusOriginalDestinationPort,[out] ULONG *pulRemapDestinationAddress,[out] USHORT *pulRemapDestinationPort,[out] IAdapterInfo **ppReceiveAdapter);
+};
+
+[object, uuid (a23f9d10-714c-41fe-8471-ffb19bc28454), pointer_default (unique)]
+interface ISecondaryControlChannel : IUnknown {
+  HRESULT Cancel ();
+  HRESULT GetChannelProperties ([out] ALG_SECONDARY_CHANNEL_PROPERTIES **ppProperties);
+  HRESULT GetOriginalDestinationInformation ([in] ULONG ulSourceAddress,[in] USHORT usSourcePort,[out] ULONG *pulOriginalDestinationAddress,[out] USHORT *pusOriginalDestinationPort,[out] IAdapterInfo **ppReceiveAdapter);
+};
+
+[object, uuid (a23f9d11-714c-41fe-8471-ffb19bc28454), pointer_default (unique)]
+interface IEnumAdapterInfo : IUnknown {
+  HRESULT Next ([in] ULONG celt,[out, size_is (celt), length_is (*pCeltFetched)] IAdapterInfo **rgAI,[out] ULONG *pCeltFetched);
+  HRESULT Skip ([in] ULONG celt);
+  HRESULT Reset ();
+  HRESULT Clone ([out] IEnumAdapterInfo **ppEnum);
+}
+
+[object, uuid (44ab2dc3-23b2-47de-8228-2e1cceeb9911), pointer_default (unique)]
+interface IAdapterNotificationSink : IUnknown {
+  HRESULT AdapterAdded (IAdapterInfo *pAdapter);
+  HRESULT AdapterRemoved (IAdapterInfo *pAdapter);
+  HRESULT AdapterModified (IAdapterInfo *pAdapter);
+  HRESULT AdapterUpdatePortMapping (IAdapterInfo *pAdapter);
+};
+
+[object, uuid (5134842a-fdce-485d-93cd-de1640643bbe), pointer_default (unique)]
+interface IApplicationGatewayServices : IUnknown {
+  HRESULT CreatePrimaryControlChannel ([in] ULONG uAdapterIndex,[in] ALG_PROTOCOL eProtocol,[in] USHORT usPortToCapture,[in] ALG_CAPTURE eCaptureType,[in] BOOL fCaptureInbound,[in] ULONG ulListenAddress,[in] USHORT usListenPort,[out] IPrimaryControlChannel **ppIControlChannel);
+  HRESULT CreateSecondaryControlChannel ([in] ALG_PROTOCOL eProtocol,[in] ULONG ulPrivateAddress,[in] USHORT usPrivatePort,[in] ULONG ulPublicAddress,[in] USHORT usPublicPort,[in] ULONG ulRemoteAddress,[in] USHORT usRemotePort,[in] ULONG ulListenAddress,[in] USHORT usListenPort,[in] ALG_DIRECTION eDirection,[in] BOOL fPersistent,[out] ISecondaryControlChannel **ppControlChannel);
+  HRESULT GetBestSourceAddressForDestinationAddress ([in] ULONG ulDstAddress,[in] BOOL fDemandDial,[out] ULONG *pulBestSrcAddress);
+  HRESULT PrepareProxyConnection ([in] ALG_PROTOCOL eProtocol,[in] ULONG ulSrcAddress,[in] USHORT usSrcPort,[in] ULONG ulDstAddress,[in] USHORT usDstPort,[in] BOOL fNoTimeout,[out] IPendingProxyConnection **ppPendingConnection);
+  HRESULT PrepareSourceModifiedProxyConnection ([in] ALG_PROTOCOL eProtocol,[in] ULONG ulSrcAddress,[in] USHORT usSrcPort,[in] ULONG ulDstAddress,[in] USHORT usDstPort,[in] ULONG ulNewSrcAddress,[in] USHORT usNewSourcePort,[out] IPendingProxyConnection **ppPendingConnection);
+  HRESULT CreateDataChannel ([in] ALG_PROTOCOL eProtocol,[in] ULONG ulPrivateAddress,[in] USHORT usPrivatePort,[in] ULONG ulPublicAddress,[in] USHORT usPublicPort,[in] ULONG ulRemoteAddress,[in] USHORT usRemotePort,[in] ALG_DIRECTION eDirection,[in] ALG_NOTIFICATION eDesiredNotification,[in] BOOL fNoTimeout,[out] IDataChannel **ppDataChannel);
+  HRESULT CreatePersistentDataChannel ([in] ALG_PROTOCOL eProtocol,[in] ULONG ulPrivateAddress,[in] USHORT usPrivatePort,[in] ULONG ulPublicAddress,[in] USHORT usPublicPort,[in] ULONG ulRemoteAddress,[in] USHORT usRemotePort,[in] ALG_DIRECTION eDirection,[out] IPersistentDataChannel **ppIPersistentDataChannel);
+  HRESULT ReservePort ([in] USHORT usPortCount,[out] USHORT *pusReservedPort);
+  HRESULT ReleaseReservedPort ([in] USHORT usReservedPortBase,[in] USHORT usPortCount);
+  HRESULT EnumerateAdapters ([out] IEnumAdapterInfo **ppIEnumAdapterInfo);
+  HRESULT StartAdapterNotifications ([in] IAdapterNotificationSink *pSink,[in] DWORD *pdwCookie);
+  HRESULT StopAdapterNotifications ([in] DWORD dwCookieOfSink);
+  HRESULT LookupAdapterPortMapping ([in] ULONG ulAdapterIndex,[in] UCHAR Protocol,[in] ULONG ulDestinationAddress,[in] USHORT usDestinationPort,[out] ULONG *pulRemapAddress,[out] USHORT *pusRemapPort);
+};
+
+[object, uuid (5134842b-fdce-485d-93cd-de1640643bbe), pointer_default (unique)]
+interface IApplicationGateway : IUnknown {
+  HRESULT Initialize ([in] IApplicationGatewayServices *pAlgServices);
+  HRESULT Stop (void);
+};
+
+[uuid (b6d1d098-e235-4b99-ba98-7c624fd875db), version (1.0)]
+library ALGLib {
+  importlib ("stdole32.tlb");
+  importlib ("stdole2.tlb");
+
+  [uuid (f8ade1d3-49df-4b75-9005-ef9508e6a337)]
+  coclass ApplicationGatewayServices {
+    [default] interface IApplicationGatewayServices;
+  };
+  [uuid (3ceb5509-C1CD-432f-9d8f-65d1e286aa80)]
+  coclass PrimaryControlChannel {
+    [default] interface IPrimaryControlChannel;
+  };
+  [uuid (7b3181a0-c92F-4567-b0fa-cd9a10ecd7d1)]
+  coclass SecondaryControlChannel {
+    [default] interface ISecondaryControlChannel;
+  };
+  [uuid (6f9942c9-c1b1-4ab5-93da-6058991dc8f3)]
+  coclass AdapterInfo {
+    [default] interface IAdapterInfo;
+  };
+  [uuid (6f9942ca-c1b1-4ab5-93da-6058991dc8f3)]
+  coclass EnumAdapterInfo {
+    [default] interface IEnumAdapterInfo;
+  };
+  [uuid (d8a68e5e-2b37-426c-a329-c117c14c429e)]
+  coclass PendingProxyConnection {
+    [default] interface IPendingProxyConnection;
+  };
+  [uuid (bbb36f15-408d-4056-8c27-920843d40be5)]
+  coclass DataChannel {
+    [default] interface IDataChannel;
+  };
+  [uuid (bc9B54ab-7883-4c13-909f-033d03267990)]
+
+  coclass PersistentDataChannel {
+    [default] interface IPersistentDataChannel;
+  };
+};
+cpp_quote("#endif")