/*** Autogenerated by WIDL 9.0 from include/natupnp.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 __natupnp_h__
#define __natupnp_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#ifndef __IStaticPortMapping_FWD_DEFINED__
#define __IStaticPortMapping_FWD_DEFINED__
typedef interface IStaticPortMapping IStaticPortMapping;
#ifdef __cplusplus
interface IStaticPortMapping;
#endif /* __cplusplus */
#endif

#ifndef __IStaticPortMappingCollection_FWD_DEFINED__
#define __IStaticPortMappingCollection_FWD_DEFINED__
typedef interface IStaticPortMappingCollection IStaticPortMappingCollection;
#ifdef __cplusplus
interface IStaticPortMappingCollection;
#endif /* __cplusplus */
#endif

#ifndef __IDynamicPortMapping_FWD_DEFINED__
#define __IDynamicPortMapping_FWD_DEFINED__
typedef interface IDynamicPortMapping IDynamicPortMapping;
#ifdef __cplusplus
interface IDynamicPortMapping;
#endif /* __cplusplus */
#endif

#ifndef __IDynamicPortMappingCollection_FWD_DEFINED__
#define __IDynamicPortMappingCollection_FWD_DEFINED__
typedef interface IDynamicPortMappingCollection IDynamicPortMappingCollection;
#ifdef __cplusplus
interface IDynamicPortMappingCollection;
#endif /* __cplusplus */
#endif

#ifndef __INATEventManager_FWD_DEFINED__
#define __INATEventManager_FWD_DEFINED__
typedef interface INATEventManager INATEventManager;
#ifdef __cplusplus
interface INATEventManager;
#endif /* __cplusplus */
#endif

#ifndef __IUPnPNAT_FWD_DEFINED__
#define __IUPnPNAT_FWD_DEFINED__
typedef interface IUPnPNAT IUPnPNAT;
#ifdef __cplusplus
interface IUPnPNAT;
#endif /* __cplusplus */
#endif

#ifndef __UPnPNAT_FWD_DEFINED__
#define __UPnPNAT_FWD_DEFINED__
#ifdef __cplusplus
typedef class UPnPNAT UPnPNAT;
#else
typedef struct UPnPNAT UPnPNAT;
#endif /* defined __cplusplus */
#endif /* defined __UPnPNAT_FWD_DEFINED__ */

/* Headers for imported files */

#include <oaidl.h>
#include <ocidl.h>

#ifdef __cplusplus
extern "C" {
#endif

/*****************************************************************************
 * IStaticPortMapping interface
 */
#ifndef __IStaticPortMapping_INTERFACE_DEFINED__
#define __IStaticPortMapping_INTERFACE_DEFINED__

DEFINE_GUID(IID_IStaticPortMapping, 0x6f10711f, 0x729b, 0x41e5, 0x93,0xb8, 0xf2,0x1d,0x0f,0x81,0x8d,0xf1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6f10711f-729b-41e5-93b8-f21d0f818df1")
IStaticPortMapping : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_ExternalIPAddress(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ExternalPort(
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InternalPort(
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Protocol(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InternalClient(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Enabled(
        VARIANT_BOOL *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Description(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE EditInternalClient(
        BSTR client) = 0;

    virtual HRESULT STDMETHODCALLTYPE Enable(
        VARIANT_BOOL enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE EditDescription(
        BSTR description) = 0;

    virtual HRESULT STDMETHODCALLTYPE EditInternalPort(
        LONG port) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IStaticPortMapping, 0x6f10711f, 0x729b, 0x41e5, 0x93,0xb8, 0xf2,0x1d,0x0f,0x81,0x8d,0xf1)
#endif
#else
typedef struct IStaticPortMappingVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IStaticPortMapping *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IStaticPortMapping *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IStaticPortMapping *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IStaticPortMapping *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IStaticPortMapping *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IStaticPortMapping *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IStaticPortMapping *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** IStaticPortMapping methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ExternalIPAddress)(
        IStaticPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *get_ExternalPort)(
        IStaticPortMapping *This,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *get_InternalPort)(
        IStaticPortMapping *This,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *get_Protocol)(
        IStaticPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *get_InternalClient)(
        IStaticPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *get_Enabled)(
        IStaticPortMapping *This,
        VARIANT_BOOL *value);

    HRESULT (STDMETHODCALLTYPE *get_Description)(
        IStaticPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *EditInternalClient)(
        IStaticPortMapping *This,
        BSTR client);

    HRESULT (STDMETHODCALLTYPE *Enable)(
        IStaticPortMapping *This,
        VARIANT_BOOL enable);

    HRESULT (STDMETHODCALLTYPE *EditDescription)(
        IStaticPortMapping *This,
        BSTR description);

    HRESULT (STDMETHODCALLTYPE *EditInternalPort)(
        IStaticPortMapping *This,
        LONG port);

    END_INTERFACE
} IStaticPortMappingVtbl;

interface IStaticPortMapping {
    CONST_VTBL IStaticPortMappingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IStaticPortMapping_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IStaticPortMapping_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IStaticPortMapping_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define IStaticPortMapping_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IStaticPortMapping_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IStaticPortMapping_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IStaticPortMapping_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** IStaticPortMapping methods ***/
#define IStaticPortMapping_get_ExternalIPAddress(This,value) (This)->lpVtbl->get_ExternalIPAddress(This,value)
#define IStaticPortMapping_get_ExternalPort(This,value) (This)->lpVtbl->get_ExternalPort(This,value)
#define IStaticPortMapping_get_InternalPort(This,value) (This)->lpVtbl->get_InternalPort(This,value)
#define IStaticPortMapping_get_Protocol(This,value) (This)->lpVtbl->get_Protocol(This,value)
#define IStaticPortMapping_get_InternalClient(This,value) (This)->lpVtbl->get_InternalClient(This,value)
#define IStaticPortMapping_get_Enabled(This,value) (This)->lpVtbl->get_Enabled(This,value)
#define IStaticPortMapping_get_Description(This,value) (This)->lpVtbl->get_Description(This,value)
#define IStaticPortMapping_EditInternalClient(This,client) (This)->lpVtbl->EditInternalClient(This,client)
#define IStaticPortMapping_Enable(This,enable) (This)->lpVtbl->Enable(This,enable)
#define IStaticPortMapping_EditDescription(This,description) (This)->lpVtbl->EditDescription(This,description)
#define IStaticPortMapping_EditInternalPort(This,port) (This)->lpVtbl->EditInternalPort(This,port)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IStaticPortMapping_QueryInterface(IStaticPortMapping* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IStaticPortMapping_AddRef(IStaticPortMapping* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IStaticPortMapping_Release(IStaticPortMapping* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT IStaticPortMapping_GetTypeInfoCount(IStaticPortMapping* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_GetTypeInfo(IStaticPortMapping* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_GetIDsOfNames(IStaticPortMapping* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_Invoke(IStaticPortMapping* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** IStaticPortMapping methods ***/
static __WIDL_INLINE HRESULT IStaticPortMapping_get_ExternalIPAddress(IStaticPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_ExternalIPAddress(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_get_ExternalPort(IStaticPortMapping* This,LONG *value) {
    return This->lpVtbl->get_ExternalPort(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_get_InternalPort(IStaticPortMapping* This,LONG *value) {
    return This->lpVtbl->get_InternalPort(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_get_Protocol(IStaticPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_Protocol(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_get_InternalClient(IStaticPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_InternalClient(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_get_Enabled(IStaticPortMapping* This,VARIANT_BOOL *value) {
    return This->lpVtbl->get_Enabled(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_get_Description(IStaticPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_Description(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_EditInternalClient(IStaticPortMapping* This,BSTR client) {
    return This->lpVtbl->EditInternalClient(This,client);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_Enable(IStaticPortMapping* This,VARIANT_BOOL enable) {
    return This->lpVtbl->Enable(This,enable);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_EditDescription(IStaticPortMapping* This,BSTR description) {
    return This->lpVtbl->EditDescription(This,description);
}
static __WIDL_INLINE HRESULT IStaticPortMapping_EditInternalPort(IStaticPortMapping* This,LONG port) {
    return This->lpVtbl->EditInternalPort(This,port);
}
#endif
#endif

#endif


#endif  /* __IStaticPortMapping_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IStaticPortMappingCollection interface
 */
#ifndef __IStaticPortMappingCollection_INTERFACE_DEFINED__
#define __IStaticPortMappingCollection_INTERFACE_DEFINED__

DEFINE_GUID(IID_IStaticPortMappingCollection, 0xcd1f3e77, 0x66d6, 0x4664, 0x82,0xc7, 0x36,0xdb,0xb6,0x41,0xd0,0xf1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("cd1f3e77-66d6-4664-82c7-36dbb641d0f1")
IStaticPortMappingCollection : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Item(
        LONG port,
        BSTR protocol,
        IStaticPortMapping **mapping) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE Remove(
        LONG port,
        BSTR protocol) = 0;

    virtual HRESULT STDMETHODCALLTYPE Add(
        LONG external,
        BSTR protocol,
        LONG internal,
        BSTR client,
        VARIANT_BOOL enabled,
        BSTR description,
        IStaticPortMapping **mapping) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IStaticPortMappingCollection, 0xcd1f3e77, 0x66d6, 0x4664, 0x82,0xc7, 0x36,0xdb,0xb6,0x41,0xd0,0xf1)
#endif
#else
typedef struct IStaticPortMappingCollectionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IStaticPortMappingCollection *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IStaticPortMappingCollection *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IStaticPortMappingCollection *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IStaticPortMappingCollection *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IStaticPortMappingCollection *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IStaticPortMappingCollection *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IStaticPortMappingCollection *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** IStaticPortMappingCollection methods ***/
    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        IStaticPortMappingCollection *This,
        IUnknown **value);

    HRESULT (STDMETHODCALLTYPE *get_Item)(
        IStaticPortMappingCollection *This,
        LONG port,
        BSTR protocol,
        IStaticPortMapping **mapping);

    HRESULT (STDMETHODCALLTYPE *get_Count)(
        IStaticPortMappingCollection *This,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *Remove)(
        IStaticPortMappingCollection *This,
        LONG port,
        BSTR protocol);

    HRESULT (STDMETHODCALLTYPE *Add)(
        IStaticPortMappingCollection *This,
        LONG external,
        BSTR protocol,
        LONG internal,
        BSTR client,
        VARIANT_BOOL enabled,
        BSTR description,
        IStaticPortMapping **mapping);

    END_INTERFACE
} IStaticPortMappingCollectionVtbl;

interface IStaticPortMappingCollection {
    CONST_VTBL IStaticPortMappingCollectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IStaticPortMappingCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IStaticPortMappingCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IStaticPortMappingCollection_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define IStaticPortMappingCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IStaticPortMappingCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IStaticPortMappingCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IStaticPortMappingCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** IStaticPortMappingCollection methods ***/
#define IStaticPortMappingCollection_get__NewEnum(This,value) (This)->lpVtbl->get__NewEnum(This,value)
#define IStaticPortMappingCollection_get_Item(This,port,protocol,mapping) (This)->lpVtbl->get_Item(This,port,protocol,mapping)
#define IStaticPortMappingCollection_get_Count(This,value) (This)->lpVtbl->get_Count(This,value)
#define IStaticPortMappingCollection_Remove(This,port,protocol) (This)->lpVtbl->Remove(This,port,protocol)
#define IStaticPortMappingCollection_Add(This,external,protocol,internal,client,enabled,description,mapping) (This)->lpVtbl->Add(This,external,protocol,internal,client,enabled,description,mapping)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_QueryInterface(IStaticPortMappingCollection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IStaticPortMappingCollection_AddRef(IStaticPortMappingCollection* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IStaticPortMappingCollection_Release(IStaticPortMappingCollection* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_GetTypeInfoCount(IStaticPortMappingCollection* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_GetTypeInfo(IStaticPortMappingCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_GetIDsOfNames(IStaticPortMappingCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_Invoke(IStaticPortMappingCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** IStaticPortMappingCollection methods ***/
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_get__NewEnum(IStaticPortMappingCollection* This,IUnknown **value) {
    return This->lpVtbl->get__NewEnum(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_get_Item(IStaticPortMappingCollection* This,LONG port,BSTR protocol,IStaticPortMapping **mapping) {
    return This->lpVtbl->get_Item(This,port,protocol,mapping);
}
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_get_Count(IStaticPortMappingCollection* This,LONG *value) {
    return This->lpVtbl->get_Count(This,value);
}
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_Remove(IStaticPortMappingCollection* This,LONG port,BSTR protocol) {
    return This->lpVtbl->Remove(This,port,protocol);
}
static __WIDL_INLINE HRESULT IStaticPortMappingCollection_Add(IStaticPortMappingCollection* This,LONG external,BSTR protocol,LONG internal,BSTR client,VARIANT_BOOL enabled,BSTR description,IStaticPortMapping **mapping) {
    return This->lpVtbl->Add(This,external,protocol,internal,client,enabled,description,mapping);
}
#endif
#endif

#endif


#endif  /* __IStaticPortMappingCollection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDynamicPortMapping interface
 */
#ifndef __IDynamicPortMapping_INTERFACE_DEFINED__
#define __IDynamicPortMapping_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDynamicPortMapping, 0x4fc80282, 0x23b6, 0x4378, 0x9a,0x27, 0xcd,0x8f,0x17,0xc9,0x40,0x0c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4fc80282-23b6-4378-9a27-cd8f17c9400c")
IDynamicPortMapping : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_ExternalIPAddress(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RemoteHost(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ExternalPort(
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Protocol(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InternalPort(
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InternalClient(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Enabled(
        VARIANT_BOOL *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Description(
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LeaseDuration(
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE RenewLease(
        LONG desired,
        LONG *duration) = 0;

    virtual HRESULT STDMETHODCALLTYPE EditInternalClient(
        BSTR client) = 0;

    virtual HRESULT STDMETHODCALLTYPE Enable(
        VARIANT_BOOL enabled) = 0;

    virtual HRESULT STDMETHODCALLTYPE EditDescription(
        BSTR description) = 0;

    virtual HRESULT STDMETHODCALLTYPE EditInternalPort(
        LONG port) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDynamicPortMapping, 0x4fc80282, 0x23b6, 0x4378, 0x9a,0x27, 0xcd,0x8f,0x17,0xc9,0x40,0x0c)
#endif
#else
typedef struct IDynamicPortMappingVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDynamicPortMapping *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDynamicPortMapping *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDynamicPortMapping *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IDynamicPortMapping *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IDynamicPortMapping *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IDynamicPortMapping *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IDynamicPortMapping *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** IDynamicPortMapping methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ExternalIPAddress)(
        IDynamicPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *get_RemoteHost)(
        IDynamicPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *get_ExternalPort)(
        IDynamicPortMapping *This,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *get_Protocol)(
        IDynamicPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *get_InternalPort)(
        IDynamicPortMapping *This,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *get_InternalClient)(
        IDynamicPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *get_Enabled)(
        IDynamicPortMapping *This,
        VARIANT_BOOL *value);

    HRESULT (STDMETHODCALLTYPE *get_Description)(
        IDynamicPortMapping *This,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *get_LeaseDuration)(
        IDynamicPortMapping *This,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *RenewLease)(
        IDynamicPortMapping *This,
        LONG desired,
        LONG *duration);

    HRESULT (STDMETHODCALLTYPE *EditInternalClient)(
        IDynamicPortMapping *This,
        BSTR client);

    HRESULT (STDMETHODCALLTYPE *Enable)(
        IDynamicPortMapping *This,
        VARIANT_BOOL enabled);

    HRESULT (STDMETHODCALLTYPE *EditDescription)(
        IDynamicPortMapping *This,
        BSTR description);

    HRESULT (STDMETHODCALLTYPE *EditInternalPort)(
        IDynamicPortMapping *This,
        LONG port);

    END_INTERFACE
} IDynamicPortMappingVtbl;

interface IDynamicPortMapping {
    CONST_VTBL IDynamicPortMappingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDynamicPortMapping_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDynamicPortMapping_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDynamicPortMapping_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define IDynamicPortMapping_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IDynamicPortMapping_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IDynamicPortMapping_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IDynamicPortMapping_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** IDynamicPortMapping methods ***/
#define IDynamicPortMapping_get_ExternalIPAddress(This,value) (This)->lpVtbl->get_ExternalIPAddress(This,value)
#define IDynamicPortMapping_get_RemoteHost(This,value) (This)->lpVtbl->get_RemoteHost(This,value)
#define IDynamicPortMapping_get_ExternalPort(This,value) (This)->lpVtbl->get_ExternalPort(This,value)
#define IDynamicPortMapping_get_Protocol(This,value) (This)->lpVtbl->get_Protocol(This,value)
#define IDynamicPortMapping_get_InternalPort(This,value) (This)->lpVtbl->get_InternalPort(This,value)
#define IDynamicPortMapping_get_InternalClient(This,value) (This)->lpVtbl->get_InternalClient(This,value)
#define IDynamicPortMapping_get_Enabled(This,value) (This)->lpVtbl->get_Enabled(This,value)
#define IDynamicPortMapping_get_Description(This,value) (This)->lpVtbl->get_Description(This,value)
#define IDynamicPortMapping_get_LeaseDuration(This,value) (This)->lpVtbl->get_LeaseDuration(This,value)
#define IDynamicPortMapping_RenewLease(This,desired,duration) (This)->lpVtbl->RenewLease(This,desired,duration)
#define IDynamicPortMapping_EditInternalClient(This,client) (This)->lpVtbl->EditInternalClient(This,client)
#define IDynamicPortMapping_Enable(This,enabled) (This)->lpVtbl->Enable(This,enabled)
#define IDynamicPortMapping_EditDescription(This,description) (This)->lpVtbl->EditDescription(This,description)
#define IDynamicPortMapping_EditInternalPort(This,port) (This)->lpVtbl->EditInternalPort(This,port)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IDynamicPortMapping_QueryInterface(IDynamicPortMapping* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IDynamicPortMapping_AddRef(IDynamicPortMapping* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IDynamicPortMapping_Release(IDynamicPortMapping* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT IDynamicPortMapping_GetTypeInfoCount(IDynamicPortMapping* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_GetTypeInfo(IDynamicPortMapping* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_GetIDsOfNames(IDynamicPortMapping* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_Invoke(IDynamicPortMapping* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** IDynamicPortMapping methods ***/
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_ExternalIPAddress(IDynamicPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_ExternalIPAddress(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_RemoteHost(IDynamicPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_RemoteHost(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_ExternalPort(IDynamicPortMapping* This,LONG *value) {
    return This->lpVtbl->get_ExternalPort(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_Protocol(IDynamicPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_Protocol(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_InternalPort(IDynamicPortMapping* This,LONG *value) {
    return This->lpVtbl->get_InternalPort(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_InternalClient(IDynamicPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_InternalClient(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_Enabled(IDynamicPortMapping* This,VARIANT_BOOL *value) {
    return This->lpVtbl->get_Enabled(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_Description(IDynamicPortMapping* This,BSTR *value) {
    return This->lpVtbl->get_Description(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_get_LeaseDuration(IDynamicPortMapping* This,LONG *value) {
    return This->lpVtbl->get_LeaseDuration(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_RenewLease(IDynamicPortMapping* This,LONG desired,LONG *duration) {
    return This->lpVtbl->RenewLease(This,desired,duration);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_EditInternalClient(IDynamicPortMapping* This,BSTR client) {
    return This->lpVtbl->EditInternalClient(This,client);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_Enable(IDynamicPortMapping* This,VARIANT_BOOL enabled) {
    return This->lpVtbl->Enable(This,enabled);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_EditDescription(IDynamicPortMapping* This,BSTR description) {
    return This->lpVtbl->EditDescription(This,description);
}
static __WIDL_INLINE HRESULT IDynamicPortMapping_EditInternalPort(IDynamicPortMapping* This,LONG port) {
    return This->lpVtbl->EditInternalPort(This,port);
}
#endif
#endif

#endif


#endif  /* __IDynamicPortMapping_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDynamicPortMappingCollection interface
 */
#ifndef __IDynamicPortMappingCollection_INTERFACE_DEFINED__
#define __IDynamicPortMappingCollection_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDynamicPortMappingCollection, 0xb60de00f, 0x156e, 0x4e8d, 0x9e,0xc1, 0x3a,0x23,0x42,0xc1,0x08,0x99);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b60de00f-156e-4e8d-9ec1-3a2342c10899")
IDynamicPortMappingCollection : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Item(
        BSTR host,
        LONG port,
        BSTR orotocol,
        IDynamicPortMapping **mapping) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE Remove(
        BSTR host,
        LONG port,
        BSTR protocol) = 0;

    virtual HRESULT STDMETHODCALLTYPE Add(
        BSTR host,
        LONG port,
        BSTR protocol,
        LONG internal,
        BSTR client,
        VARIANT_BOOL enabled,
        BSTR Description,
        LONG duration,
        IDynamicPortMapping **mapping) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDynamicPortMappingCollection, 0xb60de00f, 0x156e, 0x4e8d, 0x9e,0xc1, 0x3a,0x23,0x42,0xc1,0x08,0x99)
#endif
#else
typedef struct IDynamicPortMappingCollectionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDynamicPortMappingCollection *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDynamicPortMappingCollection *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDynamicPortMappingCollection *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IDynamicPortMappingCollection *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IDynamicPortMappingCollection *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IDynamicPortMappingCollection *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IDynamicPortMappingCollection *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** IDynamicPortMappingCollection methods ***/
    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        IDynamicPortMappingCollection *This,
        IUnknown **value);

    HRESULT (STDMETHODCALLTYPE *get_Item)(
        IDynamicPortMappingCollection *This,
        BSTR host,
        LONG port,
        BSTR orotocol,
        IDynamicPortMapping **mapping);

    HRESULT (STDMETHODCALLTYPE *get_Count)(
        IDynamicPortMappingCollection *This,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *Remove)(
        IDynamicPortMappingCollection *This,
        BSTR host,
        LONG port,
        BSTR protocol);

    HRESULT (STDMETHODCALLTYPE *Add)(
        IDynamicPortMappingCollection *This,
        BSTR host,
        LONG port,
        BSTR protocol,
        LONG internal,
        BSTR client,
        VARIANT_BOOL enabled,
        BSTR Description,
        LONG duration,
        IDynamicPortMapping **mapping);

    END_INTERFACE
} IDynamicPortMappingCollectionVtbl;

interface IDynamicPortMappingCollection {
    CONST_VTBL IDynamicPortMappingCollectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDynamicPortMappingCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDynamicPortMappingCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDynamicPortMappingCollection_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define IDynamicPortMappingCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IDynamicPortMappingCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IDynamicPortMappingCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IDynamicPortMappingCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** IDynamicPortMappingCollection methods ***/
#define IDynamicPortMappingCollection_get__NewEnum(This,value) (This)->lpVtbl->get__NewEnum(This,value)
#define IDynamicPortMappingCollection_get_Item(This,host,port,orotocol,mapping) (This)->lpVtbl->get_Item(This,host,port,orotocol,mapping)
#define IDynamicPortMappingCollection_get_Count(This,value) (This)->lpVtbl->get_Count(This,value)
#define IDynamicPortMappingCollection_Remove(This,host,port,protocol) (This)->lpVtbl->Remove(This,host,port,protocol)
#define IDynamicPortMappingCollection_Add(This,host,port,protocol,internal,client,enabled,Description,duration,mapping) (This)->lpVtbl->Add(This,host,port,protocol,internal,client,enabled,Description,duration,mapping)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_QueryInterface(IDynamicPortMappingCollection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IDynamicPortMappingCollection_AddRef(IDynamicPortMappingCollection* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IDynamicPortMappingCollection_Release(IDynamicPortMappingCollection* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_GetTypeInfoCount(IDynamicPortMappingCollection* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_GetTypeInfo(IDynamicPortMappingCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_GetIDsOfNames(IDynamicPortMappingCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_Invoke(IDynamicPortMappingCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** IDynamicPortMappingCollection methods ***/
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_get__NewEnum(IDynamicPortMappingCollection* This,IUnknown **value) {
    return This->lpVtbl->get__NewEnum(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_get_Item(IDynamicPortMappingCollection* This,BSTR host,LONG port,BSTR orotocol,IDynamicPortMapping **mapping) {
    return This->lpVtbl->get_Item(This,host,port,orotocol,mapping);
}
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_get_Count(IDynamicPortMappingCollection* This,LONG *value) {
    return This->lpVtbl->get_Count(This,value);
}
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_Remove(IDynamicPortMappingCollection* This,BSTR host,LONG port,BSTR protocol) {
    return This->lpVtbl->Remove(This,host,port,protocol);
}
static __WIDL_INLINE HRESULT IDynamicPortMappingCollection_Add(IDynamicPortMappingCollection* This,BSTR host,LONG port,BSTR protocol,LONG internal,BSTR client,VARIANT_BOOL enabled,BSTR Description,LONG duration,IDynamicPortMapping **mapping) {
    return This->lpVtbl->Add(This,host,port,protocol,internal,client,enabled,Description,duration,mapping);
}
#endif
#endif

#endif


#endif  /* __IDynamicPortMappingCollection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * INATEventManager interface
 */
#ifndef __INATEventManager_INTERFACE_DEFINED__
#define __INATEventManager_INTERFACE_DEFINED__

DEFINE_GUID(IID_INATEventManager, 0x624bd588, 0x9060, 0x4109, 0xb0,0xb0, 0x1a,0xdb,0xbc,0xac,0x32,0xdf);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("624bd588-9060-4109-b0b0-1adbbcac32df")
INATEventManager : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE put_ExternalIPAddressCallback(
        IUnknown *unk) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_NumberOfEntriesCallback(
        IUnknown *unk) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(INATEventManager, 0x624bd588, 0x9060, 0x4109, 0xb0,0xb0, 0x1a,0xdb,0xbc,0xac,0x32,0xdf)
#endif
#else
typedef struct INATEventManagerVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        INATEventManager *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        INATEventManager *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        INATEventManager *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        INATEventManager *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        INATEventManager *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        INATEventManager *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        INATEventManager *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** INATEventManager methods ***/
    HRESULT (STDMETHODCALLTYPE *put_ExternalIPAddressCallback)(
        INATEventManager *This,
        IUnknown *unk);

    HRESULT (STDMETHODCALLTYPE *put_NumberOfEntriesCallback)(
        INATEventManager *This,
        IUnknown *unk);

    END_INTERFACE
} INATEventManagerVtbl;

interface INATEventManager {
    CONST_VTBL INATEventManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define INATEventManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define INATEventManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define INATEventManager_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define INATEventManager_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define INATEventManager_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define INATEventManager_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define INATEventManager_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** INATEventManager methods ***/
#define INATEventManager_put_ExternalIPAddressCallback(This,unk) (This)->lpVtbl->put_ExternalIPAddressCallback(This,unk)
#define INATEventManager_put_NumberOfEntriesCallback(This,unk) (This)->lpVtbl->put_NumberOfEntriesCallback(This,unk)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT INATEventManager_QueryInterface(INATEventManager* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG INATEventManager_AddRef(INATEventManager* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG INATEventManager_Release(INATEventManager* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT INATEventManager_GetTypeInfoCount(INATEventManager* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT INATEventManager_GetTypeInfo(INATEventManager* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT INATEventManager_GetIDsOfNames(INATEventManager* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT INATEventManager_Invoke(INATEventManager* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** INATEventManager methods ***/
static __WIDL_INLINE HRESULT INATEventManager_put_ExternalIPAddressCallback(INATEventManager* This,IUnknown *unk) {
    return This->lpVtbl->put_ExternalIPAddressCallback(This,unk);
}
static __WIDL_INLINE HRESULT INATEventManager_put_NumberOfEntriesCallback(INATEventManager* This,IUnknown *unk) {
    return This->lpVtbl->put_NumberOfEntriesCallback(This,unk);
}
#endif
#endif

#endif


#endif  /* __INATEventManager_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IUPnPNAT interface
 */
#ifndef __IUPnPNAT_INTERFACE_DEFINED__
#define __IUPnPNAT_INTERFACE_DEFINED__

DEFINE_GUID(IID_IUPnPNAT, 0xb171c812, 0xcc76, 0x485a, 0x94,0xd8, 0xb6,0xb3,0xa2,0x79,0x4e,0x99);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b171c812-cc76-485a-94d8-b6b3a2794e99")
IUPnPNAT : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_StaticPortMappingCollection(
        IStaticPortMappingCollection **collection) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DynamicPortMappingCollection(
        IDynamicPortMappingCollection **collection) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NATEventManager(
        INATEventManager **manager) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IUPnPNAT, 0xb171c812, 0xcc76, 0x485a, 0x94,0xd8, 0xb6,0xb3,0xa2,0x79,0x4e,0x99)
#endif
#else
typedef struct IUPnPNATVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IUPnPNAT *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IUPnPNAT *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IUPnPNAT *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IUPnPNAT *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IUPnPNAT *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IUPnPNAT *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IUPnPNAT *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** IUPnPNAT methods ***/
    HRESULT (STDMETHODCALLTYPE *get_StaticPortMappingCollection)(
        IUPnPNAT *This,
        IStaticPortMappingCollection **collection);

    HRESULT (STDMETHODCALLTYPE *get_DynamicPortMappingCollection)(
        IUPnPNAT *This,
        IDynamicPortMappingCollection **collection);

    HRESULT (STDMETHODCALLTYPE *get_NATEventManager)(
        IUPnPNAT *This,
        INATEventManager **manager);

    END_INTERFACE
} IUPnPNATVtbl;

interface IUPnPNAT {
    CONST_VTBL IUPnPNATVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IUPnPNAT_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IUPnPNAT_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IUPnPNAT_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define IUPnPNAT_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IUPnPNAT_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IUPnPNAT_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IUPnPNAT_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** IUPnPNAT methods ***/
#define IUPnPNAT_get_StaticPortMappingCollection(This,collection) (This)->lpVtbl->get_StaticPortMappingCollection(This,collection)
#define IUPnPNAT_get_DynamicPortMappingCollection(This,collection) (This)->lpVtbl->get_DynamicPortMappingCollection(This,collection)
#define IUPnPNAT_get_NATEventManager(This,manager) (This)->lpVtbl->get_NATEventManager(This,manager)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IUPnPNAT_QueryInterface(IUPnPNAT* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IUPnPNAT_AddRef(IUPnPNAT* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IUPnPNAT_Release(IUPnPNAT* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT IUPnPNAT_GetTypeInfoCount(IUPnPNAT* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT IUPnPNAT_GetTypeInfo(IUPnPNAT* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT IUPnPNAT_GetIDsOfNames(IUPnPNAT* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT IUPnPNAT_Invoke(IUPnPNAT* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** IUPnPNAT methods ***/
static __WIDL_INLINE HRESULT IUPnPNAT_get_StaticPortMappingCollection(IUPnPNAT* This,IStaticPortMappingCollection **collection) {
    return This->lpVtbl->get_StaticPortMappingCollection(This,collection);
}
static __WIDL_INLINE HRESULT IUPnPNAT_get_DynamicPortMappingCollection(IUPnPNAT* This,IDynamicPortMappingCollection **collection) {
    return This->lpVtbl->get_DynamicPortMappingCollection(This,collection);
}
static __WIDL_INLINE HRESULT IUPnPNAT_get_NATEventManager(IUPnPNAT* This,INATEventManager **manager) {
    return This->lpVtbl->get_NATEventManager(This,manager);
}
#endif
#endif

#endif


#endif  /* __IUPnPNAT_INTERFACE_DEFINED__ */

#ifndef __NATUPNPLib_LIBRARY_DEFINED__
#define __NATUPNPLib_LIBRARY_DEFINED__

DEFINE_GUID(LIBID_NATUPNPLib, 0x1c565858, 0xf302, 0x471e, 0xb4,0x09, 0xf1,0x80,0xaa,0x4a,0xbe,0xc6);

/*****************************************************************************
 * UPnPNAT coclass
 */

DEFINE_GUID(CLSID_UPnPNAT, 0xae1e00aa, 0x3fd5, 0x403c, 0x8a,0x27, 0x2b,0xbd,0xc3,0x0c,0xd0,0xe1);

#ifdef __cplusplus
class DECLSPEC_UUID("ae1e00aa-3fd5-403c-8a27-2bbdc30cd0e1") UPnPNAT;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(UPnPNAT, 0xae1e00aa, 0x3fd5, 0x403c, 0x8a,0x27, 0x2b,0xbd,0xc3,0x0c,0xd0,0xe1)
#endif
#endif

#endif /* __NATUPNPLib_LIBRARY_DEFINED__ */
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __natupnp_h__ */
