/*** Autogenerated by WIDL 1.1.36 from urlmon.idl - Do not edit ***/

#include <rpc.h>
#include <rpcndr.h>

#ifndef __WIDL_URLMON_H
#define __WIDL_URLMON_H

#ifdef __cplusplus
extern "C" {
#endif

/* Headers for imported files */

#include <objidl.h>
#include <oleidl.h>
#include <servprov.h>
#include <msxml.h>

/* Forward declarations */

#ifndef __IInternet_FWD_DEFINED__
#define __IInternet_FWD_DEFINED__
typedef interface IInternet IInternet;
#endif

#ifndef __IBinding_FWD_DEFINED__
#define __IBinding_FWD_DEFINED__
typedef interface IBinding IBinding;
#endif

#ifndef __IBindStatusCallback_FWD_DEFINED__
#define __IBindStatusCallback_FWD_DEFINED__
typedef interface IBindStatusCallback IBindStatusCallback;
#endif

#ifndef __IBindStatusCallbackEx_FWD_DEFINED__
#define __IBindStatusCallbackEx_FWD_DEFINED__
typedef interface IBindStatusCallbackEx IBindStatusCallbackEx;
#endif

#ifndef __IAuthenticate_FWD_DEFINED__
#define __IAuthenticate_FWD_DEFINED__
typedef interface IAuthenticate IAuthenticate;
#endif

#ifndef __IHttpNegotiate_FWD_DEFINED__
#define __IHttpNegotiate_FWD_DEFINED__
typedef interface IHttpNegotiate IHttpNegotiate;
#endif

#ifndef __IHttpNegotiate2_FWD_DEFINED__
#define __IHttpNegotiate2_FWD_DEFINED__
typedef interface IHttpNegotiate2 IHttpNegotiate2;
#endif

#ifndef __IBindHost_FWD_DEFINED__
#define __IBindHost_FWD_DEFINED__
typedef interface IBindHost IBindHost;
#endif

#ifndef __IWinInetInfo_FWD_DEFINED__
#define __IWinInetInfo_FWD_DEFINED__
typedef interface IWinInetInfo IWinInetInfo;
#endif

#ifndef __IWinInetHttpInfo_FWD_DEFINED__
#define __IWinInetHttpInfo_FWD_DEFINED__
typedef interface IWinInetHttpInfo IWinInetHttpInfo;
#endif

#ifndef __IWindowForBindingUI_FWD_DEFINED__
#define __IWindowForBindingUI_FWD_DEFINED__
typedef interface IWindowForBindingUI IWindowForBindingUI;
#endif

#ifndef __IHttpSecurity_FWD_DEFINED__
#define __IHttpSecurity_FWD_DEFINED__
typedef interface IHttpSecurity IHttpSecurity;
#endif

#ifndef __IPersistMoniker_FWD_DEFINED__
#define __IPersistMoniker_FWD_DEFINED__
typedef interface IPersistMoniker IPersistMoniker;
#endif

#ifndef __IMonikerProp_FWD_DEFINED__
#define __IMonikerProp_FWD_DEFINED__
typedef interface IMonikerProp IMonikerProp;
#endif

#ifndef __IBindProtocol_FWD_DEFINED__
#define __IBindProtocol_FWD_DEFINED__
typedef interface IBindProtocol IBindProtocol;
#endif

#ifndef __IInternetBindInfo_FWD_DEFINED__
#define __IInternetBindInfo_FWD_DEFINED__
typedef interface IInternetBindInfo IInternetBindInfo;
#endif

#ifndef __IInternetPriority_FWD_DEFINED__
#define __IInternetPriority_FWD_DEFINED__
typedef interface IInternetPriority IInternetPriority;
#endif

#ifndef __IInternetProtocolRoot_FWD_DEFINED__
#define __IInternetProtocolRoot_FWD_DEFINED__
typedef interface IInternetProtocolRoot IInternetProtocolRoot;
#endif

#ifndef __IInternetProtocolSink_FWD_DEFINED__
#define __IInternetProtocolSink_FWD_DEFINED__
typedef interface IInternetProtocolSink IInternetProtocolSink;
#endif

#ifndef __IInternetProtocol_FWD_DEFINED__
#define __IInternetProtocol_FWD_DEFINED__
typedef interface IInternetProtocol IInternetProtocol;
#endif

#ifndef __IInternetProtocolInfo_FWD_DEFINED__
#define __IInternetProtocolInfo_FWD_DEFINED__
typedef interface IInternetProtocolInfo IInternetProtocolInfo;
#endif

#ifndef __IInternetSession_FWD_DEFINED__
#define __IInternetSession_FWD_DEFINED__
typedef interface IInternetSession IInternetSession;
#endif

#ifndef __IInternetSecurityMgrSite_FWD_DEFINED__
#define __IInternetSecurityMgrSite_FWD_DEFINED__
typedef interface IInternetSecurityMgrSite IInternetSecurityMgrSite;
#endif

#ifndef __IInternetSecurityManager_FWD_DEFINED__
#define __IInternetSecurityManager_FWD_DEFINED__
typedef interface IInternetSecurityManager IInternetSecurityManager;
#endif

#ifndef __IInternetHostSecurityManager_FWD_DEFINED__
#define __IInternetHostSecurityManager_FWD_DEFINED__
typedef interface IInternetHostSecurityManager IInternetHostSecurityManager;
#endif

#ifndef __IInternetZoneManager_FWD_DEFINED__
#define __IInternetZoneManager_FWD_DEFINED__
typedef interface IInternetZoneManager IInternetZoneManager;
#endif

#ifndef __IInternetZoneManagerEx_FWD_DEFINED__
#define __IInternetZoneManagerEx_FWD_DEFINED__
typedef interface IInternetZoneManagerEx IInternetZoneManagerEx;
#endif

#ifndef __IInternetZoneManagerEx2_FWD_DEFINED__
#define __IInternetZoneManagerEx2_FWD_DEFINED__
typedef interface IInternetZoneManagerEx2 IInternetZoneManagerEx2;
#endif

#ifndef __ISoftDistExt_FWD_DEFINED__
#define __ISoftDistExt_FWD_DEFINED__
typedef interface ISoftDistExt ISoftDistExt;
#endif

#ifndef __IUri_FWD_DEFINED__
#define __IUri_FWD_DEFINED__
typedef interface IUri IUri;
#endif

#ifndef __IUriContainer_FWD_DEFINED__
#define __IUriContainer_FWD_DEFINED__
typedef interface IUriContainer IUriContainer;
#endif

#ifndef __IInternetProtocolEx_FWD_DEFINED__
#define __IInternetProtocolEx_FWD_DEFINED__
typedef interface IInternetProtocolEx IInternetProtocolEx;
#endif


#ifdef WINE_NO_UNICODE_MACROS
#undef GetUserName
#endif
#ifndef __IInternetProtocolSink_FWD_DEFINED__
#define __IInternetProtocolSink_FWD_DEFINED__
typedef interface IInternetProtocolSink IInternetProtocolSink;
#endif

/*****************************************************************************
 * IInternet interface
 */
#ifndef __IInternet_INTERFACE_DEFINED__
#define __IInternet_INTERFACE_DEFINED__

typedef IInternet *LPIINTERNET;
DEFINE_GUID(IID_IInternet, 0x79eac9e0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternet : public IUnknown
{
};
#else
typedef struct IInternetVtbl {
    BEGIN_INTERFACE

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

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

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

    END_INTERFACE
} IInternetVtbl;
interface IInternet {
    CONST_VTBL IInternetVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternet_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IInternet_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IBinding interface
 */
#ifndef __IBinding_INTERFACE_DEFINED__
#define __IBinding_INTERFACE_DEFINED__

typedef IBinding *LPBINDING;
DEFINE_GUID(IID_IBinding, 0x79eac9c0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IBinding : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Abort(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Suspend(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPriority(
        LONG nPriority) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPriority(
        LONG *pnPriority) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBindResult(
        CLSID *pclsidProtocol,
        DWORD *pdwResult,
        LPOLESTR *pszResult,
        DWORD *pdwReserved) = 0;

};
#else
typedef struct IBindingVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IBinding methods ***/
    HRESULT (STDMETHODCALLTYPE *Abort)(
        IBinding* This);

    HRESULT (STDMETHODCALLTYPE *Suspend)(
        IBinding* This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IBinding* This);

    HRESULT (STDMETHODCALLTYPE *SetPriority)(
        IBinding* This,
        LONG nPriority);

    HRESULT (STDMETHODCALLTYPE *GetPriority)(
        IBinding* This,
        LONG *pnPriority);

    HRESULT (STDMETHODCALLTYPE *GetBindResult)(
        IBinding* This,
        CLSID *pclsidProtocol,
        DWORD *pdwResult,
        LPOLESTR *pszResult,
        DWORD *pdwReserved);

    END_INTERFACE
} IBindingVtbl;
interface IBinding {
    CONST_VTBL IBindingVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IBinding_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IBinding_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IBinding_Release(This) (This)->lpVtbl->Release(This)
/*** IBinding methods ***/
#define IBinding_Abort(This) (This)->lpVtbl->Abort(This)
#define IBinding_Suspend(This) (This)->lpVtbl->Suspend(This)
#define IBinding_Resume(This) (This)->lpVtbl->Resume(This)
#define IBinding_SetPriority(This,nPriority) (This)->lpVtbl->SetPriority(This,nPriority)
#define IBinding_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
#define IBinding_GetBindResult(This,pclsidProtocol,pdwResult,pszResult,pdwReserved) (This)->lpVtbl->GetBindResult(This,pclsidProtocol,pdwResult,pszResult,pdwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IBinding_Abort_Proxy(
    IBinding* This);
void __RPC_STUB IBinding_Abort_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBinding_Suspend_Proxy(
    IBinding* This);
void __RPC_STUB IBinding_Suspend_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBinding_Resume_Proxy(
    IBinding* This);
void __RPC_STUB IBinding_Resume_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBinding_SetPriority_Proxy(
    IBinding* This,
    LONG nPriority);
void __RPC_STUB IBinding_SetPriority_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBinding_GetPriority_Proxy(
    IBinding* This,
    LONG *pnPriority);
void __RPC_STUB IBinding_GetPriority_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBinding_RemoteGetBindResult_Proxy(
    IBinding* This,
    CLSID *pclsidProtocol,
    DWORD *pdwResult,
    LPOLESTR *pszResult,
    DWORD dwReserved);
void __RPC_STUB IBinding_RemoteGetBindResult_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IBinding_GetBindResult_Proxy(
    IBinding* This,
    CLSID *pclsidProtocol,
    DWORD *pdwResult,
    LPOLESTR *pszResult,
    DWORD *pdwReserved);
HRESULT __RPC_STUB IBinding_GetBindResult_Stub(
    IBinding* This,
    CLSID *pclsidProtocol,
    DWORD *pdwResult,
    LPOLESTR *pszResult,
    DWORD dwReserved);

#endif  /* __IBinding_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IBindStatusCallback interface
 */
#ifndef __IBindStatusCallback_INTERFACE_DEFINED__
#define __IBindStatusCallback_INTERFACE_DEFINED__

typedef IBindStatusCallback *LPBINDSTATUSCALLBACK;
typedef enum __WIDL_urlmon_generated_name_00000000 {
    BINDVERB_GET = 0x0,
    BINDVERB_POST = 0x1,
    BINDVERB_PUT = 0x2,
    BINDVERB_CUSTOM = 0x3
} BINDVERB;
typedef enum __WIDL_urlmon_generated_name_00000001 {
    BINDINFOF_URLENCODESTGMEDDATA = 0x1,
    BINDINFOF_URLENCODEDEXTRAINFO = 0x2
} BINDINFOF;
typedef enum __WIDL_urlmon_generated_name_00000002 {
    BINDF_ASYNCHRONOUS = 0x1,
    BINDF_ASYNCSTORAGE = 0x2,
    BINDF_NOPROGRESSIVERENDERING = 0x4,
    BINDF_OFFLINEOPERATION = 0x8,
    BINDF_GETNEWESTVERSION = 0x10,
    BINDF_NOWRITECACHE = 0x20,
    BINDF_NEEDFILE = 0x40,
    BINDF_PULLDATA = 0x80,
    BINDF_IGNORESECURITYPROBLEM = 0x100,
    BINDF_RESYNCHRONIZE = 0x200,
    BINDF_HYPERLINK = 0x400,
    BINDF_NO_UI = 0x800,
    BINDF_SILENTOPERATION = 0x1000,
    BINDF_PRAGMA_NO_CACHE = 0x2000,
    BINDF_GETCLASSOBJECT = 0x4000,
    BINDF_RESERVED_1 = 0x8000,
    BINDF_FREE_THREADED = 0x10000,
    BINDF_DIRECT_READ = 0x20000,
    BINDF_FORMS_SUBMIT = 0x40000,
    BINDF_GETFROMCACHE_IF_NET_FAIL = 0x80000,
    BINDF_FROMURLMON = 0x100000,
    BINDF_FWD_BACK = 0x200000,
    BINDF_PREFERDEFAULTHANDLER = 0x400000,
    BINDF_ENFORCERESTRICTED = 0x800000
} BINDF;
typedef enum __WIDL_urlmon_generated_name_00000003 {
    URL_ENCODING_NONE = 0x0,
    URL_ENCODING_ENABLE_UTF8 = 0x10000000,
    URL_ENCODING_DISABLE_UTF8 = 0x20000000
} URL_ENCODING;
typedef struct _tagBINDINFO {
    ULONG cbSize;
    LPWSTR szExtraInfo;
    STGMEDIUM stgmedData;
    DWORD grfBindInfoF;
    DWORD dwBindVerb;
    LPWSTR szCustomVerb;
    DWORD cbstgmedData;
    DWORD dwOptions;
    DWORD dwOptionsFlags;
    DWORD dwCodePage;
    SECURITY_ATTRIBUTES securityAttributes;
    IID iid;
    IUnknown *pUnk;
    DWORD dwReserved;
} BINDINFO;
typedef struct _REMSECURITY_ATTRIBUTES {
    DWORD nLength;
    DWORD lpSecurityDescriptor;
    BOOL bInheritHandle;
} REMSECURITY_ATTRIBUTES;
typedef struct _REMSECURITY_ATTRIBUTES *PREMSECURITY_ATTRIBUTES;
typedef struct _REMSECURITY_ATTRIBUTES *LPREMSECURITY_ATTRIBUTES;
typedef struct _tagRemBINDINFO {
    ULONG cbSize;
    LPWSTR szExtraInfo;
    DWORD grfBindInfoF;
    DWORD dwBindVerb;
    LPWSTR szCustomVerb;
    DWORD cbstgmedData;
    DWORD dwOptions;
    DWORD dwOptionsFlags;
    DWORD dwCodePage;
    REMSECURITY_ATTRIBUTES securityAttributes;
    IID iid;
    IUnknown *pUnk;
    DWORD dwReserved;
} RemBINDINFO;
typedef struct tagRemFORMATETC {
    DWORD cfFormat;
    DWORD ptd;
    DWORD dwAspect;
    LONG lindex;
    DWORD tymed;
} RemFORMATETC;
typedef struct tagRemFORMATETC *LPREMFORMATETC;
typedef enum __WIDL_urlmon_generated_name_00000004 {
    BSCF_FIRSTDATANOTIFICATION = 0x1,
    BSCF_INTERMEDIATEDATANOTIFICATION = 0x2,
    BSCF_LASTDATANOTIFICATION = 0x4,
    BSCF_DATAFULLYAVAILABLE = 0x8,
    BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10,
    BSCF_SKIPDRAINDATAFORFILEURLS = 0x20,
    BSCF_64BITLENGTHDOWNLOAD = 0x40
} BSCF;
typedef enum BINDSTATUS {
    BINDSTATUS_FINDINGRESOURCE = 1,
    BINDSTATUS_CONNECTING = 2,
    BINDSTATUS_REDIRECTING = 3,
    BINDSTATUS_BEGINDOWNLOADDATA = 4,
    BINDSTATUS_DOWNLOADINGDATA = 5,
    BINDSTATUS_ENDDOWNLOADDATA = 6,
    BINDSTATUS_BEGINDOWNLOADCOMPONENTS = 7,
    BINDSTATUS_INSTALLINGCOMPONENTS = 8,
    BINDSTATUS_ENDDOWNLOADCOMPONENTS = 9,
    BINDSTATUS_USINGCACHEDCOPY = 10,
    BINDSTATUS_SENDINGREQUEST = 11,
    BINDSTATUS_CLASSIDAVAILABLE = 12,
    BINDSTATUS_MIMETYPEAVAILABLE = 13,
    BINDSTATUS_CACHEFILENAMEAVAILABLE = 14,
    BINDSTATUS_BEGINSYNCOPERATION = 15,
    BINDSTATUS_ENDSYNCOPERATION = 16,
    BINDSTATUS_BEGINUPLOADDATA = 17,
    BINDSTATUS_UPLOADINGDATA = 18,
    BINDSTATUS_ENDUPLOADINGDATA = 19,
    BINDSTATUS_PROTOCOLCLASSID = 20,
    BINDSTATUS_ENCODING = 21,
    BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE = 22,
    BINDSTATUS_CLASSINSTALLLOCATION = 23,
    BINDSTATUS_DECODING = 24,
    BINDSTATUS_LOADINGMIMEHANDLER = 25,
    BINDSTATUS_CONTENTDISPOSITIONATTACH = 26,
    BINDSTATUS_FILTERREPORTMIMETYPE = 27,
    BINDSTATUS_CLSIDCANINSTANTIATE = 28,
    BINDSTATUS_IUNKNOWNAVAILABLE = 29,
    BINDSTATUS_DIRECTBIND = 30,
    BINDSTATUS_RAWMIMETYPE = 31,
    BINDSTATUS_PROXYDETECTING = 32,
    BINDSTATUS_ACCEPTRANGES = 33,
    BINDSTATUS_COOKIE_SENT = 34,
    BINDSTATUS_COMPACT_POLICY_RECEIVED = 35,
    BINDSTATUS_COOKIE_SUPPRESSED = 36,
    BINDSTATUS_COOKIE_STATE_UNKNOWN = 37,
    BINDSTATUS_COOKIE_STATE_ACCEPT = 38,
    BINDSTATUS_COOKIE_STATE_REJECT = 39,
    BINDSTATUS_COOKIE_STATE_PROMPT = 40,
    BINDSTATUS_COOKIE_STATE_LEASH = 41,
    BINDSTATUS_COOKIE_STATE_DOWNGRADE = 42,
    BINDSTATUS_POLICY_HREF = 43,
    BINDSTATUS_P3P_HEADER = 44,
    BINDSTATUS_SESSION_COOKIE_RECEIVED = 45,
    BINDSTATUS_PERSISTENT_COOKIE_RECEIVED = 46,
    BINDSTATUS_SESSION_COOKIES_ALLOWED = 47,
    BINDSTATUS_CACHECONTROL = 48,
    BINDSTATUS_CONTENTDISPOSITIONFILENAME = 49,
    BINDSTATUS_MIMETEXTPLAINMISMATCH = 50,
    BINDSTATUS_PUBLISHERAVAILABLE = 51,
    BINDSTATUS_DISPLAYNAMEAVAILABLE = 52
} BINDSTATUS;
DEFINE_GUID(IID_IBindStatusCallback, 0x79eac9c1, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IBindStatusCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnStartBinding(
        DWORD dwReserved,
        IBinding *pib) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPriority(
        LONG *pnPriority) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnLowResource(
        DWORD reserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnProgress(
        ULONG ulProgress,
        ULONG ulProgressMax,
        ULONG ulStatusCode,
        LPCWSTR szStatusText) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnStopBinding(
        HRESULT hresult,
        LPCWSTR szError) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBindInfo(
        DWORD *grfBINDF,
        BINDINFO *pbindinfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnDataAvailable(
        DWORD grfBSCF,
        DWORD dwSize,
        FORMATETC *pformatetc,
        STGMEDIUM *pstgmed) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnObjectAvailable(
        REFIID riid,
        IUnknown *punk) = 0;

};
#else
typedef struct IBindStatusCallbackVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IBindStatusCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnStartBinding)(
        IBindStatusCallback* This,
        DWORD dwReserved,
        IBinding *pib);

    HRESULT (STDMETHODCALLTYPE *GetPriority)(
        IBindStatusCallback* This,
        LONG *pnPriority);

    HRESULT (STDMETHODCALLTYPE *OnLowResource)(
        IBindStatusCallback* This,
        DWORD reserved);

    HRESULT (STDMETHODCALLTYPE *OnProgress)(
        IBindStatusCallback* This,
        ULONG ulProgress,
        ULONG ulProgressMax,
        ULONG ulStatusCode,
        LPCWSTR szStatusText);

    HRESULT (STDMETHODCALLTYPE *OnStopBinding)(
        IBindStatusCallback* This,
        HRESULT hresult,
        LPCWSTR szError);

    HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
        IBindStatusCallback* This,
        DWORD *grfBINDF,
        BINDINFO *pbindinfo);

    HRESULT (STDMETHODCALLTYPE *OnDataAvailable)(
        IBindStatusCallback* This,
        DWORD grfBSCF,
        DWORD dwSize,
        FORMATETC *pformatetc,
        STGMEDIUM *pstgmed);

    HRESULT (STDMETHODCALLTYPE *OnObjectAvailable)(
        IBindStatusCallback* This,
        REFIID riid,
        IUnknown *punk);

    END_INTERFACE
} IBindStatusCallbackVtbl;
interface IBindStatusCallback {
    CONST_VTBL IBindStatusCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IBindStatusCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IBindStatusCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IBindStatusCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IBindStatusCallback methods ***/
#define IBindStatusCallback_OnStartBinding(This,dwReserved,pib) (This)->lpVtbl->OnStartBinding(This,dwReserved,pib)
#define IBindStatusCallback_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
#define IBindStatusCallback_OnLowResource(This,reserved) (This)->lpVtbl->OnLowResource(This,reserved)
#define IBindStatusCallback_OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText) (This)->lpVtbl->OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText)
#define IBindStatusCallback_OnStopBinding(This,hresult,szError) (This)->lpVtbl->OnStopBinding(This,hresult,szError)
#define IBindStatusCallback_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
#define IBindStatusCallback_OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed) (This)->lpVtbl->OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed)
#define IBindStatusCallback_OnObjectAvailable(This,riid,punk) (This)->lpVtbl->OnObjectAvailable(This,riid,punk)
#endif

#endif

HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnStartBinding_Proxy(
    IBindStatusCallback* This,
    DWORD dwReserved,
    IBinding *pib);
void __RPC_STUB IBindStatusCallback_OnStartBinding_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindStatusCallback_GetPriority_Proxy(
    IBindStatusCallback* This,
    LONG *pnPriority);
void __RPC_STUB IBindStatusCallback_GetPriority_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnLowResource_Proxy(
    IBindStatusCallback* This,
    DWORD reserved);
void __RPC_STUB IBindStatusCallback_OnLowResource_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnProgress_Proxy(
    IBindStatusCallback* This,
    ULONG ulProgress,
    ULONG ulProgressMax,
    ULONG ulStatusCode,
    LPCWSTR szStatusText);
void __RPC_STUB IBindStatusCallback_OnProgress_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnStopBinding_Proxy(
    IBindStatusCallback* This,
    HRESULT hresult,
    LPCWSTR szError);
void __RPC_STUB IBindStatusCallback_OnStopBinding_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindStatusCallback_RemoteGetBindInfo_Proxy(
    IBindStatusCallback* This,
    DWORD *grfBINDF,
    RemBINDINFO *pbindinfo,
    RemSTGMEDIUM *pstgmed);
void __RPC_STUB IBindStatusCallback_RemoteGetBindInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindStatusCallback_RemoteOnDataAvailable_Proxy(
    IBindStatusCallback* This,
    DWORD grfBSCF,
    DWORD dwSize,
    RemFORMATETC *pformatetc,
    RemSTGMEDIUM *pstgmed);
void __RPC_STUB IBindStatusCallback_RemoteOnDataAvailable_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnObjectAvailable_Proxy(
    IBindStatusCallback* This,
    REFIID riid,
    IUnknown *punk);
void __RPC_STUB IBindStatusCallback_OnObjectAvailable_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
    IBindStatusCallback* This,
    DWORD *grfBINDF,
    BINDINFO *pbindinfo);
HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub(
    IBindStatusCallback* This,
    DWORD *grfBINDF,
    RemBINDINFO *pbindinfo,
    RemSTGMEDIUM *pstgmed);
HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
    IBindStatusCallback* This,
    DWORD grfBSCF,
    DWORD dwSize,
    FORMATETC *pformatetc,
    STGMEDIUM *pstgmed);
HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub(
    IBindStatusCallback* This,
    DWORD grfBSCF,
    DWORD dwSize,
    RemFORMATETC *pformatetc,
    RemSTGMEDIUM *pstgmed);

#endif  /* __IBindStatusCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IBindStatusCallbackEx interface
 */
#ifndef __IBindStatusCallbackEx_INTERFACE_DEFINED__
#define __IBindStatusCallbackEx_INTERFACE_DEFINED__

typedef IBindStatusCallbackEx *LPBINDSTATUSCALLBACKEX;
typedef enum __WIDL_urlmon_generated_name_00000005 {
    BINDF2_DISABLEBASICOVERHTTP = 0x1,
    BINDF2_DISABLEAUTOCOOKIEHANDLING = 0x2,
    BINDF2_READ_DATA_GREATER_THAN_4GB = 0x4,
    BINDF2_DISABLE_HTTP_REDIRECT_XSECURITYID = 0x8,
    BINDF2_RESERVED_3 = 0x20000000,
    BINDF2_RESERVED_2 = 0x40000000,
    BINDF2_RESERVED_1 = 0x80000000
} BINDF2;
DEFINE_GUID(IID_IBindStatusCallbackEx, 0xaaa74ef9, 0x8ee7, 0x4659, 0x88,0xd9, 0xf8,0xc5,0x04,0xda,0x73,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IBindStatusCallbackEx : public IBindStatusCallback
{
    virtual HRESULT STDMETHODCALLTYPE GetBindInfoEx(
        DWORD *grfBINDF,
        BINDINFO *pbindinfo,
        DWORD *grfBINDF2,
        DWORD *pdwReserved) = 0;

};
#else
typedef struct IBindStatusCallbackExVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IBindStatusCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnStartBinding)(
        IBindStatusCallbackEx* This,
        DWORD dwReserved,
        IBinding *pib);

    HRESULT (STDMETHODCALLTYPE *GetPriority)(
        IBindStatusCallbackEx* This,
        LONG *pnPriority);

    HRESULT (STDMETHODCALLTYPE *OnLowResource)(
        IBindStatusCallbackEx* This,
        DWORD reserved);

    HRESULT (STDMETHODCALLTYPE *OnProgress)(
        IBindStatusCallbackEx* This,
        ULONG ulProgress,
        ULONG ulProgressMax,
        ULONG ulStatusCode,
        LPCWSTR szStatusText);

    HRESULT (STDMETHODCALLTYPE *OnStopBinding)(
        IBindStatusCallbackEx* This,
        HRESULT hresult,
        LPCWSTR szError);

    HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
        IBindStatusCallbackEx* This,
        DWORD *grfBINDF,
        BINDINFO *pbindinfo);

    HRESULT (STDMETHODCALLTYPE *OnDataAvailable)(
        IBindStatusCallbackEx* This,
        DWORD grfBSCF,
        DWORD dwSize,
        FORMATETC *pformatetc,
        STGMEDIUM *pstgmed);

    HRESULT (STDMETHODCALLTYPE *OnObjectAvailable)(
        IBindStatusCallbackEx* This,
        REFIID riid,
        IUnknown *punk);

    /*** IBindStatusCallbackEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetBindInfoEx)(
        IBindStatusCallbackEx* This,
        DWORD *grfBINDF,
        BINDINFO *pbindinfo,
        DWORD *grfBINDF2,
        DWORD *pdwReserved);

    END_INTERFACE
} IBindStatusCallbackExVtbl;
interface IBindStatusCallbackEx {
    CONST_VTBL IBindStatusCallbackExVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IBindStatusCallbackEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IBindStatusCallbackEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IBindStatusCallbackEx_Release(This) (This)->lpVtbl->Release(This)
/*** IBindStatusCallback methods ***/
#define IBindStatusCallbackEx_OnStartBinding(This,dwReserved,pib) (This)->lpVtbl->OnStartBinding(This,dwReserved,pib)
#define IBindStatusCallbackEx_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
#define IBindStatusCallbackEx_OnLowResource(This,reserved) (This)->lpVtbl->OnLowResource(This,reserved)
#define IBindStatusCallbackEx_OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText) (This)->lpVtbl->OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText)
#define IBindStatusCallbackEx_OnStopBinding(This,hresult,szError) (This)->lpVtbl->OnStopBinding(This,hresult,szError)
#define IBindStatusCallbackEx_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
#define IBindStatusCallbackEx_OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed) (This)->lpVtbl->OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed)
#define IBindStatusCallbackEx_OnObjectAvailable(This,riid,punk) (This)->lpVtbl->OnObjectAvailable(This,riid,punk)
/*** IBindStatusCallbackEx methods ***/
#define IBindStatusCallbackEx_GetBindInfoEx(This,grfBINDF,pbindinfo,grfBINDF2,pdwReserved) (This)->lpVtbl->GetBindInfoEx(This,grfBINDF,pbindinfo,grfBINDF2,pdwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IBindStatusCallbackEx_RemoteGetBindInfoEx_Proxy(
    IBindStatusCallbackEx* This,
    DWORD *grfBINDF,
    RemBINDINFO *pbindinfo,
    RemSTGMEDIUM *pstgmed,
    DWORD *grfBINDF2,
    DWORD *pdwReserved);
void __RPC_STUB IBindStatusCallbackEx_RemoteGetBindInfoEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy(
    IBindStatusCallbackEx* This,
    DWORD *grfBINDF,
    BINDINFO *pbindinfo,
    DWORD *grfBINDF2,
    DWORD *pdwReserved);
HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub(
    IBindStatusCallbackEx* This,
    DWORD *grfBINDF,
    RemBINDINFO *pbindinfo,
    RemSTGMEDIUM *pstgmed,
    DWORD *grfBINDF2,
    DWORD *pdwReserved);

#endif  /* __IBindStatusCallbackEx_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAuthenticate interface
 */
#ifndef __IAuthenticate_INTERFACE_DEFINED__
#define __IAuthenticate_INTERFACE_DEFINED__

typedef IAuthenticate *LPAUTHENTICATION;
DEFINE_GUID(IID_IAuthenticate, 0x79eac9d0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IAuthenticate : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Authenticate(
        HWND *phwnd,
        LPWSTR *pszUsername,
        LPWSTR *pszPassword) = 0;

};
#else
typedef struct IAuthenticateVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAuthenticate methods ***/
    HRESULT (STDMETHODCALLTYPE *Authenticate)(
        IAuthenticate* This,
        HWND *phwnd,
        LPWSTR *pszUsername,
        LPWSTR *pszPassword);

    END_INTERFACE
} IAuthenticateVtbl;
interface IAuthenticate {
    CONST_VTBL IAuthenticateVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IAuthenticate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAuthenticate_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAuthenticate_Release(This) (This)->lpVtbl->Release(This)
/*** IAuthenticate methods ***/
#define IAuthenticate_Authenticate(This,phwnd,pszUsername,pszPassword) (This)->lpVtbl->Authenticate(This,phwnd,pszUsername,pszPassword)
#endif

#endif

HRESULT STDMETHODCALLTYPE IAuthenticate_Authenticate_Proxy(
    IAuthenticate* This,
    HWND *phwnd,
    LPWSTR *pszUsername,
    LPWSTR *pszPassword);
void __RPC_STUB IAuthenticate_Authenticate_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IAuthenticate_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IHttpNegotiate interface
 */
#ifndef __IHttpNegotiate_INTERFACE_DEFINED__
#define __IHttpNegotiate_INTERFACE_DEFINED__

typedef IHttpNegotiate *LPHTTPNEGOTIATE;
DEFINE_GUID(IID_IHttpNegotiate, 0x79eac9d2, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IHttpNegotiate : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE BeginningTransaction(
        LPCWSTR szURL,
        LPCWSTR szHeaders,
        DWORD dwReserved,
        LPWSTR *pszAdditionalHeaders) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnResponse(
        DWORD dwResponseCode,
        LPCWSTR szResponseHeaders,
        LPCWSTR szRequestHeaders,
        LPWSTR *pszAdditionalRequestHeaders) = 0;

};
#else
typedef struct IHttpNegotiateVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IHttpNegotiate methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginningTransaction)(
        IHttpNegotiate* This,
        LPCWSTR szURL,
        LPCWSTR szHeaders,
        DWORD dwReserved,
        LPWSTR *pszAdditionalHeaders);

    HRESULT (STDMETHODCALLTYPE *OnResponse)(
        IHttpNegotiate* This,
        DWORD dwResponseCode,
        LPCWSTR szResponseHeaders,
        LPCWSTR szRequestHeaders,
        LPWSTR *pszAdditionalRequestHeaders);

    END_INTERFACE
} IHttpNegotiateVtbl;
interface IHttpNegotiate {
    CONST_VTBL IHttpNegotiateVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IHttpNegotiate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHttpNegotiate_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHttpNegotiate_Release(This) (This)->lpVtbl->Release(This)
/*** IHttpNegotiate methods ***/
#define IHttpNegotiate_BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders) (This)->lpVtbl->BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders)
#define IHttpNegotiate_OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders) (This)->lpVtbl->OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders)
#endif

#endif

HRESULT STDMETHODCALLTYPE IHttpNegotiate_BeginningTransaction_Proxy(
    IHttpNegotiate* This,
    LPCWSTR szURL,
    LPCWSTR szHeaders,
    DWORD dwReserved,
    LPWSTR *pszAdditionalHeaders);
void __RPC_STUB IHttpNegotiate_BeginningTransaction_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IHttpNegotiate_OnResponse_Proxy(
    IHttpNegotiate* This,
    DWORD dwResponseCode,
    LPCWSTR szResponseHeaders,
    LPCWSTR szRequestHeaders,
    LPWSTR *pszAdditionalRequestHeaders);
void __RPC_STUB IHttpNegotiate_OnResponse_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IHttpNegotiate_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IHttpNegotiate2 interface
 */
#ifndef __IHttpNegotiate2_INTERFACE_DEFINED__
#define __IHttpNegotiate2_INTERFACE_DEFINED__

typedef IHttpNegotiate2 *LPHTTPNEGOTIATE2;
DEFINE_GUID(IID_IHttpNegotiate2, 0x4f9f9fcb, 0xe0f4, 0x48eb, 0xb7,0xab, 0xfa,0x2e,0xa9,0x36,0x5c,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IHttpNegotiate2 : public IHttpNegotiate
{
    virtual HRESULT STDMETHODCALLTYPE GetRootSecurityId(
        BYTE *pbSecurityId,
        DWORD *pcbSecurityId,
        DWORD_PTR dwReserved) = 0;

};
#else
typedef struct IHttpNegotiate2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IHttpNegotiate methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginningTransaction)(
        IHttpNegotiate2* This,
        LPCWSTR szURL,
        LPCWSTR szHeaders,
        DWORD dwReserved,
        LPWSTR *pszAdditionalHeaders);

    HRESULT (STDMETHODCALLTYPE *OnResponse)(
        IHttpNegotiate2* This,
        DWORD dwResponseCode,
        LPCWSTR szResponseHeaders,
        LPCWSTR szRequestHeaders,
        LPWSTR *pszAdditionalRequestHeaders);

    /*** IHttpNegotiate2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRootSecurityId)(
        IHttpNegotiate2* This,
        BYTE *pbSecurityId,
        DWORD *pcbSecurityId,
        DWORD_PTR dwReserved);

    END_INTERFACE
} IHttpNegotiate2Vtbl;
interface IHttpNegotiate2 {
    CONST_VTBL IHttpNegotiate2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IHttpNegotiate2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHttpNegotiate2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHttpNegotiate2_Release(This) (This)->lpVtbl->Release(This)
/*** IHttpNegotiate methods ***/
#define IHttpNegotiate2_BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders) (This)->lpVtbl->BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders)
#define IHttpNegotiate2_OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders) (This)->lpVtbl->OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders)
/*** IHttpNegotiate2 methods ***/
#define IHttpNegotiate2_GetRootSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetRootSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IHttpNegotiate2_GetRootSecurityId_Proxy(
    IHttpNegotiate2* This,
    BYTE *pbSecurityId,
    DWORD *pcbSecurityId,
    DWORD_PTR dwReserved);
void __RPC_STUB IHttpNegotiate2_GetRootSecurityId_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IHttpNegotiate2_INTERFACE_DEFINED__ */

#define SID_IBindHost IID_IBindHost
#define SID_SBindHost IID_IBindHost
/*****************************************************************************
 * IBindHost interface
 */
#ifndef __IBindHost_INTERFACE_DEFINED__
#define __IBindHost_INTERFACE_DEFINED__

typedef IBindHost *LPBINDHOST;
DEFINE_GUID(IID_IBindHost, 0xfc4801a1, 0x2ba9, 0x11cf, 0xa2,0x29, 0x00,0xaa,0x00,0x3d,0x73,0x52);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IBindHost : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateMoniker(
        LPOLESTR szName,
        IBindCtx *pBC,
        IMoniker **ppmk,
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE MonikerBindToStorage(
        IMoniker *pMk,
        IBindCtx *pBC,
        IBindStatusCallback *pBSC,
        REFIID riid,
        void **ppvObj) = 0;

    virtual HRESULT STDMETHODCALLTYPE MonikerBindToObject(
        IMoniker *pMk,
        IBindCtx *pBC,
        IBindStatusCallback *pBSC,
        REFIID riid,
        void **ppvObj) = 0;

};
#else
typedef struct IBindHostVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IBindHost methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateMoniker)(
        IBindHost* This,
        LPOLESTR szName,
        IBindCtx *pBC,
        IMoniker **ppmk,
        DWORD dwReserved);

    HRESULT (STDMETHODCALLTYPE *MonikerBindToStorage)(
        IBindHost* This,
        IMoniker *pMk,
        IBindCtx *pBC,
        IBindStatusCallback *pBSC,
        REFIID riid,
        void **ppvObj);

    HRESULT (STDMETHODCALLTYPE *MonikerBindToObject)(
        IBindHost* This,
        IMoniker *pMk,
        IBindCtx *pBC,
        IBindStatusCallback *pBSC,
        REFIID riid,
        void **ppvObj);

    END_INTERFACE
} IBindHostVtbl;
interface IBindHost {
    CONST_VTBL IBindHostVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IBindHost_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IBindHost_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IBindHost_Release(This) (This)->lpVtbl->Release(This)
/*** IBindHost methods ***/
#define IBindHost_CreateMoniker(This,szName,pBC,ppmk,dwReserved) (This)->lpVtbl->CreateMoniker(This,szName,pBC,ppmk,dwReserved)
#define IBindHost_MonikerBindToStorage(This,pMk,pBC,pBSC,riid,ppvObj) (This)->lpVtbl->MonikerBindToStorage(This,pMk,pBC,pBSC,riid,ppvObj)
#define IBindHost_MonikerBindToObject(This,pMk,pBC,pBSC,riid,ppvObj) (This)->lpVtbl->MonikerBindToObject(This,pMk,pBC,pBSC,riid,ppvObj)
#endif

#endif

HRESULT STDMETHODCALLTYPE IBindHost_CreateMoniker_Proxy(
    IBindHost* This,
    LPOLESTR szName,
    IBindCtx *pBC,
    IMoniker **ppmk,
    DWORD dwReserved);
void __RPC_STUB IBindHost_CreateMoniker_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindHost_RemoteMonikerBindToStorage_Proxy(
    IBindHost* This,
    IMoniker *pMk,
    IBindCtx *pBC,
    IBindStatusCallback *pBSC,
    REFIID riid,
    IUnknown **ppvObj);
void __RPC_STUB IBindHost_RemoteMonikerBindToStorage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IBindHost_RemoteMonikerBindToObject_Proxy(
    IBindHost* This,
    IMoniker *pMk,
    IBindCtx *pBC,
    IBindStatusCallback *pBSC,
    REFIID riid,
    IUnknown **ppvObj);
void __RPC_STUB IBindHost_RemoteMonikerBindToObject_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(
    IBindHost* This,
    IMoniker *pMk,
    IBindCtx *pBC,
    IBindStatusCallback *pBSC,
    REFIID riid,
    void **ppvObj);
HRESULT __RPC_STUB IBindHost_MonikerBindToStorage_Stub(
    IBindHost* This,
    IMoniker *pMk,
    IBindCtx *pBC,
    IBindStatusCallback *pBSC,
    REFIID riid,
    IUnknown **ppvObj);
HRESULT CALLBACK IBindHost_MonikerBindToObject_Proxy(
    IBindHost* This,
    IMoniker *pMk,
    IBindCtx *pBC,
    IBindStatusCallback *pBSC,
    REFIID riid,
    void **ppvObj);
HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(
    IBindHost* This,
    IMoniker *pMk,
    IBindCtx *pBC,
    IBindStatusCallback *pBSC,
    REFIID riid,
    IUnknown **ppvObj);

#endif  /* __IBindHost_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWinInetInfo interface
 */
#ifndef __IWinInetInfo_INTERFACE_DEFINED__
#define __IWinInetInfo_INTERFACE_DEFINED__

typedef IWinInetInfo *LPWININETINFO;
DEFINE_GUID(IID_IWinInetInfo, 0x79eac9d6, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IWinInetInfo : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE QueryOption(
        DWORD dwOption,
        LPVOID pBuffer,
        DWORD *pcbBuf) = 0;

};
#else
typedef struct IWinInetInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWinInetInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryOption)(
        IWinInetInfo* This,
        DWORD dwOption,
        LPVOID pBuffer,
        DWORD *pcbBuf);

    END_INTERFACE
} IWinInetInfoVtbl;
interface IWinInetInfo {
    CONST_VTBL IWinInetInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IWinInetInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWinInetInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWinInetInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IWinInetInfo methods ***/
#define IWinInetInfo_QueryOption(This,dwOption,pBuffer,pcbBuf) (This)->lpVtbl->QueryOption(This,dwOption,pBuffer,pcbBuf)
#endif

#endif

HRESULT STDMETHODCALLTYPE IWinInetInfo_RemoteQueryOption_Proxy(
    IWinInetInfo* This,
    DWORD dwOption,
    BYTE *pBuffer,
    DWORD *pcbBuf);
void __RPC_STUB IWinInetInfo_RemoteQueryOption_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(
    IWinInetInfo* This,
    DWORD dwOption,
    LPVOID pBuffer,
    DWORD *pcbBuf);
HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(
    IWinInetInfo* This,
    DWORD dwOption,
    BYTE *pBuffer,
    DWORD *pcbBuf);

#endif  /* __IWinInetInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWinInetHttpInfo interface
 */
#ifndef __IWinInetHttpInfo_INTERFACE_DEFINED__
#define __IWinInetHttpInfo_INTERFACE_DEFINED__

typedef IWinInetHttpInfo *LPWININETHTTPINFO;
DEFINE_GUID(IID_IWinInetHttpInfo, 0x79eac9d8, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IWinInetHttpInfo : public IWinInetInfo
{
    virtual HRESULT STDMETHODCALLTYPE QueryInfo(
        DWORD dwOption,
        LPVOID pBuffer,
        DWORD *pcbBuf,
        DWORD *pdwFlags,
        DWORD *pdwReserved) = 0;

};
#else
typedef struct IWinInetHttpInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWinInetInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryOption)(
        IWinInetHttpInfo* This,
        DWORD dwOption,
        LPVOID pBuffer,
        DWORD *pcbBuf);

    /*** IWinInetHttpInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInfo)(
        IWinInetHttpInfo* This,
        DWORD dwOption,
        LPVOID pBuffer,
        DWORD *pcbBuf,
        DWORD *pdwFlags,
        DWORD *pdwReserved);

    END_INTERFACE
} IWinInetHttpInfoVtbl;
interface IWinInetHttpInfo {
    CONST_VTBL IWinInetHttpInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IWinInetHttpInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWinInetHttpInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWinInetHttpInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IWinInetInfo methods ***/
#define IWinInetHttpInfo_QueryOption(This,dwOption,pBuffer,pcbBuf) (This)->lpVtbl->QueryOption(This,dwOption,pBuffer,pcbBuf)
/*** IWinInetHttpInfo methods ***/
#define IWinInetHttpInfo_QueryInfo(This,dwOption,pBuffer,pcbBuf,pdwFlags,pdwReserved) (This)->lpVtbl->QueryInfo(This,dwOption,pBuffer,pcbBuf,pdwFlags,pdwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IWinInetHttpInfo_RemoteQueryInfo_Proxy(
    IWinInetHttpInfo* This,
    DWORD dwOption,
    BYTE *pBuffer,
    DWORD *pcbBuf,
    DWORD *pdwFlags,
    DWORD *pdwReserved);
void __RPC_STUB IWinInetHttpInfo_RemoteQueryInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(
    IWinInetHttpInfo* This,
    DWORD dwOption,
    LPVOID pBuffer,
    DWORD *pcbBuf,
    DWORD *pdwFlags,
    DWORD *pdwReserved);
HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(
    IWinInetHttpInfo* This,
    DWORD dwOption,
    BYTE *pBuffer,
    DWORD *pcbBuf,
    DWORD *pdwFlags,
    DWORD *pdwReserved);

#endif  /* __IWinInetHttpInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWindowForBindingUI interface
 */
#ifndef __IWindowForBindingUI_INTERFACE_DEFINED__
#define __IWindowForBindingUI_INTERFACE_DEFINED__

typedef IWindowForBindingUI *LPWINDOWFORBINDINGUI;
DEFINE_GUID(IID_IWindowForBindingUI, 0x79eac9d5, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IWindowForBindingUI : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetWindow(
        REFGUID rguidReason,
        HWND *phwnd) = 0;

};
#else
typedef struct IWindowForBindingUIVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWindowForBindingUI methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWindow)(
        IWindowForBindingUI* This,
        REFGUID rguidReason,
        HWND *phwnd);

    END_INTERFACE
} IWindowForBindingUIVtbl;
interface IWindowForBindingUI {
    CONST_VTBL IWindowForBindingUIVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IWindowForBindingUI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWindowForBindingUI_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWindowForBindingUI_Release(This) (This)->lpVtbl->Release(This)
/*** IWindowForBindingUI methods ***/
#define IWindowForBindingUI_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)
#endif

#endif

HRESULT STDMETHODCALLTYPE IWindowForBindingUI_GetWindow_Proxy(
    IWindowForBindingUI* This,
    REFGUID rguidReason,
    HWND *phwnd);
void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWindowForBindingUI_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IHttpSecurity interface
 */
#ifndef __IHttpSecurity_INTERFACE_DEFINED__
#define __IHttpSecurity_INTERFACE_DEFINED__

typedef IHttpSecurity *LPHTTPSECURITY;
DEFINE_GUID(IID_IHttpSecurity, 0x79eac9d7, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IHttpSecurity : public IWindowForBindingUI
{
    virtual HRESULT STDMETHODCALLTYPE OnSecurityProblem(
        DWORD dwProblem) = 0;

};
#else
typedef struct IHttpSecurityVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWindowForBindingUI methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWindow)(
        IHttpSecurity* This,
        REFGUID rguidReason,
        HWND *phwnd);

    /*** IHttpSecurity methods ***/
    HRESULT (STDMETHODCALLTYPE *OnSecurityProblem)(
        IHttpSecurity* This,
        DWORD dwProblem);

    END_INTERFACE
} IHttpSecurityVtbl;
interface IHttpSecurity {
    CONST_VTBL IHttpSecurityVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IHttpSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHttpSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHttpSecurity_Release(This) (This)->lpVtbl->Release(This)
/*** IWindowForBindingUI methods ***/
#define IHttpSecurity_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)
/*** IHttpSecurity methods ***/
#define IHttpSecurity_OnSecurityProblem(This,dwProblem) (This)->lpVtbl->OnSecurityProblem(This,dwProblem)
#endif

#endif

HRESULT STDMETHODCALLTYPE IHttpSecurity_OnSecurityProblem_Proxy(
    IHttpSecurity* This,
    DWORD dwProblem);
void __RPC_STUB IHttpSecurity_OnSecurityProblem_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IHttpSecurity_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IPersistMoniker interface
 */
#ifndef __IPersistMoniker_INTERFACE_DEFINED__
#define __IPersistMoniker_INTERFACE_DEFINED__

typedef IPersistMoniker *LPPERSISTMONIKER;
DEFINE_GUID(IID_IPersistMoniker, 0x79eac9c9, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IPersistMoniker : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetClassID(
        CLSID *pClassID) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsDirty(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Load(
        BOOL fFullyAvailable,
        IMoniker *pimkName,
        LPBC pibc,
        DWORD grfMode) = 0;

    virtual HRESULT STDMETHODCALLTYPE Save(
        IMoniker *pimkName,
        LPBC pbc,
        BOOL fRemember) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
        IMoniker *pimkName,
        LPBC pibc) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurMoniker(
        IMoniker **ppimkName) = 0;

};
#else
typedef struct IPersistMonikerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IPersistMoniker methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IPersistMoniker* This,
        CLSID *pClassID);

    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IPersistMoniker* This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IPersistMoniker* This,
        BOOL fFullyAvailable,
        IMoniker *pimkName,
        LPBC pibc,
        DWORD grfMode);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IPersistMoniker* This,
        IMoniker *pimkName,
        LPBC pbc,
        BOOL fRemember);

    HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
        IPersistMoniker* This,
        IMoniker *pimkName,
        LPBC pibc);

    HRESULT (STDMETHODCALLTYPE *GetCurMoniker)(
        IPersistMoniker* This,
        IMoniker **ppimkName);

    END_INTERFACE
} IPersistMonikerVtbl;
interface IPersistMoniker {
    CONST_VTBL IPersistMonikerVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IPersistMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPersistMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPersistMoniker_Release(This) (This)->lpVtbl->Release(This)
/*** IPersistMoniker methods ***/
#define IPersistMoniker_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
#define IPersistMoniker_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IPersistMoniker_Load(This,fFullyAvailable,pimkName,pibc,grfMode) (This)->lpVtbl->Load(This,fFullyAvailable,pimkName,pibc,grfMode)
#define IPersistMoniker_Save(This,pimkName,pbc,fRemember) (This)->lpVtbl->Save(This,pimkName,pbc,fRemember)
#define IPersistMoniker_SaveCompleted(This,pimkName,pibc) (This)->lpVtbl->SaveCompleted(This,pimkName,pibc)
#define IPersistMoniker_GetCurMoniker(This,ppimkName) (This)->lpVtbl->GetCurMoniker(This,ppimkName)
#endif

#endif

HRESULT STDMETHODCALLTYPE IPersistMoniker_GetClassID_Proxy(
    IPersistMoniker* This,
    CLSID *pClassID);
void __RPC_STUB IPersistMoniker_GetClassID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPersistMoniker_IsDirty_Proxy(
    IPersistMoniker* This);
void __RPC_STUB IPersistMoniker_IsDirty_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPersistMoniker_Load_Proxy(
    IPersistMoniker* This,
    BOOL fFullyAvailable,
    IMoniker *pimkName,
    LPBC pibc,
    DWORD grfMode);
void __RPC_STUB IPersistMoniker_Load_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPersistMoniker_Save_Proxy(
    IPersistMoniker* This,
    IMoniker *pimkName,
    LPBC pbc,
    BOOL fRemember);
void __RPC_STUB IPersistMoniker_Save_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPersistMoniker_SaveCompleted_Proxy(
    IPersistMoniker* This,
    IMoniker *pimkName,
    LPBC pibc);
void __RPC_STUB IPersistMoniker_SaveCompleted_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPersistMoniker_GetCurMoniker_Proxy(
    IPersistMoniker* This,
    IMoniker **ppimkName);
void __RPC_STUB IPersistMoniker_GetCurMoniker_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IPersistMoniker_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMonikerProp interface
 */
#ifndef __IMonikerProp_INTERFACE_DEFINED__
#define __IMonikerProp_INTERFACE_DEFINED__

typedef IMonikerProp *LPMONIKERPROP;
typedef enum __WIDL_urlmon_generated_name_00000006 {
    MIMETYPEPROP = 0,
    USE_SRC_URL = 1,
    CLASSIDPROP = 2,
    TRUSTEDDOWNLOADPROP = 3,
    POPUPLEVELPROP = 4
} MONIKERPROPERTY;
DEFINE_GUID(IID_IMonikerProp, 0xa5ca5f7f, 0x1847, 0x4d87, 0x9c,0x5b, 0x91,0x85,0x09,0xf7,0x51,0x1d);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMonikerProp : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE PutProperty(
        MONIKERPROPERTY mkp,
        LPCWSTR val) = 0;

};
#else
typedef struct IMonikerPropVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMonikerProp methods ***/
    HRESULT (STDMETHODCALLTYPE *PutProperty)(
        IMonikerProp* This,
        MONIKERPROPERTY mkp,
        LPCWSTR val);

    END_INTERFACE
} IMonikerPropVtbl;
interface IMonikerProp {
    CONST_VTBL IMonikerPropVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMonikerProp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMonikerProp_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMonikerProp_Release(This) (This)->lpVtbl->Release(This)
/*** IMonikerProp methods ***/
#define IMonikerProp_PutProperty(This,mkp,val) (This)->lpVtbl->PutProperty(This,mkp,val)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMonikerProp_PutProperty_Proxy(
    IMonikerProp* This,
    MONIKERPROPERTY mkp,
    LPCWSTR val);
void __RPC_STUB IMonikerProp_PutProperty_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMonikerProp_INTERFACE_DEFINED__ */

#ifndef _LPBINDPROTOCOL_DEFINED
#define _LPBINDPROTOCOL_DEFINED
/*****************************************************************************
 * IBindProtocol interface
 */
#ifndef __IBindProtocol_INTERFACE_DEFINED__
#define __IBindProtocol_INTERFACE_DEFINED__

typedef IBindProtocol *LPBINDPROTOCOL;
DEFINE_GUID(IID_IBindProtocol, 0x79eac9cd, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IBindProtocol : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateBinding(
        LPCWSTR szUrl,
        IBindCtx *pbc,
        IBinding **ppb) = 0;

};
#else
typedef struct IBindProtocolVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IBindProtocol methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBinding)(
        IBindProtocol* This,
        LPCWSTR szUrl,
        IBindCtx *pbc,
        IBinding **ppb);

    END_INTERFACE
} IBindProtocolVtbl;
interface IBindProtocol {
    CONST_VTBL IBindProtocolVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IBindProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IBindProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IBindProtocol_Release(This) (This)->lpVtbl->Release(This)
/*** IBindProtocol methods ***/
#define IBindProtocol_CreateBinding(This,szUrl,pbc,ppb) (This)->lpVtbl->CreateBinding(This,szUrl,pbc,ppb)
#endif

#endif

HRESULT STDMETHODCALLTYPE IBindProtocol_CreateBinding_Proxy(
    IBindProtocol* This,
    LPCWSTR szUrl,
    IBindCtx *pbc,
    IBinding **ppb);
void __RPC_STUB IBindProtocol_CreateBinding_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IBindProtocol_INTERFACE_DEFINED__ */

#endif /* !defined _LPBINDPROTOCOL_DEFINED */
/*****************************************************************************
 * IInternetBindInfo interface
 */
#ifndef __IInternetBindInfo_INTERFACE_DEFINED__
#define __IInternetBindInfo_INTERFACE_DEFINED__

typedef IInternetBindInfo *LPIINTERNETBINDINFO;
typedef enum tagBINDSTRING {
    BINDSTRING_HEADERS = 1,
    BINDSTRING_ACCEPT_MIMES = 2,
    BINDSTRING_EXTRA_URL = 3,
    BINDSTRING_LANGUAGE = 4,
    BINDSTRING_USERNAME = 5,
    BINDSTRING_PASSWORD = 6,
    BINDSTRING_UA_PIXELS = 7,
    BINDSTRING_UA_COLOR = 8,
    BINDSTRING_OS = 9,
    BINDSTRING_USER_AGENT = 10,
    BINDSTRING_ACCEPT_ENCODINGS = 11,
    BINDSTRING_POST_COOKIE = 12,
    BINDSTRING_POST_DATA_MIME = 13,
    BINDSTRING_URL = 14,
    BINDSTRING_IID = 15,
    BINDSTRING_FLAG_BIND_TO_OBJECT = 16,
    BINDSTRING_PTR_BIND_CONTEXT = 17
} BINDSTRING;
DEFINE_GUID(IID_IInternetBindInfo, 0x79eac9e1, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetBindInfo : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetBindInfo(
        DWORD *grfBINDF,
        BINDINFO *pbindinfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBindString(
        ULONG ulStringType,
        LPOLESTR *ppwzStr,
        ULONG cEl,
        ULONG *pcElFetched) = 0;

};
#else
typedef struct IInternetBindInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetBindInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
        IInternetBindInfo* This,
        DWORD *grfBINDF,
        BINDINFO *pbindinfo);

    HRESULT (STDMETHODCALLTYPE *GetBindString)(
        IInternetBindInfo* This,
        ULONG ulStringType,
        LPOLESTR *ppwzStr,
        ULONG cEl,
        ULONG *pcElFetched);

    END_INTERFACE
} IInternetBindInfoVtbl;
interface IInternetBindInfo {
    CONST_VTBL IInternetBindInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetBindInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetBindInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetBindInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetBindInfo methods ***/
#define IInternetBindInfo_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
#define IInternetBindInfo_GetBindString(This,ulStringType,ppwzStr,cEl,pcElFetched) (This)->lpVtbl->GetBindString(This,ulStringType,ppwzStr,cEl,pcElFetched)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetBindInfo_GetBindInfo_Proxy(
    IInternetBindInfo* This,
    DWORD *grfBINDF,
    BINDINFO *pbindinfo);
void __RPC_STUB IInternetBindInfo_GetBindInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetBindInfo_GetBindString_Proxy(
    IInternetBindInfo* This,
    ULONG ulStringType,
    LPOLESTR *ppwzStr,
    ULONG cEl,
    ULONG *pcElFetched);
void __RPC_STUB IInternetBindInfo_GetBindString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetBindInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetPriority interface
 */
#ifndef __IInternetPriority_INTERFACE_DEFINED__
#define __IInternetPriority_INTERFACE_DEFINED__

typedef IInternetPriority *LPIINTERNETPRIORITY;
DEFINE_GUID(IID_IInternetPriority, 0x79eac9eb, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetPriority : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetPriority(
        LONG nPriority) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPriority(
        LONG *pnPriority) = 0;

};
#else
typedef struct IInternetPriorityVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetPriority methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPriority)(
        IInternetPriority* This,
        LONG nPriority);

    HRESULT (STDMETHODCALLTYPE *GetPriority)(
        IInternetPriority* This,
        LONG *pnPriority);

    END_INTERFACE
} IInternetPriorityVtbl;
interface IInternetPriority {
    CONST_VTBL IInternetPriorityVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetPriority_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetPriority_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetPriority_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetPriority methods ***/
#define IInternetPriority_SetPriority(This,nPriority) (This)->lpVtbl->SetPriority(This,nPriority)
#define IInternetPriority_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetPriority_SetPriority_Proxy(
    IInternetPriority* This,
    LONG nPriority);
void __RPC_STUB IInternetPriority_SetPriority_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetPriority_GetPriority_Proxy(
    IInternetPriority* This,
    LONG *pnPriority);
void __RPC_STUB IInternetPriority_GetPriority_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetPriority_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetProtocolRoot interface
 */
#ifndef __IInternetProtocolRoot_INTERFACE_DEFINED__
#define __IInternetProtocolRoot_INTERFACE_DEFINED__

typedef IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;
typedef enum _tagPI_FLAGS {
    PI_PARSE_URL = 0x1,
    PI_FILTER_MODE = 0x2,
    PI_FORCE_ASYNC = 0x4,
    PI_USE_WORKERTHREAD = 0x8,
    PI_MIMEVERIFICATION = 0x10,
    PI_CLSIDLOOKUP = 0x20,
    PI_DATAPROGRESS = 0x40,
    PI_SYNCHRONOUS = 0x80,
    PI_APARTMENTTHREADED = 0x100,
    PI_CLASSINSTALL = 0x200,
    PD_FORCE_SWITCH = 0x10000
} PI_FLAGS;
typedef struct _tagPROTOCOLDATA {
    DWORD grfFlags;
    DWORD dwState;
    LPVOID pData;
    ULONG cbData;
} PROTOCOLDATA;
DEFINE_GUID(IID_IInternetProtocolRoot, 0x79eac9e3, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetProtocolRoot : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Start(
        LPCWSTR szUrl,
        IInternetProtocolSink *pOIProtSink,
        IInternetBindInfo *pOIBindInfo,
        DWORD grfPI,
        HANDLE_PTR dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE Continue(
        PROTOCOLDATA *pProtocolData) = 0;

    virtual HRESULT STDMETHODCALLTYPE Abort(
        HRESULT hrReason,
        DWORD dwOptions) = 0;

    virtual HRESULT STDMETHODCALLTYPE Terminate(
        DWORD dwOptions) = 0;

    virtual HRESULT STDMETHODCALLTYPE Suspend(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

};
#else
typedef struct IInternetProtocolRootVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetProtocolRoot methods ***/
    HRESULT (STDMETHODCALLTYPE *Start)(
        IInternetProtocolRoot* This,
        LPCWSTR szUrl,
        IInternetProtocolSink *pOIProtSink,
        IInternetBindInfo *pOIBindInfo,
        DWORD grfPI,
        HANDLE_PTR dwReserved);

    HRESULT (STDMETHODCALLTYPE *Continue)(
        IInternetProtocolRoot* This,
        PROTOCOLDATA *pProtocolData);

    HRESULT (STDMETHODCALLTYPE *Abort)(
        IInternetProtocolRoot* This,
        HRESULT hrReason,
        DWORD dwOptions);

    HRESULT (STDMETHODCALLTYPE *Terminate)(
        IInternetProtocolRoot* This,
        DWORD dwOptions);

    HRESULT (STDMETHODCALLTYPE *Suspend)(
        IInternetProtocolRoot* This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IInternetProtocolRoot* This);

    END_INTERFACE
} IInternetProtocolRootVtbl;
interface IInternetProtocolRoot {
    CONST_VTBL IInternetProtocolRootVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetProtocolRoot_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetProtocolRoot_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetProtocolRoot_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetProtocolRoot methods ***/
#define IInternetProtocolRoot_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
#define IInternetProtocolRoot_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
#define IInternetProtocolRoot_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
#define IInternetProtocolRoot_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
#define IInternetProtocolRoot_Suspend(This) (This)->lpVtbl->Suspend(This)
#define IInternetProtocolRoot_Resume(This) (This)->lpVtbl->Resume(This)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Start_Proxy(
    IInternetProtocolRoot* This,
    LPCWSTR szUrl,
    IInternetProtocolSink *pOIProtSink,
    IInternetBindInfo *pOIBindInfo,
    DWORD grfPI,
    HANDLE_PTR dwReserved);
void __RPC_STUB IInternetProtocolRoot_Start_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Continue_Proxy(
    IInternetProtocolRoot* This,
    PROTOCOLDATA *pProtocolData);
void __RPC_STUB IInternetProtocolRoot_Continue_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Abort_Proxy(
    IInternetProtocolRoot* This,
    HRESULT hrReason,
    DWORD dwOptions);
void __RPC_STUB IInternetProtocolRoot_Abort_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Terminate_Proxy(
    IInternetProtocolRoot* This,
    DWORD dwOptions);
void __RPC_STUB IInternetProtocolRoot_Terminate_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Suspend_Proxy(
    IInternetProtocolRoot* This);
void __RPC_STUB IInternetProtocolRoot_Suspend_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Resume_Proxy(
    IInternetProtocolRoot* This);
void __RPC_STUB IInternetProtocolRoot_Resume_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetProtocolRoot_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetProtocolSink interface
 */
#ifndef __IInternetProtocolSink_INTERFACE_DEFINED__
#define __IInternetProtocolSink_INTERFACE_DEFINED__

typedef IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;
DEFINE_GUID(IID_IInternetProtocolSink, 0x79eac9e5, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetProtocolSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Switch(
        PROTOCOLDATA *pProtocolData) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReportProgress(
        ULONG ulStatusCode,
        LPCWSTR szStatusText) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReportData(
        DWORD grfBSCF,
        ULONG ulProgress,
        ULONG ulProgressMax) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReportResult(
        HRESULT hrResult,
        DWORD dwError,
        LPCWSTR szResult) = 0;

};
#else
typedef struct IInternetProtocolSinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetProtocolSink methods ***/
    HRESULT (STDMETHODCALLTYPE *Switch)(
        IInternetProtocolSink* This,
        PROTOCOLDATA *pProtocolData);

    HRESULT (STDMETHODCALLTYPE *ReportProgress)(
        IInternetProtocolSink* This,
        ULONG ulStatusCode,
        LPCWSTR szStatusText);

    HRESULT (STDMETHODCALLTYPE *ReportData)(
        IInternetProtocolSink* This,
        DWORD grfBSCF,
        ULONG ulProgress,
        ULONG ulProgressMax);

    HRESULT (STDMETHODCALLTYPE *ReportResult)(
        IInternetProtocolSink* This,
        HRESULT hrResult,
        DWORD dwError,
        LPCWSTR szResult);

    END_INTERFACE
} IInternetProtocolSinkVtbl;
interface IInternetProtocolSink {
    CONST_VTBL IInternetProtocolSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetProtocolSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetProtocolSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetProtocolSink_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetProtocolSink methods ***/
#define IInternetProtocolSink_Switch(This,pProtocolData) (This)->lpVtbl->Switch(This,pProtocolData)
#define IInternetProtocolSink_ReportProgress(This,ulStatusCode,szStatusText) (This)->lpVtbl->ReportProgress(This,ulStatusCode,szStatusText)
#define IInternetProtocolSink_ReportData(This,grfBSCF,ulProgress,ulProgressMax) (This)->lpVtbl->ReportData(This,grfBSCF,ulProgress,ulProgressMax)
#define IInternetProtocolSink_ReportResult(This,hrResult,dwError,szResult) (This)->lpVtbl->ReportResult(This,hrResult,dwError,szResult)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetProtocolSink_Switch_Proxy(
    IInternetProtocolSink* This,
    PROTOCOLDATA *pProtocolData);
void __RPC_STUB IInternetProtocolSink_Switch_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportProgress_Proxy(
    IInternetProtocolSink* This,
    ULONG ulStatusCode,
    LPCWSTR szStatusText);
void __RPC_STUB IInternetProtocolSink_ReportProgress_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportData_Proxy(
    IInternetProtocolSink* This,
    DWORD grfBSCF,
    ULONG ulProgress,
    ULONG ulProgressMax);
void __RPC_STUB IInternetProtocolSink_ReportData_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportResult_Proxy(
    IInternetProtocolSink* This,
    HRESULT hrResult,
    DWORD dwError,
    LPCWSTR szResult);
void __RPC_STUB IInternetProtocolSink_ReportResult_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetProtocolSink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetProtocol interface
 */
#ifndef __IInternetProtocol_INTERFACE_DEFINED__
#define __IInternetProtocol_INTERFACE_DEFINED__

typedef IInternetProtocol *LPIINTERNETPROTOCOL;
DEFINE_GUID(IID_IInternetProtocol, 0x79eac9e4, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetProtocol : public IInternetProtocolRoot
{
    virtual HRESULT STDMETHODCALLTYPE Read(
        void *pv,
        ULONG cb,
        ULONG *pcbRead) = 0;

    virtual HRESULT STDMETHODCALLTYPE Seek(
        LARGE_INTEGER dlibMove,
        DWORD dwOrigin,
        ULARGE_INTEGER *plibNewPosition) = 0;

    virtual HRESULT STDMETHODCALLTYPE LockRequest(
        DWORD dwOptions) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnlockRequest(
        ) = 0;

};
#else
typedef struct IInternetProtocolVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetProtocolRoot methods ***/
    HRESULT (STDMETHODCALLTYPE *Start)(
        IInternetProtocol* This,
        LPCWSTR szUrl,
        IInternetProtocolSink *pOIProtSink,
        IInternetBindInfo *pOIBindInfo,
        DWORD grfPI,
        HANDLE_PTR dwReserved);

    HRESULT (STDMETHODCALLTYPE *Continue)(
        IInternetProtocol* This,
        PROTOCOLDATA *pProtocolData);

    HRESULT (STDMETHODCALLTYPE *Abort)(
        IInternetProtocol* This,
        HRESULT hrReason,
        DWORD dwOptions);

    HRESULT (STDMETHODCALLTYPE *Terminate)(
        IInternetProtocol* This,
        DWORD dwOptions);

    HRESULT (STDMETHODCALLTYPE *Suspend)(
        IInternetProtocol* This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IInternetProtocol* This);

    /*** IInternetProtocol methods ***/
    HRESULT (STDMETHODCALLTYPE *Read)(
        IInternetProtocol* This,
        void *pv,
        ULONG cb,
        ULONG *pcbRead);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        IInternetProtocol* This,
        LARGE_INTEGER dlibMove,
        DWORD dwOrigin,
        ULARGE_INTEGER *plibNewPosition);

    HRESULT (STDMETHODCALLTYPE *LockRequest)(
        IInternetProtocol* This,
        DWORD dwOptions);

    HRESULT (STDMETHODCALLTYPE *UnlockRequest)(
        IInternetProtocol* This);

    END_INTERFACE
} IInternetProtocolVtbl;
interface IInternetProtocol {
    CONST_VTBL IInternetProtocolVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetProtocol_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetProtocolRoot methods ***/
#define IInternetProtocol_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
#define IInternetProtocol_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
#define IInternetProtocol_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
#define IInternetProtocol_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
#define IInternetProtocol_Suspend(This) (This)->lpVtbl->Suspend(This)
#define IInternetProtocol_Resume(This) (This)->lpVtbl->Resume(This)
/*** IInternetProtocol methods ***/
#define IInternetProtocol_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
#define IInternetProtocol_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
#define IInternetProtocol_LockRequest(This,dwOptions) (This)->lpVtbl->LockRequest(This,dwOptions)
#define IInternetProtocol_UnlockRequest(This) (This)->lpVtbl->UnlockRequest(This)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetProtocol_Read_Proxy(
    IInternetProtocol* This,
    void *pv,
    ULONG cb,
    ULONG *pcbRead);
void __RPC_STUB IInternetProtocol_Read_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocol_Seek_Proxy(
    IInternetProtocol* This,
    LARGE_INTEGER dlibMove,
    DWORD dwOrigin,
    ULARGE_INTEGER *plibNewPosition);
void __RPC_STUB IInternetProtocol_Seek_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocol_LockRequest_Proxy(
    IInternetProtocol* This,
    DWORD dwOptions);
void __RPC_STUB IInternetProtocol_LockRequest_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocol_UnlockRequest_Proxy(
    IInternetProtocol* This);
void __RPC_STUB IInternetProtocol_UnlockRequest_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetProtocol_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetProtocolInfo interface
 */
#ifndef __IInternetProtocolInfo_INTERFACE_DEFINED__
#define __IInternetProtocolInfo_INTERFACE_DEFINED__

typedef IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;
typedef enum _tagPARSEACTION {
    PARSE_CANONICALIZE = 1,
    PARSE_FRIENDLY = 2,
    PARSE_SECURITY_URL = 3,
    PARSE_ROOTDOCUMENT = 4,
    PARSE_DOCUMENT = 5,
    PARSE_ANCHOR = 6,
    PARSE_ENCODE = 7,
    PARSE_DECODE = 8,
    PARSE_PATH_FROM_URL = 9,
    PARSE_URL_FROM_PATH = 10,
    PARSE_MIME = 11,
    PARSE_SERVER = 12,
    PARSE_SCHEMA = 13,
    PARSE_SITE = 14,
    PARSE_DOMAIN = 15,
    PARSE_LOCATION = 16,
    PARSE_SECURITY_DOMAIN = 17,
    PARSE_ESCAPE = 18,
    PARSE_UNESCAPE = 19
} PARSEACTION;
typedef enum _tagPSUACTION {
    PSU_DEFAULT = 1,
    PSU_SECURITY_URL_ONLY = 2
} PSUACTION;
typedef enum _tagQUERYOPTION {
    QUERY_EXPIRATION_DATE = 1,
    QUERY_TIME_OF_LAST_CHANGE = 2,
    QUERY_CONTENT_ENCODING = 3,
    QUERY_CONTENT_TYPE = 4,
    QUERY_REFRESH = 5,
    QUERY_RECOMBINE = 6,
    QUERY_CAN_NAVIGATE = 7,
    QUERY_USES_NETWORK = 8,
    QUERY_IS_CACHED = 9,
    QUERY_IS_INSTALLEDENTRY = 10,
    QUERY_IS_CACHED_OR_MAPPED = 11,
    QUERY_USES_CACHE = 12,
    QUERY_IS_SECURE = 13,
    QUERY_IS_SAFE = 14,
    QUERY_USES_HISTORYFOLDER = 15
} QUERYOPTION;
DEFINE_GUID(IID_IInternetProtocolInfo, 0x79eac9ec, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetProtocolInfo : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE ParseUrl(
        LPCWSTR pwzUrl,
        PARSEACTION ParseAction,
        DWORD dwParseFlags,
        LPWSTR pwzResult,
        DWORD cchResult,
        DWORD *pcchResult,
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE CombineUrl(
        LPCWSTR pwzBaseUrl,
        LPCWSTR pwzRelativeUrl,
        DWORD dwCombineFlags,
        LPWSTR pwzResult,
        DWORD cchResult,
        DWORD *pcchResult,
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE CompareUrl(
        LPCWSTR pwzUrl1,
        LPCWSTR pwzUrl2,
        DWORD dwCompareFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryInfo(
        LPCWSTR pwzUrl,
        QUERYOPTION OueryOption,
        DWORD dwQueryFlags,
        LPVOID pBuffer,
        DWORD cbBuffer,
        DWORD *pcbBuf,
        DWORD dwReserved) = 0;

};
#else
typedef struct IInternetProtocolInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetProtocolInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *ParseUrl)(
        IInternetProtocolInfo* This,
        LPCWSTR pwzUrl,
        PARSEACTION ParseAction,
        DWORD dwParseFlags,
        LPWSTR pwzResult,
        DWORD cchResult,
        DWORD *pcchResult,
        DWORD dwReserved);

    HRESULT (STDMETHODCALLTYPE *CombineUrl)(
        IInternetProtocolInfo* This,
        LPCWSTR pwzBaseUrl,
        LPCWSTR pwzRelativeUrl,
        DWORD dwCombineFlags,
        LPWSTR pwzResult,
        DWORD cchResult,
        DWORD *pcchResult,
        DWORD dwReserved);

    HRESULT (STDMETHODCALLTYPE *CompareUrl)(
        IInternetProtocolInfo* This,
        LPCWSTR pwzUrl1,
        LPCWSTR pwzUrl2,
        DWORD dwCompareFlags);

    HRESULT (STDMETHODCALLTYPE *QueryInfo)(
        IInternetProtocolInfo* This,
        LPCWSTR pwzUrl,
        QUERYOPTION OueryOption,
        DWORD dwQueryFlags,
        LPVOID pBuffer,
        DWORD cbBuffer,
        DWORD *pcbBuf,
        DWORD dwReserved);

    END_INTERFACE
} IInternetProtocolInfoVtbl;
interface IInternetProtocolInfo {
    CONST_VTBL IInternetProtocolInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetProtocolInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetProtocolInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetProtocolInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetProtocolInfo methods ***/
#define IInternetProtocolInfo_ParseUrl(This,pwzUrl,ParseAction,dwParseFlags,pwzResult,cchResult,pcchResult,dwReserved) (This)->lpVtbl->ParseUrl(This,pwzUrl,ParseAction,dwParseFlags,pwzResult,cchResult,pcchResult,dwReserved)
#define IInternetProtocolInfo_CombineUrl(This,pwzBaseUrl,pwzRelativeUrl,dwCombineFlags,pwzResult,cchResult,pcchResult,dwReserved) (This)->lpVtbl->CombineUrl(This,pwzBaseUrl,pwzRelativeUrl,dwCombineFlags,pwzResult,cchResult,pcchResult,dwReserved)
#define IInternetProtocolInfo_CompareUrl(This,pwzUrl1,pwzUrl2,dwCompareFlags) (This)->lpVtbl->CompareUrl(This,pwzUrl1,pwzUrl2,dwCompareFlags)
#define IInternetProtocolInfo_QueryInfo(This,pwzUrl,OueryOption,dwQueryFlags,pBuffer,cbBuffer,pcbBuf,dwReserved) (This)->lpVtbl->QueryInfo(This,pwzUrl,OueryOption,dwQueryFlags,pBuffer,cbBuffer,pcbBuf,dwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_ParseUrl_Proxy(
    IInternetProtocolInfo* This,
    LPCWSTR pwzUrl,
    PARSEACTION ParseAction,
    DWORD dwParseFlags,
    LPWSTR pwzResult,
    DWORD cchResult,
    DWORD *pcchResult,
    DWORD dwReserved);
void __RPC_STUB IInternetProtocolInfo_ParseUrl_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_CombineUrl_Proxy(
    IInternetProtocolInfo* This,
    LPCWSTR pwzBaseUrl,
    LPCWSTR pwzRelativeUrl,
    DWORD dwCombineFlags,
    LPWSTR pwzResult,
    DWORD cchResult,
    DWORD *pcchResult,
    DWORD dwReserved);
void __RPC_STUB IInternetProtocolInfo_CombineUrl_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_CompareUrl_Proxy(
    IInternetProtocolInfo* This,
    LPCWSTR pwzUrl1,
    LPCWSTR pwzUrl2,
    DWORD dwCompareFlags);
void __RPC_STUB IInternetProtocolInfo_CompareUrl_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_QueryInfo_Proxy(
    IInternetProtocolInfo* This,
    LPCWSTR pwzUrl,
    QUERYOPTION OueryOption,
    DWORD dwQueryFlags,
    LPVOID pBuffer,
    DWORD cbBuffer,
    DWORD *pcbBuf,
    DWORD dwReserved);
void __RPC_STUB IInternetProtocolInfo_QueryInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetProtocolInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetSession interface
 */
#ifndef __IInternetSession_INTERFACE_DEFINED__
#define __IInternetSession_INTERFACE_DEFINED__

typedef IInternetSession *LPIINTERNETSESSION;
typedef enum _tagOIBDG_FLAGS {
    OIBDG_APARTMENTTHREADED = 0x100,
    OIBDG_DATAONLY = 0x1000
} OIBDG_FLAGS;
DEFINE_GUID(IID_IInternetSession, 0x79eac9e7, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetSession : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE RegisterNameSpace(
        IClassFactory *pCF,
        REFCLSID rclsid,
        LPCWSTR pwzProtocol,
        ULONG cPatterns,
        const LPCWSTR *ppwzPatterns,
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterNameSpace(
        IClassFactory *pCF,
        LPCWSTR pszProtocol) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterMimeFilter(
        IClassFactory *pCF,
        REFCLSID rclsid,
        LPCWSTR pwzType) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterMimeFilter(
        IClassFactory *pCF,
        LPCWSTR pwzType) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBinding(
        LPBC pBC,
        LPCWSTR szUrl,
        IUnknown *pUnkOuter,
        IUnknown **ppUnk,
        IInternetProtocol **ppOInetProt,
        DWORD dwOption) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSessionOption(
        DWORD dwOption,
        LPVOID pBuffer,
        DWORD dwBufferLength,
        DWORD dwReserved) = 0;

};
#else
typedef struct IInternetSessionVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetSession methods ***/
    HRESULT (STDMETHODCALLTYPE *RegisterNameSpace)(
        IInternetSession* This,
        IClassFactory *pCF,
        REFCLSID rclsid,
        LPCWSTR pwzProtocol,
        ULONG cPatterns,
        const LPCWSTR *ppwzPatterns,
        DWORD dwReserved);

    HRESULT (STDMETHODCALLTYPE *UnregisterNameSpace)(
        IInternetSession* This,
        IClassFactory *pCF,
        LPCWSTR pszProtocol);

    HRESULT (STDMETHODCALLTYPE *RegisterMimeFilter)(
        IInternetSession* This,
        IClassFactory *pCF,
        REFCLSID rclsid,
        LPCWSTR pwzType);

    HRESULT (STDMETHODCALLTYPE *UnregisterMimeFilter)(
        IInternetSession* This,
        IClassFactory *pCF,
        LPCWSTR pwzType);

    HRESULT (STDMETHODCALLTYPE *CreateBinding)(
        IInternetSession* This,
        LPBC pBC,
        LPCWSTR szUrl,
        IUnknown *pUnkOuter,
        IUnknown **ppUnk,
        IInternetProtocol **ppOInetProt,
        DWORD dwOption);

    HRESULT (STDMETHODCALLTYPE *SetSessionOption)(
        IInternetSession* This,
        DWORD dwOption,
        LPVOID pBuffer,
        DWORD dwBufferLength,
        DWORD dwReserved);

    END_INTERFACE
} IInternetSessionVtbl;
interface IInternetSession {
    CONST_VTBL IInternetSessionVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetSession_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetSession_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetSession methods ***/
#define IInternetSession_RegisterNameSpace(This,pCF,rclsid,pwzProtocol,cPatterns,ppwzPatterns,dwReserved) (This)->lpVtbl->RegisterNameSpace(This,pCF,rclsid,pwzProtocol,cPatterns,ppwzPatterns,dwReserved)
#define IInternetSession_UnregisterNameSpace(This,pCF,pszProtocol) (This)->lpVtbl->UnregisterNameSpace(This,pCF,pszProtocol)
#define IInternetSession_RegisterMimeFilter(This,pCF,rclsid,pwzType) (This)->lpVtbl->RegisterMimeFilter(This,pCF,rclsid,pwzType)
#define IInternetSession_UnregisterMimeFilter(This,pCF,pwzType) (This)->lpVtbl->UnregisterMimeFilter(This,pCF,pwzType)
#define IInternetSession_CreateBinding(This,pBC,szUrl,pUnkOuter,ppUnk,ppOInetProt,dwOption) (This)->lpVtbl->CreateBinding(This,pBC,szUrl,pUnkOuter,ppUnk,ppOInetProt,dwOption)
#define IInternetSession_SetSessionOption(This,dwOption,pBuffer,dwBufferLength,dwReserved) (This)->lpVtbl->SetSessionOption(This,dwOption,pBuffer,dwBufferLength,dwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetSession_RegisterNameSpace_Proxy(
    IInternetSession* This,
    IClassFactory *pCF,
    REFCLSID rclsid,
    LPCWSTR pwzProtocol,
    ULONG cPatterns,
    const LPCWSTR *ppwzPatterns,
    DWORD dwReserved);
void __RPC_STUB IInternetSession_RegisterNameSpace_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSession_UnregisterNameSpace_Proxy(
    IInternetSession* This,
    IClassFactory *pCF,
    LPCWSTR pszProtocol);
void __RPC_STUB IInternetSession_UnregisterNameSpace_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSession_RegisterMimeFilter_Proxy(
    IInternetSession* This,
    IClassFactory *pCF,
    REFCLSID rclsid,
    LPCWSTR pwzType);
void __RPC_STUB IInternetSession_RegisterMimeFilter_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSession_UnregisterMimeFilter_Proxy(
    IInternetSession* This,
    IClassFactory *pCF,
    LPCWSTR pwzType);
void __RPC_STUB IInternetSession_UnregisterMimeFilter_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSession_CreateBinding_Proxy(
    IInternetSession* This,
    LPBC pBC,
    LPCWSTR szUrl,
    IUnknown *pUnkOuter,
    IUnknown **ppUnk,
    IInternetProtocol **ppOInetProt,
    DWORD dwOption);
void __RPC_STUB IInternetSession_CreateBinding_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSession_SetSessionOption_Proxy(
    IInternetSession* This,
    DWORD dwOption,
    LPVOID pBuffer,
    DWORD dwBufferLength,
    DWORD dwReserved);
void __RPC_STUB IInternetSession_SetSessionOption_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetSession_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetSecurityMgrSite interface
 */
#ifndef __IInternetSecurityMgrSite_INTERFACE_DEFINED__
#define __IInternetSecurityMgrSite_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInternetSecurityMgrSite, 0x79eac9ed, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetSecurityMgrSite : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetWindow(
        HWND *phwnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnableModeless(
        BOOL fEnable) = 0;

};
#else
typedef struct IInternetSecurityMgrSiteVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetSecurityMgrSite methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWindow)(
        IInternetSecurityMgrSite* This,
        HWND *phwnd);

    HRESULT (STDMETHODCALLTYPE *EnableModeless)(
        IInternetSecurityMgrSite* This,
        BOOL fEnable);

    END_INTERFACE
} IInternetSecurityMgrSiteVtbl;
interface IInternetSecurityMgrSite {
    CONST_VTBL IInternetSecurityMgrSiteVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetSecurityMgrSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetSecurityMgrSite_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetSecurityMgrSite_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetSecurityMgrSite methods ***/
#define IInternetSecurityMgrSite_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
#define IInternetSecurityMgrSite_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetSecurityMgrSite_GetWindow_Proxy(
    IInternetSecurityMgrSite* This,
    HWND *phwnd);
void __RPC_STUB IInternetSecurityMgrSite_GetWindow_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSecurityMgrSite_EnableModeless_Proxy(
    IInternetSecurityMgrSite* This,
    BOOL fEnable);
void __RPC_STUB IInternetSecurityMgrSite_EnableModeless_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetSecurityMgrSite_INTERFACE_DEFINED__ */

#define SID_SInternetSecurityManager IID_IInternetSecurityManager
/*****************************************************************************
 * IInternetSecurityManager interface
 */
#ifndef __IInternetSecurityManager_INTERFACE_DEFINED__
#define __IInternetSecurityManager_INTERFACE_DEFINED__

#define MAX_SIZE_SECURITY_ID 512
typedef enum __WIDL_urlmon_generated_name_00000007 {
    PUAF_DEFAULT = 0x0,
    PUAF_NOUI = 0x1,
    PUAF_ISFILE = 0x2,
    PUAF_WARN_IF_DENIED = 0x4,
    PUAF_FORCEUI_FOREGROUND = 0x8,
    PUAF_CHECK_TIPS = 0x10
} PUAF;
typedef enum __WIDL_urlmon_generated_name_00000008 {
    SZM_CREATE = 0x0,
    SZM_DELETE = 0x1
} SZM_FLAGS;
DEFINE_GUID(IID_IInternetSecurityManager, 0x79eac9ee, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetSecurityManager : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetSecuritySite(
        IInternetSecurityMgrSite *pSite) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSecuritySite(
        IInternetSecurityMgrSite **ppSite) = 0;

    virtual HRESULT STDMETHODCALLTYPE MapUrlToZone(
        LPCWSTR pwszUrl,
        DWORD *pdwZone,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSecurityId(
        LPCWSTR pwszUrl,
        BYTE *pbSecurityId,
        DWORD *pcbSecurityId,
        DWORD_PTR dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction(
        LPCWSTR pwszUrl,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        BYTE *pContext,
        DWORD cbContext,
        DWORD dwFlags,
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy(
        LPCWSTR pwszUrl,
        REFGUID guidKey,
        BYTE **ppPolicy,
        DWORD *pcbPolicy,
        BYTE *pContext,
        DWORD cbContext,
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetZoneMapping(
        DWORD dwZone,
        LPCWSTR lpszPattern,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetZoneMappings(
        DWORD dwZone,
        IEnumString **ppenumString,
        DWORD dwFlags) = 0;

};
#else
typedef struct IInternetSecurityManagerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetSecurityManager methods ***/
    HRESULT (STDMETHODCALLTYPE *SetSecuritySite)(
        IInternetSecurityManager* This,
        IInternetSecurityMgrSite *pSite);

    HRESULT (STDMETHODCALLTYPE *GetSecuritySite)(
        IInternetSecurityManager* This,
        IInternetSecurityMgrSite **ppSite);

    HRESULT (STDMETHODCALLTYPE *MapUrlToZone)(
        IInternetSecurityManager* This,
        LPCWSTR pwszUrl,
        DWORD *pdwZone,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetSecurityId)(
        IInternetSecurityManager* This,
        LPCWSTR pwszUrl,
        BYTE *pbSecurityId,
        DWORD *pcbSecurityId,
        DWORD_PTR dwReserved);

    HRESULT (STDMETHODCALLTYPE *ProcessUrlAction)(
        IInternetSecurityManager* This,
        LPCWSTR pwszUrl,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        BYTE *pContext,
        DWORD cbContext,
        DWORD dwFlags,
        DWORD dwReserved);

    HRESULT (STDMETHODCALLTYPE *QueryCustomPolicy)(
        IInternetSecurityManager* This,
        LPCWSTR pwszUrl,
        REFGUID guidKey,
        BYTE **ppPolicy,
        DWORD *pcbPolicy,
        BYTE *pContext,
        DWORD cbContext,
        DWORD dwReserved);

    HRESULT (STDMETHODCALLTYPE *SetZoneMapping)(
        IInternetSecurityManager* This,
        DWORD dwZone,
        LPCWSTR lpszPattern,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetZoneMappings)(
        IInternetSecurityManager* This,
        DWORD dwZone,
        IEnumString **ppenumString,
        DWORD dwFlags);

    END_INTERFACE
} IInternetSecurityManagerVtbl;
interface IInternetSecurityManager {
    CONST_VTBL IInternetSecurityManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetSecurityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetSecurityManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetSecurityManager_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetSecurityManager methods ***/
#define IInternetSecurityManager_SetSecuritySite(This,pSite) (This)->lpVtbl->SetSecuritySite(This,pSite)
#define IInternetSecurityManager_GetSecuritySite(This,ppSite) (This)->lpVtbl->GetSecuritySite(This,ppSite)
#define IInternetSecurityManager_MapUrlToZone(This,pwszUrl,pdwZone,dwFlags) (This)->lpVtbl->MapUrlToZone(This,pwszUrl,pdwZone,dwFlags)
#define IInternetSecurityManager_GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved)
#define IInternetSecurityManager_ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)
#define IInternetSecurityManager_QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)
#define IInternetSecurityManager_SetZoneMapping(This,dwZone,lpszPattern,dwFlags) (This)->lpVtbl->SetZoneMapping(This,dwZone,lpszPattern,dwFlags)
#define IInternetSecurityManager_GetZoneMappings(This,dwZone,ppenumString,dwFlags) (This)->lpVtbl->GetZoneMappings(This,dwZone,ppenumString,dwFlags)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetSecurityManager_SetSecuritySite_Proxy(
    IInternetSecurityManager* This,
    IInternetSecurityMgrSite *pSite);
void __RPC_STUB IInternetSecurityManager_SetSecuritySite_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetSecuritySite_Proxy(
    IInternetSecurityManager* This,
    IInternetSecurityMgrSite **ppSite);
void __RPC_STUB IInternetSecurityManager_GetSecuritySite_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSecurityManager_MapUrlToZone_Proxy(
    IInternetSecurityManager* This,
    LPCWSTR pwszUrl,
    DWORD *pdwZone,
    DWORD dwFlags);
void __RPC_STUB IInternetSecurityManager_MapUrlToZone_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetSecurityId_Proxy(
    IInternetSecurityManager* This,
    LPCWSTR pwszUrl,
    BYTE *pbSecurityId,
    DWORD *pcbSecurityId,
    DWORD_PTR dwReserved);
void __RPC_STUB IInternetSecurityManager_GetSecurityId_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSecurityManager_ProcessUrlAction_Proxy(
    IInternetSecurityManager* This,
    LPCWSTR pwszUrl,
    DWORD dwAction,
    BYTE *pPolicy,
    DWORD cbPolicy,
    BYTE *pContext,
    DWORD cbContext,
    DWORD dwFlags,
    DWORD dwReserved);
void __RPC_STUB IInternetSecurityManager_ProcessUrlAction_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSecurityManager_QueryCustomPolicy_Proxy(
    IInternetSecurityManager* This,
    LPCWSTR pwszUrl,
    REFGUID guidKey,
    BYTE **ppPolicy,
    DWORD *pcbPolicy,
    BYTE *pContext,
    DWORD cbContext,
    DWORD dwReserved);
void __RPC_STUB IInternetSecurityManager_QueryCustomPolicy_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSecurityManager_SetZoneMapping_Proxy(
    IInternetSecurityManager* This,
    DWORD dwZone,
    LPCWSTR lpszPattern,
    DWORD dwFlags);
void __RPC_STUB IInternetSecurityManager_SetZoneMapping_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetZoneMappings_Proxy(
    IInternetSecurityManager* This,
    DWORD dwZone,
    IEnumString **ppenumString,
    DWORD dwFlags);
void __RPC_STUB IInternetSecurityManager_GetZoneMappings_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetSecurityManager_INTERFACE_DEFINED__ */

#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager
/*****************************************************************************
 * IInternetHostSecurityManager interface
 */
#ifndef __IInternetHostSecurityManager_INTERFACE_DEFINED__
#define __IInternetHostSecurityManager_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInternetHostSecurityManager, 0x3af280b6, 0xcb3f, 0x11d0, 0x89,0x1e, 0x00,0xc0,0x4f,0xb6,0xbf,0xc4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetHostSecurityManager : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetSecurityId(
        BYTE *pbSecurityId,
        DWORD *pcbSecurityId,
        DWORD_PTR dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction(
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        BYTE *pContext,
        DWORD cbContext,
        DWORD dwFlags,
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy(
        REFGUID guidKey,
        BYTE **ppPolicy,
        DWORD *pcbPolicy,
        BYTE *pContext,
        DWORD cbContext,
        DWORD dwReserved) = 0;

};
#else
typedef struct IInternetHostSecurityManagerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetHostSecurityManager methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSecurityId)(
        IInternetHostSecurityManager* This,
        BYTE *pbSecurityId,
        DWORD *pcbSecurityId,
        DWORD_PTR dwReserved);

    HRESULT (STDMETHODCALLTYPE *ProcessUrlAction)(
        IInternetHostSecurityManager* This,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        BYTE *pContext,
        DWORD cbContext,
        DWORD dwFlags,
        DWORD dwReserved);

    HRESULT (STDMETHODCALLTYPE *QueryCustomPolicy)(
        IInternetHostSecurityManager* This,
        REFGUID guidKey,
        BYTE **ppPolicy,
        DWORD *pcbPolicy,
        BYTE *pContext,
        DWORD cbContext,
        DWORD dwReserved);

    END_INTERFACE
} IInternetHostSecurityManagerVtbl;
interface IInternetHostSecurityManager {
    CONST_VTBL IInternetHostSecurityManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetHostSecurityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetHostSecurityManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetHostSecurityManager_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetHostSecurityManager methods ***/
#define IInternetHostSecurityManager_GetSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved)
#define IInternetHostSecurityManager_ProcessUrlAction(This,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)
#define IInternetHostSecurityManager_QueryCustomPolicy(This,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_GetSecurityId_Proxy(
    IInternetHostSecurityManager* This,
    BYTE *pbSecurityId,
    DWORD *pcbSecurityId,
    DWORD_PTR dwReserved);
void __RPC_STUB IInternetHostSecurityManager_GetSecurityId_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_ProcessUrlAction_Proxy(
    IInternetHostSecurityManager* This,
    DWORD dwAction,
    BYTE *pPolicy,
    DWORD cbPolicy,
    BYTE *pContext,
    DWORD cbContext,
    DWORD dwFlags,
    DWORD dwReserved);
void __RPC_STUB IInternetHostSecurityManager_ProcessUrlAction_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_QueryCustomPolicy_Proxy(
    IInternetHostSecurityManager* This,
    REFGUID guidKey,
    BYTE **ppPolicy,
    DWORD *pcbPolicy,
    BYTE *pContext,
    DWORD cbContext,
    DWORD dwReserved);
void __RPC_STUB IInternetHostSecurityManager_QueryCustomPolicy_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetHostSecurityManager_INTERFACE_DEFINED__ */

#define URLACTION_MIN                        0x00001000
#define URLACTION_DOWNLOAD_MIN               0x00001000
#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX    0x00001001
#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX  0x00001004
#define URLACTION_DOWNLOAD_CURR_MAX          0x00001004
#define URLACTION_DOWNLOAD_MAX               0x000011ff
#define URLACTION_ACTIVEX_MIN                     0x00001200
#define URLACTION_ACTIVEX_RUN                     0x00001200
#define URLPOLICY_ACTIVEX_CHECK_LIST              0x00010000
#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY  0x00001201
#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY    0x00001202
#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY  0x00001203
#define URLACTION_SCRIPT_OVERRIDE_SAFETY          0x00001401
#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY  0x00001204
#define URLACTION_ACTIVEX_TREATASUNTRUSTED        0x00001205
#define URLACTION_ACTIVEX_CURR_MAX                0x00001205
#define URLACTION_ACTIVEX_MAX                     0x000013ff
#define URLACTION_SCRIPT_MIN           0x00001400
#define URLACTION_SCRIPT_RUN           0x00001400
#define URLACTION_SCRIPT_JAVA_USE      0x00001402
#define URLACTION_SCRIPT_SAFE_ACTIVEX  0x00001405
#define URLACTION_CROSS_DOMAIN_DATA    0x00001406
#define URLACTION_SCRIPT_PASTE         0x00001407
#define URLACTION_SCRIPT_CURR_MAX      0x00001407
#define URLACTION_SCRIPT_MAX           0x000015ff
#define URLACTION_HTML_MIN                0x00001600
#define URLACTION_HTML_SUBMIT_FORMS       0x00001601
#define URLACTION_HTML_SUBMIT_FORMS_FROM  0x00001602
#define URLACTION_HTML_SUBMIT_FORMS_TO    0x00001603
#define URLACTION_HTML_FONT_DOWNLOAD      0x00001604
#define URLACTION_HTML_JAVA_RUN           0x00001605
#define URLACTION_HTML_USERDATA_SAVE      0x00001606
#define URLACTION_HTML_SUBFRAME_NAVIGATE  0x00001607
#define URLACTION_HTML_META_REFRESH       0x00001608
#define URLACTION_HTML_MIXED_CONTENT      0x00001609
#define URLACTION_HTML_MAX                0x000017ff
#define URLACTION_SHELL_MIN              0x00001800
#define URLACTION_SHELL_INSTALL_DTITEMS  0x00001800
#define URLACTION_SHELL_MOVE_OR_COPY     0x00001802
#define URLACTION_SHELL_FILE_DOWNLOAD    0x00001803
#define URLACTION_SHELL_VERB             0x00001804
#define URLACTION_SHELL_WEBVIEW_VERB     0x00001805
#define URLACTION_SHELL_CURR_MAX         0x00001805
#define URLACTION_SHELL_MAX              0x000019ff
#define URLACTION_NETWORK_MIN                  0x00001a00
#define URLACTION_CREDENTIALS_USE              0x00001a00
#define URLACTION_AUTHENTICATE_CLIENT          0x00001a01
#define URLACTION_COOKIES                      0x00001a02
#define URLACTION_COOKIES_SESSION              0x00001a03
#define URLACTION_CLIENT_CERT_PROMPT           0x00001a04
#define URLACTION_COOKIES_THIRD_PARTY          0x00001a05
#define URLACTION_COOKIES_SESSION_THIRD_PARTY  0x00001a06
#define URLACTION_COOKIES_ENABLED              0x00001a10
#define URLACTION_NETWORK_CURR_MAX             0x00001a10
#define URLACTION_NETWORK_MAX                  0x00001bff
#define URLACTION_JAVA_MIN          0x00001c00
#define URLACTION_JAVA_PERMISSIONS  0x00001c00
#define URLPOLICY_JAVA_PROHIBIT     0x00000000
#define URLPOLICY_JAVA_HIGH         0x00010000
#define URLPOLICY_JAVA_MEDIUM       0x00020000
#define URLPOLICY_JAVA_LOW          0x00030000
#define URLPOLICY_JAVA_CUSTOM       0x00800000
#define URLACTION_JAVA_CURR_MAX     0x00001c00
#define URLACTION_JAVA_MAX          0x00001cff
#define URLACTION_INFODELIVERY_MIN                        0x00001d00
#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS         0x00001d00
#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS        0x00001d01
#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS       0x00001d02
#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS    0x00001d03
#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS   0x00001d04
#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS  0x00001d05
#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING         0x00001d06
#define URLACTION_INFODELIVERY_CURR_MAX                   0x00001d06
#define URLACTION_INFODELIVERY_MAX                        0x00001dff
#define URLACTION_CHANNEL_SOFTDIST_MIN          0x00001e00
#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS  0x00001e05
#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT     0x00010000
#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE     0x00020000
#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL  0x00030000
#define URLACTION_CHANNEL_SOFTDIST_MAX          0x00001eff
#define URLPOLICY_ALLOW     0x00
#define URLPOLICY_QUERY     0x01
#define URLPOLICY_DISALLOW  0x03
#define URLPOLICY_NOTIFY_ON_ALLOW     0x10
#define URLPOLICY_NOTIFY_ON_DISALLOW  0x20
#define URLPOLICY_LOG_ON_ALLOW     0x40
#define URLPOLICY_LOG_ON_DISALLOW  0x80
#define URLPOLICY_DONTCHECKDLGBOX     0x100
#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK     0x00000000
#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER    0x00010000
#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT  0x00020000
#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY      0x00030000
#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK        0x00000000
#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE  0x00010000
#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY         0x00030000
#define URLPOLICY_MASK_PERMISSIONS  0x0f
#define GetUrlPolicyPermissions(dw)      (dw & URLPOLICY_MASK_PERMISSIONS)
#define SetUrlPolicyPermissions(dw,dw2)  ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))
/*****************************************************************************
 * IInternetZoneManager interface
 */
#ifndef __IInternetZoneManager_INTERFACE_DEFINED__
#define __IInternetZoneManager_INTERFACE_DEFINED__

typedef IInternetZoneManager *LPURLZONEMANAGER;
typedef enum tagURLZONE {
    URLZONE_PREDEFINED_MIN = 0,
    URLZONE_LOCAL_MACHINE = 0,
    URLZONE_INTRANET = 1,
    URLZONE_TRUSTED = 2,
    URLZONE_INTERNET = 3,
    URLZONE_UNTRUSTED = 4,
    URLZONE_PREDEFINED_MAX = 999,
    URLZONE_USER_MIN = 1000,
    URLZONE_USER_MAX = 10000
} URLZONE;
typedef enum tagURLTEMPLATE {
    URLTEMPLATE_CUSTOM = 0x0,
    URLTEMPLATE_PREDEFINED_MIN = 0x10000,
    URLTEMPLATE_LOW = 0x10000,
    URLTEMPLATE_MEDLOW = 0x10500,
    URLTEMPLATE_MEDIUM = 0x11000,
    URLTEMPLATE_MEDHIGH = 0x11500,
    URLTEMPLATE_HIGH = 0x12000,
    URLTEMPLATE_PREDEFINED_MAX = 0x20000
} URLTEMPLATE;
typedef enum __WIDL_urlmon_generated_name_00000009 {
    ZAFLAGS_CUSTOM_EDIT = 0x1,
    ZAFLAGS_ADD_SITES = 0x2,
    ZAFLAGS_REQUIRE_VERIFICATION = 0x4,
    ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x8,
    ZAFLAGS_INCLUDE_INTRANET_SITES = 0x10,
    ZAFLAGS_NO_UI = 0x20,
    ZAFLAGS_SUPPORTS_VERIFICATION = 0x40,
    ZAFLAGS_UNC_AS_INTRANET = 0x80,
    ZAFLAGS_DETECT_INTRANET = 0x100,
    ZAFLAGS_USE_LOCKED_ZONES = 0x10000,
    ZAFLAGS_VERIFY_TEMPLATE_SETTINGS = 0x20000,
    ZAFLAGS_NO_CACHE = 0x40000
} ZAFLAGS;
enum {
    MAX_ZONE_PATH = 260,
    MAX_ZONE_DESCRIPTION = 200
};

typedef struct _ZONEATTRIBUTES {
    ULONG cbSize;
    WCHAR szDisplayName[260];
    WCHAR szDescription[200];
    WCHAR szIconPath[260];
    DWORD dwTemplateMinLevel;
    DWORD dwTemplateRecommended;
    DWORD dwTemplateCurrentLevel;
    DWORD dwFlags;
} ZONEATTRIBUTES;
typedef struct _ZONEATTRIBUTES *LPZONEATTRIBUTES;
typedef enum _URLZONEREG {
    URLZONEREG_DEFAULT = 0,
    URLZONEREG_HKLM = 1,
    URLZONEREG_HKCU = 2
} URLZONEREG;
DEFINE_GUID(IID_IInternetZoneManager, 0x79eac9ef, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetZoneManager : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetZoneAttributes(
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetZoneAttributes(
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetZoneCustomPolicy(
        DWORD dwZone,
        REFGUID guidKey,
        BYTE **ppPolicy,
        DWORD *pcbPolicy,
        URLZONEREG ulrZoneReg) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetZoneCustomPolicy(
        DWORD dwZone,
        REFGUID guidKey,
        BYTE *ppPolicy,
        DWORD pcbPolicy,
        URLZONEREG ulrZoneReg) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetZoneActionPolicy(
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetZoneActionPolicy(
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg) = 0;

    virtual HRESULT STDMETHODCALLTYPE PromptAction(
        DWORD dwAction,
        HWND hwndParent,
        LPCWSTR pwszUrl,
        LPCWSTR pwszText,
        DWORD dwPromptFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE LogAction(
        DWORD dwAction,
        LPCWSTR pwszUrl,
        LPCWSTR pwszText,
        DWORD dwLogFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateZoneEnumerator(
        DWORD *pdwEnum,
        DWORD *pdwCount,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetZoneAt(
        DWORD dwEnum,
        DWORD dwIndex,
        DWORD *pdwZone) = 0;

    virtual HRESULT STDMETHODCALLTYPE DestroyZoneEnumerator(
        DWORD dwEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyTemplatePoliciesToZone(
        DWORD dwTemplate,
        DWORD dwZone,
        DWORD dwReserved) = 0;

};
#else
typedef struct IInternetZoneManagerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetZoneManager methods ***/
    HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
        IInternetZoneManager* This,
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes);

    HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
        IInternetZoneManager* This,
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes);

    HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
        IInternetZoneManager* This,
        DWORD dwZone,
        REFGUID guidKey,
        BYTE **ppPolicy,
        DWORD *pcbPolicy,
        URLZONEREG ulrZoneReg);

    HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
        IInternetZoneManager* This,
        DWORD dwZone,
        REFGUID guidKey,
        BYTE *ppPolicy,
        DWORD pcbPolicy,
        URLZONEREG ulrZoneReg);

    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
        IInternetZoneManager* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg);

    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
        IInternetZoneManager* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg);

    HRESULT (STDMETHODCALLTYPE *PromptAction)(
        IInternetZoneManager* This,
        DWORD dwAction,
        HWND hwndParent,
        LPCWSTR pwszUrl,
        LPCWSTR pwszText,
        DWORD dwPromptFlags);

    HRESULT (STDMETHODCALLTYPE *LogAction)(
        IInternetZoneManager* This,
        DWORD dwAction,
        LPCWSTR pwszUrl,
        LPCWSTR pwszText,
        DWORD dwLogFlags);

    HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
        IInternetZoneManager* This,
        DWORD *pdwEnum,
        DWORD *pdwCount,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
        IInternetZoneManager* This,
        DWORD dwEnum,
        DWORD dwIndex,
        DWORD *pdwZone);

    HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
        IInternetZoneManager* This,
        DWORD dwEnum);

    HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
        IInternetZoneManager* This,
        DWORD dwTemplate,
        DWORD dwZone,
        DWORD dwReserved);

    END_INTERFACE
} IInternetZoneManagerVtbl;
interface IInternetZoneManager {
    CONST_VTBL IInternetZoneManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetZoneManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetZoneManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetZoneManager_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetZoneManager methods ***/
#define IInternetZoneManager_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
#define IInternetZoneManager_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
#define IInternetZoneManager_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
#define IInternetZoneManager_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
#define IInternetZoneManager_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
#define IInternetZoneManager_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
#define IInternetZoneManager_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
#define IInternetZoneManager_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
#define IInternetZoneManager_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
#define IInternetZoneManager_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
#define IInternetZoneManager_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
#define IInternetZoneManager_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneAttributes_Proxy(
    IInternetZoneManager* This,
    DWORD dwZone,
    ZONEATTRIBUTES *pZoneAttributes);
void __RPC_STUB IInternetZoneManager_GetZoneAttributes_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneAttributes_Proxy(
    IInternetZoneManager* This,
    DWORD dwZone,
    ZONEATTRIBUTES *pZoneAttributes);
void __RPC_STUB IInternetZoneManager_SetZoneAttributes_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneCustomPolicy_Proxy(
    IInternetZoneManager* This,
    DWORD dwZone,
    REFGUID guidKey,
    BYTE **ppPolicy,
    DWORD *pcbPolicy,
    URLZONEREG ulrZoneReg);
void __RPC_STUB IInternetZoneManager_GetZoneCustomPolicy_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneCustomPolicy_Proxy(
    IInternetZoneManager* This,
    DWORD dwZone,
    REFGUID guidKey,
    BYTE *ppPolicy,
    DWORD pcbPolicy,
    URLZONEREG ulrZoneReg);
void __RPC_STUB IInternetZoneManager_SetZoneCustomPolicy_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneActionPolicy_Proxy(
    IInternetZoneManager* This,
    DWORD dwZone,
    DWORD dwAction,
    BYTE *pPolicy,
    DWORD cbPolicy,
    URLZONEREG urlZoneReg);
void __RPC_STUB IInternetZoneManager_GetZoneActionPolicy_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneActionPolicy_Proxy(
    IInternetZoneManager* This,
    DWORD dwZone,
    DWORD dwAction,
    BYTE *pPolicy,
    DWORD cbPolicy,
    URLZONEREG urlZoneReg);
void __RPC_STUB IInternetZoneManager_SetZoneActionPolicy_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_PromptAction_Proxy(
    IInternetZoneManager* This,
    DWORD dwAction,
    HWND hwndParent,
    LPCWSTR pwszUrl,
    LPCWSTR pwszText,
    DWORD dwPromptFlags);
void __RPC_STUB IInternetZoneManager_PromptAction_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_LogAction_Proxy(
    IInternetZoneManager* This,
    DWORD dwAction,
    LPCWSTR pwszUrl,
    LPCWSTR pwszText,
    DWORD dwLogFlags);
void __RPC_STUB IInternetZoneManager_LogAction_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_CreateZoneEnumerator_Proxy(
    IInternetZoneManager* This,
    DWORD *pdwEnum,
    DWORD *pdwCount,
    DWORD dwFlags);
void __RPC_STUB IInternetZoneManager_CreateZoneEnumerator_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneAt_Proxy(
    IInternetZoneManager* This,
    DWORD dwEnum,
    DWORD dwIndex,
    DWORD *pdwZone);
void __RPC_STUB IInternetZoneManager_GetZoneAt_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_DestroyZoneEnumerator_Proxy(
    IInternetZoneManager* This,
    DWORD dwEnum);
void __RPC_STUB IInternetZoneManager_DestroyZoneEnumerator_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManager_CopyTemplatePoliciesToZone_Proxy(
    IInternetZoneManager* This,
    DWORD dwTemplate,
    DWORD dwZone,
    DWORD dwReserved);
void __RPC_STUB IInternetZoneManager_CopyTemplatePoliciesToZone_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetZoneManager_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetZoneManagerEx interface
 */
#ifndef __IInternetZoneManagerEx_INTERFACE_DEFINED__
#define __IInternetZoneManagerEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInternetZoneManagerEx, 0xa4c23339, 0x8e06, 0x431e, 0x9b,0xf4, 0x7e,0x71,0x1c,0x08,0x56,0x48);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetZoneManagerEx : public IInternetZoneManager
{
    virtual HRESULT STDMETHODCALLTYPE GetZoneActionPolicyEx(
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetZoneActionPolicyEx(
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg,
        DWORD dwFlags) = 0;

};
#else
typedef struct IInternetZoneManagerExVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetZoneManager methods ***/
    HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
        IInternetZoneManagerEx* This,
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes);

    HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
        IInternetZoneManagerEx* This,
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes);

    HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
        IInternetZoneManagerEx* This,
        DWORD dwZone,
        REFGUID guidKey,
        BYTE **ppPolicy,
        DWORD *pcbPolicy,
        URLZONEREG ulrZoneReg);

    HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
        IInternetZoneManagerEx* This,
        DWORD dwZone,
        REFGUID guidKey,
        BYTE *ppPolicy,
        DWORD pcbPolicy,
        URLZONEREG ulrZoneReg);

    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
        IInternetZoneManagerEx* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg);

    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
        IInternetZoneManagerEx* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg);

    HRESULT (STDMETHODCALLTYPE *PromptAction)(
        IInternetZoneManagerEx* This,
        DWORD dwAction,
        HWND hwndParent,
        LPCWSTR pwszUrl,
        LPCWSTR pwszText,
        DWORD dwPromptFlags);

    HRESULT (STDMETHODCALLTYPE *LogAction)(
        IInternetZoneManagerEx* This,
        DWORD dwAction,
        LPCWSTR pwszUrl,
        LPCWSTR pwszText,
        DWORD dwLogFlags);

    HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
        IInternetZoneManagerEx* This,
        DWORD *pdwEnum,
        DWORD *pdwCount,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
        IInternetZoneManagerEx* This,
        DWORD dwEnum,
        DWORD dwIndex,
        DWORD *pdwZone);

    HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
        IInternetZoneManagerEx* This,
        DWORD dwEnum);

    HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
        IInternetZoneManagerEx* This,
        DWORD dwTemplate,
        DWORD dwZone,
        DWORD dwReserved);

    /*** IInternetZoneManagerEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicyEx)(
        IInternetZoneManagerEx* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicyEx)(
        IInternetZoneManagerEx* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg,
        DWORD dwFlags);

    END_INTERFACE
} IInternetZoneManagerExVtbl;
interface IInternetZoneManagerEx {
    CONST_VTBL IInternetZoneManagerExVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetZoneManagerEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetZoneManagerEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetZoneManagerEx_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetZoneManager methods ***/
#define IInternetZoneManagerEx_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
#define IInternetZoneManagerEx_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
#define IInternetZoneManagerEx_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
#define IInternetZoneManagerEx_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
#define IInternetZoneManagerEx_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
#define IInternetZoneManagerEx_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
#define IInternetZoneManagerEx_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
#define IInternetZoneManagerEx_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
#define IInternetZoneManagerEx_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
#define IInternetZoneManagerEx_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
#define IInternetZoneManagerEx_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
#define IInternetZoneManagerEx_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
/*** IInternetZoneManagerEx methods ***/
#define IInternetZoneManagerEx_GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
#define IInternetZoneManagerEx_SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx_GetZoneActionPolicyEx_Proxy(
    IInternetZoneManagerEx* This,
    DWORD dwZone,
    DWORD dwAction,
    BYTE *pPolicy,
    DWORD cbPolicy,
    URLZONEREG urlZoneReg,
    DWORD dwFlags);
void __RPC_STUB IInternetZoneManagerEx_GetZoneActionPolicyEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx_SetZoneActionPolicyEx_Proxy(
    IInternetZoneManagerEx* This,
    DWORD dwZone,
    DWORD dwAction,
    BYTE *pPolicy,
    DWORD cbPolicy,
    URLZONEREG urlZoneReg,
    DWORD dwFlags);
void __RPC_STUB IInternetZoneManagerEx_SetZoneActionPolicyEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetZoneManagerEx_INTERFACE_DEFINED__ */

#define SECURITY_IE_STATE_GREEN 0
#define SECURITY_IE_STATE_RED   1
/*****************************************************************************
 * IInternetZoneManagerEx2 interface
 */
#ifndef __IInternetZoneManagerEx2_INTERFACE_DEFINED__
#define __IInternetZoneManagerEx2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInternetZoneManagerEx2, 0xedc17559, 0xdd5d, 0x4846, 0x8e,0xef, 0x8b,0xec,0xba,0x5a,0x4a,0xbf);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetZoneManagerEx2 : public IInternetZoneManagerEx
{
    virtual HRESULT STDMETHODCALLTYPE GetZoneAttributesEx(
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetZoneSecurityState(
        DWORD dwZoneIndex,
        BOOL fRespectPolicy,
        LPDWORD pdwState,
        BOOL *pfPolicyEncountered) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetIESecurityState(
        BOOL fRespectPolicy,
        LPDWORD pdwState,
        BOOL *pfPolicyEncountered,
        BOOL fNoCache) = 0;

    virtual HRESULT STDMETHODCALLTYPE FixInsecureSettings(
        ) = 0;

};
#else
typedef struct IInternetZoneManagerEx2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetZoneManager methods ***/
    HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes);

    HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes);

    HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        REFGUID guidKey,
        BYTE **ppPolicy,
        DWORD *pcbPolicy,
        URLZONEREG ulrZoneReg);

    HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        REFGUID guidKey,
        BYTE *ppPolicy,
        DWORD pcbPolicy,
        URLZONEREG ulrZoneReg);

    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg);

    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg);

    HRESULT (STDMETHODCALLTYPE *PromptAction)(
        IInternetZoneManagerEx2* This,
        DWORD dwAction,
        HWND hwndParent,
        LPCWSTR pwszUrl,
        LPCWSTR pwszText,
        DWORD dwPromptFlags);

    HRESULT (STDMETHODCALLTYPE *LogAction)(
        IInternetZoneManagerEx2* This,
        DWORD dwAction,
        LPCWSTR pwszUrl,
        LPCWSTR pwszText,
        DWORD dwLogFlags);

    HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
        IInternetZoneManagerEx2* This,
        DWORD *pdwEnum,
        DWORD *pdwCount,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
        IInternetZoneManagerEx2* This,
        DWORD dwEnum,
        DWORD dwIndex,
        DWORD *pdwZone);

    HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
        IInternetZoneManagerEx2* This,
        DWORD dwEnum);

    HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
        IInternetZoneManagerEx2* This,
        DWORD dwTemplate,
        DWORD dwZone,
        DWORD dwReserved);

    /*** IInternetZoneManagerEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicyEx)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicyEx)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        DWORD dwAction,
        BYTE *pPolicy,
        DWORD cbPolicy,
        URLZONEREG urlZoneReg,
        DWORD dwFlags);

    /*** IInternetZoneManagerEx2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetZoneAttributesEx)(
        IInternetZoneManagerEx2* This,
        DWORD dwZone,
        ZONEATTRIBUTES *pZoneAttributes,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetZoneSecurityState)(
        IInternetZoneManagerEx2* This,
        DWORD dwZoneIndex,
        BOOL fRespectPolicy,
        LPDWORD pdwState,
        BOOL *pfPolicyEncountered);

    HRESULT (STDMETHODCALLTYPE *GetIESecurityState)(
        IInternetZoneManagerEx2* This,
        BOOL fRespectPolicy,
        LPDWORD pdwState,
        BOOL *pfPolicyEncountered,
        BOOL fNoCache);

    HRESULT (STDMETHODCALLTYPE *FixInsecureSettings)(
        IInternetZoneManagerEx2* This);

    END_INTERFACE
} IInternetZoneManagerEx2Vtbl;
interface IInternetZoneManagerEx2 {
    CONST_VTBL IInternetZoneManagerEx2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetZoneManagerEx2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetZoneManagerEx2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetZoneManagerEx2_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetZoneManager methods ***/
#define IInternetZoneManagerEx2_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
#define IInternetZoneManagerEx2_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
#define IInternetZoneManagerEx2_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
#define IInternetZoneManagerEx2_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
#define IInternetZoneManagerEx2_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
#define IInternetZoneManagerEx2_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
#define IInternetZoneManagerEx2_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
#define IInternetZoneManagerEx2_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
#define IInternetZoneManagerEx2_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
#define IInternetZoneManagerEx2_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
#define IInternetZoneManagerEx2_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
#define IInternetZoneManagerEx2_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
/*** IInternetZoneManagerEx methods ***/
#define IInternetZoneManagerEx2_GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
#define IInternetZoneManagerEx2_SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
/*** IInternetZoneManagerEx2 methods ***/
#define IInternetZoneManagerEx2_GetZoneAttributesEx(This,dwZone,pZoneAttributes,dwFlags) (This)->lpVtbl->GetZoneAttributesEx(This,dwZone,pZoneAttributes,dwFlags)
#define IInternetZoneManagerEx2_GetZoneSecurityState(This,dwZoneIndex,fRespectPolicy,pdwState,pfPolicyEncountered) (This)->lpVtbl->GetZoneSecurityState(This,dwZoneIndex,fRespectPolicy,pdwState,pfPolicyEncountered)
#define IInternetZoneManagerEx2_GetIESecurityState(This,fRespectPolicy,pdwState,pfPolicyEncountered,fNoCache) (This)->lpVtbl->GetIESecurityState(This,fRespectPolicy,pdwState,pfPolicyEncountered,fNoCache)
#define IInternetZoneManagerEx2_FixInsecureSettings(This) (This)->lpVtbl->FixInsecureSettings(This)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetZoneAttributesEx_Proxy(
    IInternetZoneManagerEx2* This,
    DWORD dwZone,
    ZONEATTRIBUTES *pZoneAttributes,
    DWORD dwFlags);
void __RPC_STUB IInternetZoneManagerEx2_GetZoneAttributesEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetZoneSecurityState_Proxy(
    IInternetZoneManagerEx2* This,
    DWORD dwZoneIndex,
    BOOL fRespectPolicy,
    LPDWORD pdwState,
    BOOL *pfPolicyEncountered);
void __RPC_STUB IInternetZoneManagerEx2_GetZoneSecurityState_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetIESecurityState_Proxy(
    IInternetZoneManagerEx2* This,
    BOOL fRespectPolicy,
    LPDWORD pdwState,
    BOOL *pfPolicyEncountered,
    BOOL fNoCache);
void __RPC_STUB IInternetZoneManagerEx2_GetIESecurityState_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_FixInsecureSettings_Proxy(
    IInternetZoneManagerEx2* This);
void __RPC_STUB IInternetZoneManagerEx2_FixInsecureSettings_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetZoneManagerEx2_INTERFACE_DEFINED__ */

typedef struct _tagSOFTDISTINFO {
    ULONG cbSize;
    DWORD dwFlags;
    DWORD dwAdState;
    LPWSTR szTitle;
    LPWSTR szAbstract;
    LPWSTR szHREF;
    DWORD dwInstalledVersionMS;
    DWORD dwInstalledVersionLS;
    DWORD dwUpdateVersionMS;
    DWORD dwUpdateVersionLS;
    DWORD dwAdvertisedVersionMS;
    DWORD dwAdvertisedVersionLS;
    DWORD dwReserved;
} SOFTDISTINFO;
typedef struct _tagSOFTDISTINFO *LPSOFTDISTINFO;
typedef struct _tagCODEBASEHOLD {
    DWORD cbSize;
    LPWSTR szDistUnit;
    LPWSTR szCodeBase;
    DWORD dwVersionMS;
    DWORD dwVersionLS;
    DWORD dwStyle;
} CODEBASEHOLD;
typedef struct _tagCODEBASEHOLD *LPCODEBASEHOLD;
/*****************************************************************************
 * ISoftDistExt interface
 */
#ifndef __ISoftDistExt_INTERFACE_DEFINED__
#define __ISoftDistExt_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISoftDistExt, 0xb15b8dc1, 0xc7e1, 0x11d0, 0x86,0x80, 0x00,0xaa,0x00,0xbd,0xcb,0x71);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface ISoftDistExt : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE ProcessSoftDist(
        LPCWSTR szCDFURL,
        IXMLElement *pSoftDistElement,
        LPSOFTDISTINFO lpsdi) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFirstCodeBase(
        LPWSTR *szCodeBase,
        LPDWORD dwMaxSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNextCodeBase(
        LPWSTR *szCodeBase,
        LPDWORD dwMaxSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE AsyncInstallDistributionUnit(
        IBindCtx *pbc,
        LPVOID lpReserved,
        DWORD flags,
        LPCODEBASEHOLD lpcbh) = 0;

};
#else
typedef struct ISoftDistExtVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISoftDistExt methods ***/
    HRESULT (STDMETHODCALLTYPE *ProcessSoftDist)(
        ISoftDistExt* This,
        LPCWSTR szCDFURL,
        IXMLElement *pSoftDistElement,
        LPSOFTDISTINFO lpsdi);

    HRESULT (STDMETHODCALLTYPE *GetFirstCodeBase)(
        ISoftDistExt* This,
        LPWSTR *szCodeBase,
        LPDWORD dwMaxSize);

    HRESULT (STDMETHODCALLTYPE *GetNextCodeBase)(
        ISoftDistExt* This,
        LPWSTR *szCodeBase,
        LPDWORD dwMaxSize);

    HRESULT (STDMETHODCALLTYPE *AsyncInstallDistributionUnit)(
        ISoftDistExt* This,
        IBindCtx *pbc,
        LPVOID lpReserved,
        DWORD flags,
        LPCODEBASEHOLD lpcbh);

    END_INTERFACE
} ISoftDistExtVtbl;
interface ISoftDistExt {
    CONST_VTBL ISoftDistExtVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define ISoftDistExt_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISoftDistExt_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISoftDistExt_Release(This) (This)->lpVtbl->Release(This)
/*** ISoftDistExt methods ***/
#define ISoftDistExt_ProcessSoftDist(This,szCDFURL,pSoftDistElement,lpsdi) (This)->lpVtbl->ProcessSoftDist(This,szCDFURL,pSoftDistElement,lpsdi)
#define ISoftDistExt_GetFirstCodeBase(This,szCodeBase,dwMaxSize) (This)->lpVtbl->GetFirstCodeBase(This,szCodeBase,dwMaxSize)
#define ISoftDistExt_GetNextCodeBase(This,szCodeBase,dwMaxSize) (This)->lpVtbl->GetNextCodeBase(This,szCodeBase,dwMaxSize)
#define ISoftDistExt_AsyncInstallDistributionUnit(This,pbc,lpReserved,flags,lpcbh) (This)->lpVtbl->AsyncInstallDistributionUnit(This,pbc,lpReserved,flags,lpcbh)
#endif

#endif

HRESULT STDMETHODCALLTYPE ISoftDistExt_ProcessSoftDist_Proxy(
    ISoftDistExt* This,
    LPCWSTR szCDFURL,
    IXMLElement *pSoftDistElement,
    LPSOFTDISTINFO lpsdi);
void __RPC_STUB ISoftDistExt_ProcessSoftDist_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISoftDistExt_GetFirstCodeBase_Proxy(
    ISoftDistExt* This,
    LPWSTR *szCodeBase,
    LPDWORD dwMaxSize);
void __RPC_STUB ISoftDistExt_GetFirstCodeBase_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISoftDistExt_GetNextCodeBase_Proxy(
    ISoftDistExt* This,
    LPWSTR *szCodeBase,
    LPDWORD dwMaxSize);
void __RPC_STUB ISoftDistExt_GetNextCodeBase_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISoftDistExt_AsyncInstallDistributionUnit_Proxy(
    ISoftDistExt* This,
    IBindCtx *pbc,
    LPVOID lpReserved,
    DWORD flags,
    LPCODEBASEHOLD lpcbh);
void __RPC_STUB ISoftDistExt_AsyncInstallDistributionUnit_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ISoftDistExt_INTERFACE_DEFINED__ */

typedef enum _tagINTERNETFEATURELIST {
    FEATURE_OBJECT_CACHING = 0,
    FEATURE_ZONE_ELEVATION = 1,
    FEATURE_MIME_HANDLING = 2,
    FEATURE_MIME_SNIFFING = 3,
    FEATURE_WINDOW_RESTRICTIONS = 4,
    FEATURE_WEBOC_POPUPMANAGEMENT = 5,
    FEATURE_BEHAVIORS = 6,
    FEATURE_DISABLE_MK_PROTOCOL = 7,
    FEATURE_LOCALMACHINE_LOCKDOWN = 8,
    FEATURE_SECURITYBAND = 9,
    FEATURE_RESTRICT_ACTIVEXINSTALL = 10,
    FEATURE_VALIDATE_NAVIGATE_URL = 11,
    FEATURE_RESTRICT_FILEDOWNLOAD = 12,
    FEATURE_ADDON_MANAGEMENT = 13,
    FEATURE_PROTOCOL_LOCKDOWN = 14,
    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE = 15,
    FEATURE_SAFE_BINDTOOBJECT = 16,
    FEATURE_UNC_SAVEDFILECHECK = 17,
    FEATURE_GET_URL_DOM_FILEPATH_UNENCODED = 18,
    FEATURE_TABBED_BROWSING = 19,
    FEATURE_SSLUX = 20,
    FEATURE_DISABLE_NAVIGATION_SOUNDS = 21,
    FEATURE_DISABLE_LEGACY_COMPRESSION = 22,
    FEATURE_FORCE_ADDR_AND_STATUS = 23,
    FEATURE_XMLHTTP = 24,
    FEATURE_DISABLE_TELNET_PROTOCOL = 25,
    FEATURE_FEEDS = 26,
    FEATURE_BLOCK_INPUT_PROMPTS = 27,
    FEATURE_DOMSTORAGE = 28,
    FEATURE_XDOMAINREQUEST = 29,
    FEATURE_DATAURI = 30,
    FEATURE_AJAX_CONNECTIONSERVICES = 31,
    FEATURE_ENTRY_COUNT = 32
} INTERNETFEATURELIST;
typedef struct _tagPROTOCOLFILTERDATA {
    DWORD cbSize;
    IInternetProtocolSink *pProtocolSink;
    IInternetProtocol *pProtocol;
    IUnknown *pUnk;
    DWORD dwFilterFlags;
} PROTOCOLFILTERDATA;
/*****************************************************************************
 * IUri interface
 */
#ifndef __IUri_INTERFACE_DEFINED__
#define __IUri_INTERFACE_DEFINED__

typedef enum __WIDL_urlmon_generated_name_0000000A {
    Uri_PROPERTY_ABSOLUTE_URI = 0,
    Uri_PROPERTY_STRING_START = Uri_PROPERTY_ABSOLUTE_URI,
    Uri_PROPERTY_AUTHORITY = 1,
    Uri_PROPERTY_DISPLAY_URI = 2,
    Uri_PROPERTY_DOMAIN = 3,
    Uri_PROPERTY_EXTENSION = 4,
    Uri_PROPERTY_FRAGMENT = 5,
    Uri_PROPERTY_HOST = 6,
    Uri_PROPERTY_PASSWORD = 7,
    Uri_PROPERTY_PATH = 8,
    Uri_PROPERTY_PATH_AND_QUERY = 9,
    Uri_PROPERTY_QUERY = 10,
    Uri_PROPERTY_RAW_URI = 11,
    Uri_PROPERTY_SCHEME_NAME = 12,
    Uri_PROPERTY_USER_INFO = 13,
    Uri_PROPERTY_USER_NAME = 14,
    Uri_PROPERTY_STRING_LAST = Uri_PROPERTY_USER_NAME,
    Uri_PROPERTY_HOST_TYPE = 15,
    Uri_PROPERTY_DWORD_START = Uri_PROPERTY_HOST_TYPE,
    Uri_PROPERTY_PORT = 16,
    Uri_PROPERTY_SCHEME = 17,
    Uri_PROPERTY_ZONE = 18,
    Uri_PROPERTY_DWORD_LAST = Uri_PROPERTY_ZONE
} Uri_PROPERTY;
DEFINE_GUID(IID_IUri, 0xa39ee748, 0x6a27, 0x4817, 0xa6,0xf2, 0x13,0x91,0x4b,0xef,0x58,0x90);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IUri : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetPropertyBSTR(
        Uri_PROPERTY uriProp,
        BSTR *pbstrProperty,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyLength(
        Uri_PROPERTY uriProp,
        DWORD *pcchProperty,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyDWORD(
        Uri_PROPERTY uriProp,
        DWORD *pdwProperty,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE HasProperty(
        Uri_PROPERTY uriProp,
        BOOL *pfHasProperty) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAbsoluteUri(
        BSTR *pbstrAbsoluteUri) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAuthority(
        BSTR *pbstrAuthority) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDisplayUri(
        BSTR *pbstrDisplayString) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDomain(
        BSTR *pbstrDomain) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExtension(
        BSTR *pbstrExtension) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFragment(
        BSTR *pbstrFragment) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetHost(
        BSTR *pbstrHost) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPassword(
        BSTR *pbstrPassword) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPath(
        BSTR *pbstrPath) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPathAndQuery(
        BSTR *pbstrPathAndQuery) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetQuery(
        BSTR *pbstrQuery) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRawUri(
        BSTR *pbstrRawUri) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSchemeName(
        BSTR *pbstrSchemeName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUserInfo(
        BSTR *pbstrUserInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUserName(
        BSTR *pbstrUserName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetHostType(
        DWORD *pdwHostType) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPort(
        DWORD *pdwPort) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetScheme(
        DWORD *pdwScheme) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetZone(
        DWORD *pdwZone) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProperties(
        LPDWORD pdwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsEqual(
        IUri *pUri,
        BOOL *pfEqual) = 0;

};
#else
typedef struct IUriVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IUri methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPropertyBSTR)(
        IUri* This,
        Uri_PROPERTY uriProp,
        BSTR *pbstrProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetPropertyLength)(
        IUri* This,
        Uri_PROPERTY uriProp,
        DWORD *pcchProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetPropertyDWORD)(
        IUri* This,
        Uri_PROPERTY uriProp,
        DWORD *pdwProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *HasProperty)(
        IUri* This,
        Uri_PROPERTY uriProp,
        BOOL *pfHasProperty);

    HRESULT (STDMETHODCALLTYPE *GetAbsoluteUri)(
        IUri* This,
        BSTR *pbstrAbsoluteUri);

    HRESULT (STDMETHODCALLTYPE *GetAuthority)(
        IUri* This,
        BSTR *pbstrAuthority);

    HRESULT (STDMETHODCALLTYPE *GetDisplayUri)(
        IUri* This,
        BSTR *pbstrDisplayString);

    HRESULT (STDMETHODCALLTYPE *GetDomain)(
        IUri* This,
        BSTR *pbstrDomain);

    HRESULT (STDMETHODCALLTYPE *GetExtension)(
        IUri* This,
        BSTR *pbstrExtension);

    HRESULT (STDMETHODCALLTYPE *GetFragment)(
        IUri* This,
        BSTR *pbstrFragment);

    HRESULT (STDMETHODCALLTYPE *GetHost)(
        IUri* This,
        BSTR *pbstrHost);

    HRESULT (STDMETHODCALLTYPE *GetPassword)(
        IUri* This,
        BSTR *pbstrPassword);

    HRESULT (STDMETHODCALLTYPE *GetPath)(
        IUri* This,
        BSTR *pbstrPath);

    HRESULT (STDMETHODCALLTYPE *GetPathAndQuery)(
        IUri* This,
        BSTR *pbstrPathAndQuery);

    HRESULT (STDMETHODCALLTYPE *GetQuery)(
        IUri* This,
        BSTR *pbstrQuery);

    HRESULT (STDMETHODCALLTYPE *GetRawUri)(
        IUri* This,
        BSTR *pbstrRawUri);

    HRESULT (STDMETHODCALLTYPE *GetSchemeName)(
        IUri* This,
        BSTR *pbstrSchemeName);

    HRESULT (STDMETHODCALLTYPE *GetUserInfo)(
        IUri* This,
        BSTR *pbstrUserInfo);

    HRESULT (STDMETHODCALLTYPE *GetUserName)(
        IUri* This,
        BSTR *pbstrUserName);

    HRESULT (STDMETHODCALLTYPE *GetHostType)(
        IUri* This,
        DWORD *pdwHostType);

    HRESULT (STDMETHODCALLTYPE *GetPort)(
        IUri* This,
        DWORD *pdwPort);

    HRESULT (STDMETHODCALLTYPE *GetScheme)(
        IUri* This,
        DWORD *pdwScheme);

    HRESULT (STDMETHODCALLTYPE *GetZone)(
        IUri* This,
        DWORD *pdwZone);

    HRESULT (STDMETHODCALLTYPE *GetProperties)(
        IUri* This,
        LPDWORD pdwFlags);

    HRESULT (STDMETHODCALLTYPE *IsEqual)(
        IUri* This,
        IUri *pUri,
        BOOL *pfEqual);

    END_INTERFACE
} IUriVtbl;
interface IUri {
    CONST_VTBL IUriVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IUri_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IUri_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IUri_Release(This) (This)->lpVtbl->Release(This)
/*** IUri methods ***/
#define IUri_GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags) (This)->lpVtbl->GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags)
#define IUri_GetPropertyLength(This,uriProp,pcchProperty,dwFlags) (This)->lpVtbl->GetPropertyLength(This,uriProp,pcchProperty,dwFlags)
#define IUri_GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags) (This)->lpVtbl->GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags)
#define IUri_HasProperty(This,uriProp,pfHasProperty) (This)->lpVtbl->HasProperty(This,uriProp,pfHasProperty)
#define IUri_GetAbsoluteUri(This,pbstrAbsoluteUri) (This)->lpVtbl->GetAbsoluteUri(This,pbstrAbsoluteUri)
#define IUri_GetAuthority(This,pbstrAuthority) (This)->lpVtbl->GetAuthority(This,pbstrAuthority)
#define IUri_GetDisplayUri(This,pbstrDisplayString) (This)->lpVtbl->GetDisplayUri(This,pbstrDisplayString)
#define IUri_GetDomain(This,pbstrDomain) (This)->lpVtbl->GetDomain(This,pbstrDomain)
#define IUri_GetExtension(This,pbstrExtension) (This)->lpVtbl->GetExtension(This,pbstrExtension)
#define IUri_GetFragment(This,pbstrFragment) (This)->lpVtbl->GetFragment(This,pbstrFragment)
#define IUri_GetHost(This,pbstrHost) (This)->lpVtbl->GetHost(This,pbstrHost)
#define IUri_GetPassword(This,pbstrPassword) (This)->lpVtbl->GetPassword(This,pbstrPassword)
#define IUri_GetPath(This,pbstrPath) (This)->lpVtbl->GetPath(This,pbstrPath)
#define IUri_GetPathAndQuery(This,pbstrPathAndQuery) (This)->lpVtbl->GetPathAndQuery(This,pbstrPathAndQuery)
#define IUri_GetQuery(This,pbstrQuery) (This)->lpVtbl->GetQuery(This,pbstrQuery)
#define IUri_GetRawUri(This,pbstrRawUri) (This)->lpVtbl->GetRawUri(This,pbstrRawUri)
#define IUri_GetSchemeName(This,pbstrSchemeName) (This)->lpVtbl->GetSchemeName(This,pbstrSchemeName)
#define IUri_GetUserInfo(This,pbstrUserInfo) (This)->lpVtbl->GetUserInfo(This,pbstrUserInfo)
#define IUri_GetUserName(This,pbstrUserName) (This)->lpVtbl->GetUserName(This,pbstrUserName)
#define IUri_GetHostType(This,pdwHostType) (This)->lpVtbl->GetHostType(This,pdwHostType)
#define IUri_GetPort(This,pdwPort) (This)->lpVtbl->GetPort(This,pdwPort)
#define IUri_GetScheme(This,pdwScheme) (This)->lpVtbl->GetScheme(This,pdwScheme)
#define IUri_GetZone(This,pdwZone) (This)->lpVtbl->GetZone(This,pdwZone)
#define IUri_GetProperties(This,pdwFlags) (This)->lpVtbl->GetProperties(This,pdwFlags)
#define IUri_IsEqual(This,pUri,pfEqual) (This)->lpVtbl->IsEqual(This,pUri,pfEqual)
#endif

#endif

HRESULT STDMETHODCALLTYPE IUri_GetPropertyBSTR_Proxy(
    IUri* This,
    Uri_PROPERTY uriProp,
    BSTR *pbstrProperty,
    DWORD dwFlags);
void __RPC_STUB IUri_GetPropertyBSTR_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetPropertyLength_Proxy(
    IUri* This,
    Uri_PROPERTY uriProp,
    DWORD *pcchProperty,
    DWORD dwFlags);
void __RPC_STUB IUri_GetPropertyLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetPropertyDWORD_Proxy(
    IUri* This,
    Uri_PROPERTY uriProp,
    DWORD *pdwProperty,
    DWORD dwFlags);
void __RPC_STUB IUri_GetPropertyDWORD_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_HasProperty_Proxy(
    IUri* This,
    Uri_PROPERTY uriProp,
    BOOL *pfHasProperty);
void __RPC_STUB IUri_HasProperty_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetAbsoluteUri_Proxy(
    IUri* This,
    BSTR *pbstrAbsoluteUri);
void __RPC_STUB IUri_GetAbsoluteUri_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetAuthority_Proxy(
    IUri* This,
    BSTR *pbstrAuthority);
void __RPC_STUB IUri_GetAuthority_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetDisplayUri_Proxy(
    IUri* This,
    BSTR *pbstrDisplayString);
void __RPC_STUB IUri_GetDisplayUri_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetDomain_Proxy(
    IUri* This,
    BSTR *pbstrDomain);
void __RPC_STUB IUri_GetDomain_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetExtension_Proxy(
    IUri* This,
    BSTR *pbstrExtension);
void __RPC_STUB IUri_GetExtension_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetFragment_Proxy(
    IUri* This,
    BSTR *pbstrFragment);
void __RPC_STUB IUri_GetFragment_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetHost_Proxy(
    IUri* This,
    BSTR *pbstrHost);
void __RPC_STUB IUri_GetHost_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetPassword_Proxy(
    IUri* This,
    BSTR *pbstrPassword);
void __RPC_STUB IUri_GetPassword_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetPath_Proxy(
    IUri* This,
    BSTR *pbstrPath);
void __RPC_STUB IUri_GetPath_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetPathAndQuery_Proxy(
    IUri* This,
    BSTR *pbstrPathAndQuery);
void __RPC_STUB IUri_GetPathAndQuery_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetQuery_Proxy(
    IUri* This,
    BSTR *pbstrQuery);
void __RPC_STUB IUri_GetQuery_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetRawUri_Proxy(
    IUri* This,
    BSTR *pbstrRawUri);
void __RPC_STUB IUri_GetRawUri_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetSchemeName_Proxy(
    IUri* This,
    BSTR *pbstrSchemeName);
void __RPC_STUB IUri_GetSchemeName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetUserInfo_Proxy(
    IUri* This,
    BSTR *pbstrUserInfo);
void __RPC_STUB IUri_GetUserInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetUserName_Proxy(
    IUri* This,
    BSTR *pbstrUserName);
void __RPC_STUB IUri_GetUserName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetHostType_Proxy(
    IUri* This,
    DWORD *pdwHostType);
void __RPC_STUB IUri_GetHostType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetPort_Proxy(
    IUri* This,
    DWORD *pdwPort);
void __RPC_STUB IUri_GetPort_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetScheme_Proxy(
    IUri* This,
    DWORD *pdwScheme);
void __RPC_STUB IUri_GetScheme_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetZone_Proxy(
    IUri* This,
    DWORD *pdwZone);
void __RPC_STUB IUri_GetZone_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_GetProperties_Proxy(
    IUri* This,
    LPDWORD pdwFlags);
void __RPC_STUB IUri_GetProperties_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IUri_IsEqual_Proxy(
    IUri* This,
    IUri *pUri,
    BOOL *pfEqual);
void __RPC_STUB IUri_IsEqual_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IUri_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IUriContainer interface
 */
#ifndef __IUriContainer_INTERFACE_DEFINED__
#define __IUriContainer_INTERFACE_DEFINED__

DEFINE_GUID(IID_IUriContainer, 0xa158a630, 0xed6f, 0x45fb, 0xb9,0x87, 0xf6,0x86,0x76,0xf5,0x77,0x52);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IUriContainer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetIUri(
        IUri **ppIUri) = 0;

};
#else
typedef struct IUriContainerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IUriContainer methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIUri)(
        IUriContainer* This,
        IUri **ppIUri);

    END_INTERFACE
} IUriContainerVtbl;
interface IUriContainer {
    CONST_VTBL IUriContainerVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IUriContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IUriContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IUriContainer_Release(This) (This)->lpVtbl->Release(This)
/*** IUriContainer methods ***/
#define IUriContainer_GetIUri(This,ppIUri) (This)->lpVtbl->GetIUri(This,ppIUri)
#endif

#endif

HRESULT STDMETHODCALLTYPE IUriContainer_GetIUri_Proxy(
    IUriContainer* This,
    IUri **ppIUri);
void __RPC_STUB IUriContainer_GetIUri_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IUriContainer_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetProtocolEx interface
 */
#ifndef __IInternetProtocolEx_INTERFACE_DEFINED__
#define __IInternetProtocolEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IInternetProtocolEx, 0xc7a98e66, 0x1010, 0x492c, 0xa1,0xc8, 0xc8,0x09,0xe1,0xf7,0x59,0x05);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IInternetProtocolEx : public IInternetProtocol
{
    virtual HRESULT STDMETHODCALLTYPE StartEx(
        IUri *pUri,
        IInternetProtocolSink *pOIProtSink,
        IInternetBindInfo *pOIBindInfo,
        DWORD grfPI,
        HANDLE *dwReserved) = 0;

};
#else
typedef struct IInternetProtocolExVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetProtocolRoot methods ***/
    HRESULT (STDMETHODCALLTYPE *Start)(
        IInternetProtocolEx* This,
        LPCWSTR szUrl,
        IInternetProtocolSink *pOIProtSink,
        IInternetBindInfo *pOIBindInfo,
        DWORD grfPI,
        HANDLE_PTR dwReserved);

    HRESULT (STDMETHODCALLTYPE *Continue)(
        IInternetProtocolEx* This,
        PROTOCOLDATA *pProtocolData);

    HRESULT (STDMETHODCALLTYPE *Abort)(
        IInternetProtocolEx* This,
        HRESULT hrReason,
        DWORD dwOptions);

    HRESULT (STDMETHODCALLTYPE *Terminate)(
        IInternetProtocolEx* This,
        DWORD dwOptions);

    HRESULT (STDMETHODCALLTYPE *Suspend)(
        IInternetProtocolEx* This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IInternetProtocolEx* This);

    /*** IInternetProtocol methods ***/
    HRESULT (STDMETHODCALLTYPE *Read)(
        IInternetProtocolEx* This,
        void *pv,
        ULONG cb,
        ULONG *pcbRead);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        IInternetProtocolEx* This,
        LARGE_INTEGER dlibMove,
        DWORD dwOrigin,
        ULARGE_INTEGER *plibNewPosition);

    HRESULT (STDMETHODCALLTYPE *LockRequest)(
        IInternetProtocolEx* This,
        DWORD dwOptions);

    HRESULT (STDMETHODCALLTYPE *UnlockRequest)(
        IInternetProtocolEx* This);

    /*** IInternetProtocolEx methods ***/
    HRESULT (STDMETHODCALLTYPE *StartEx)(
        IInternetProtocolEx* This,
        IUri *pUri,
        IInternetProtocolSink *pOIProtSink,
        IInternetBindInfo *pOIBindInfo,
        DWORD grfPI,
        HANDLE *dwReserved);

    END_INTERFACE
} IInternetProtocolExVtbl;
interface IInternetProtocolEx {
    CONST_VTBL IInternetProtocolExVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetProtocolEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetProtocolEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetProtocolEx_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetProtocolRoot methods ***/
#define IInternetProtocolEx_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
#define IInternetProtocolEx_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
#define IInternetProtocolEx_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
#define IInternetProtocolEx_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
#define IInternetProtocolEx_Suspend(This) (This)->lpVtbl->Suspend(This)
#define IInternetProtocolEx_Resume(This) (This)->lpVtbl->Resume(This)
/*** IInternetProtocol methods ***/
#define IInternetProtocolEx_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
#define IInternetProtocolEx_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
#define IInternetProtocolEx_LockRequest(This,dwOptions) (This)->lpVtbl->LockRequest(This,dwOptions)
#define IInternetProtocolEx_UnlockRequest(This) (This)->lpVtbl->UnlockRequest(This)
/*** IInternetProtocolEx methods ***/
#define IInternetProtocolEx_StartEx(This,pUri,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->StartEx(This,pUri,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetProtocolEx_StartEx_Proxy(
    IInternetProtocolEx* This,
    IUri *pUri,
    IInternetProtocolSink *pOIProtSink,
    IInternetBindInfo *pOIBindInfo,
    DWORD grfPI,
    HANDLE *dwReserved);
void __RPC_STUB IInternetProtocolEx_StartEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetProtocolEx_INTERFACE_DEFINED__ */

#define CONFIRMSAFETYACTION_LOADOBJECT  0x00000001
struct CONFIRMSAFETY {
    CLSID clsid;
    IUnknown *pUnk;
    DWORD dwFlags;
};

EXTERN_C const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;
DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);
DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);
DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
DEFINE_GUID(CLSID_DeCompMimeFilter, 0x8f6b0360, 0xb80d, 0x11d0, 0xa9,0xb3, 0x00,0x60,0x97,0x94,0x23,0x11);
DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);
DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
#define URLMON_OPTION_USERAGENT          0x10000001
#define URLMON_OPTION_USERAGENT_REFRESH  0x10000002
#define URLMON_OPTION_URL_ENCODING       0x10000004
#define MK_S_ASYNCHRONOUS                _HRESULT_TYPEDEF_(0x000401E8)
#ifndef S_ASYNCHRONOUS
#define S_ASYNCHRONOUS                   MK_S_ASYNCHRONOUS
#endif
#define INET_E_ERROR_FIRST               _HRESULT_TYPEDEF_(0x800C0002)
#define INET_E_INVALID_URL               _HRESULT_TYPEDEF_(0x800C0002)
#define INET_E_NO_SESSION                _HRESULT_TYPEDEF_(0x800C0003)
#define INET_E_CANNOT_CONNECT            _HRESULT_TYPEDEF_(0x800C0004)
#define INET_E_RESOURCE_NOT_FOUND        _HRESULT_TYPEDEF_(0x800C0005)
#define INET_E_OBJECT_NOT_FOUND          _HRESULT_TYPEDEF_(0x800C0006)
#define INET_E_DATA_NOT_AVAILABLE        _HRESULT_TYPEDEF_(0x800C0007)
#define INET_E_DOWNLOAD_FAILURE          _HRESULT_TYPEDEF_(0x800C0008)
#define INET_E_AUTHENTICATION_REQUIRED   _HRESULT_TYPEDEF_(0x800C0009)
#define INET_E_NO_VALID_MEDIA            _HRESULT_TYPEDEF_(0x800C000A)
#define INET_E_CONNECTION_TIMEOUT        _HRESULT_TYPEDEF_(0x800C000B)
#define INET_E_INVALID_REQUEST           _HRESULT_TYPEDEF_(0x800C000C)
#define INET_E_UNKNOWN_PROTOCOL          _HRESULT_TYPEDEF_(0x800C000D)
#define INET_E_SECURITY_PROBLEM          _HRESULT_TYPEDEF_(0x800C000E)
#define INET_E_CANNOT_LOAD_DATA          _HRESULT_TYPEDEF_(0x800C000F)
#define INET_E_CANNOT_INSTANTIATE_OBJECT _HRESULT_TYPEDEF_(0x800C0010)
#define INET_E_USE_DEFAULT_PROTOCOLHANDLER _HRESULT_TYPEDEF_(0x800C0011)
#define INET_E_QUERYOPTION_UNKNOWN       _HRESULT_TYPEDEF_(0x800C0013)
#define INET_E_REDIRECT_FAILED           _HRESULT_TYPEDEF_(0x800C0014)
#define INET_E_REDIRECT_TO_DIR           _HRESULT_TYPEDEF_(0x800C0015)
#define INET_E_CANNOT_LOCK_REQUEST       _HRESULT_TYPEDEF_(0x800C0016)
#define INET_E_ERROR_LAST                INET_E_REDIRECT_TO_DIR
#define INET_E_DEFAULT_ACTION            INET_E_USE_DEFAULT_PROTOCOLHANDLER
HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);
HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);
HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);
HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);
HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);
HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);
HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);
HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);
HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);
HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);
HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);
HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);
HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);
HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);
HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);
HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);
HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);
HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);
HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);
HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);
HRESULT WINAPI HlinkGoBack(IUnknown*);
HRESULT WINAPI HlinkGoForward(IUnknown*);
HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);
HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);
HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);
HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);
HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);
HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);
HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);
HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);
HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);
HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);
void WINAPI ReleaseBindInfo(BINDINFO*);
HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);
HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);
HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
#define OInetCombineUrl CoInternetCombineUrl
#define OInetCompareUrl CoInternetCompareUrl
#define OInetGetSession CoInternetGetSession
BOOL WINAPI IsLoggingEnabledA(LPCSTR);
BOOL WINAPI IsLoggingEnabledW(LPCWSTR);
#define IsLoggingEnabled WINELIB_NAME_AW(IsLoggingEnabled)
#define MKSYS_URLMONIKER 6
#define URL_MK_LEGACY            0
#define URL_MK_UNIFORM           1
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER STGMEDIUM_UserSize     (ULONG *, ULONG, STGMEDIUM *);
unsigned char * __RPC_USER STGMEDIUM_UserMarshal  (ULONG *, unsigned char *, STGMEDIUM *);
unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, STGMEDIUM *);
void            __RPC_USER STGMEDIUM_UserFree     (ULONG *, STGMEDIUM *);
ULONG           __RPC_USER CLIPFORMAT_UserSize     (ULONG *, ULONG, CLIPFORMAT *);
unsigned char * __RPC_USER CLIPFORMAT_UserMarshal  (ULONG *, unsigned char *, CLIPFORMAT *);
unsigned char * __RPC_USER CLIPFORMAT_UserUnmarshal(ULONG *, unsigned char *, CLIPFORMAT *);
void            __RPC_USER CLIPFORMAT_UserFree     (ULONG *, CLIPFORMAT *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __WIDL_URLMON_H */
