/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

import "objidl.idl";
import "oleidl.idl";

cpp_quote("#include <_mingw_unicode.h>")

cpp_quote("#ifndef __IPersistMoniker_FWD_DEFINED__")
cpp_quote("#define __IPersistMoniker_FWD_DEFINED__")
cpp_quote("typedef struct IPersistMoniker IPersistMoniker;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMonikerProp_FWD_DEFINED__")
cpp_quote("#define __IMonikerProp_FWD_DEFINED__")
cpp_quote("typedef struct IMonikerProp IMonikerProp;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IBindProtocol_FWD_DEFINED__")
cpp_quote("#define __IBindProtocol_FWD_DEFINED__")
cpp_quote("typedef struct IBindProtocol IBindProtocol;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAuthenticate_FWD_DEFINED__")
cpp_quote("#define __IAuthenticate_FWD_DEFINED__")
cpp_quote("typedef struct IAuthenticate IAuthenticate;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IHttpNegotiate_FWD_DEFINED__")
cpp_quote("#define __IHttpNegotiate_FWD_DEFINED__")
cpp_quote("typedef struct IHttpNegotiate IHttpNegotiate;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IHttpNegotiate2_FWD_DEFINED__")
cpp_quote("#define __IHttpNegotiate2_FWD_DEFINED__")
cpp_quote("typedef struct IHttpNegotiate2 IHttpNegotiate2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IWinInetFileStream_FWD_DEFINED__")
cpp_quote("#define __IWinInetFileStream_FWD_DEFINED__")
cpp_quote("typedef struct IWinInetFileStream IWinInetFileStream;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IWindowForBindingUI_FWD_DEFINED__")
cpp_quote("#define __IWindowForBindingUI_FWD_DEFINED__")
cpp_quote("typedef struct IWindowForBindingUI IWindowForBindingUI;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICodeInstall_FWD_DEFINED__")
cpp_quote("#define __ICodeInstall_FWD_DEFINED__")
cpp_quote("typedef struct ICodeInstall ICodeInstall;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IWinInetInfo_FWD_DEFINED__")
cpp_quote("#define __IWinInetInfo_FWD_DEFINED__")
cpp_quote("typedef struct IWinInetInfo IWinInetInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IHttpSecurity_FWD_DEFINED__")
cpp_quote("#define __IHttpSecurity_FWD_DEFINED__")
cpp_quote("typedef struct IHttpSecurity IHttpSecurity;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IWinInetHttpInfo_FWD_DEFINED__")
cpp_quote("#define __IWinInetHttpInfo_FWD_DEFINED__")
cpp_quote("typedef struct IWinInetHttpInfo IWinInetHttpInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IWinInetCacheHints_FWD_DEFINED__")
cpp_quote("#define __IWinInetCacheHints_FWD_DEFINED__")
cpp_quote("typedef struct IWinInetCacheHints IWinInetCacheHints;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IBindHost_FWD_DEFINED__")
cpp_quote("#define __IBindHost_FWD_DEFINED__")
cpp_quote("typedef struct IBindHost IBindHost;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternet_FWD_DEFINED__")
cpp_quote("#define __IInternet_FWD_DEFINED__")
cpp_quote("typedef struct IInternet IInternet;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetBindInfo_FWD_DEFINED__")
cpp_quote("#define __IInternetBindInfo_FWD_DEFINED__")
cpp_quote("typedef struct IInternetBindInfo IInternetBindInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetProtocolRoot_FWD_DEFINED__")
cpp_quote("#define __IInternetProtocolRoot_FWD_DEFINED__")
cpp_quote("typedef struct IInternetProtocolRoot IInternetProtocolRoot;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetProtocol_FWD_DEFINED__")
cpp_quote("#define __IInternetProtocol_FWD_DEFINED__")
cpp_quote("typedef struct IInternetProtocol IInternetProtocol;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetProtocolSink_FWD_DEFINED__")
cpp_quote("#define __IInternetProtocolSink_FWD_DEFINED__")
cpp_quote("typedef struct IInternetProtocolSink IInternetProtocolSink;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetProtocolSinkStackable_FWD_DEFINED__")
cpp_quote("#define __IInternetProtocolSinkStackable_FWD_DEFINED__")
cpp_quote("typedef struct IInternetProtocolSinkStackable IInternetProtocolSinkStackable;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetSession_FWD_DEFINED__")
cpp_quote("#define __IInternetSession_FWD_DEFINED__")
cpp_quote("typedef struct IInternetSession IInternetSession;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetThreadSwitch_FWD_DEFINED__")
cpp_quote("#define __IInternetThreadSwitch_FWD_DEFINED__")
cpp_quote("typedef struct IInternetThreadSwitch IInternetThreadSwitch;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetPriority_FWD_DEFINED__")
cpp_quote("#define __IInternetPriority_FWD_DEFINED__")
cpp_quote("typedef struct IInternetPriority IInternetPriority;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetProtocolInfo_FWD_DEFINED__")
cpp_quote("#define __IInternetProtocolInfo_FWD_DEFINED__")
cpp_quote("typedef struct IInternetProtocolInfo IInternetProtocolInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetSecurityMgrSite_FWD_DEFINED__")
cpp_quote("#define __IInternetSecurityMgrSite_FWD_DEFINED__")
cpp_quote("typedef struct IInternetSecurityMgrSite IInternetSecurityMgrSite;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetSecurityManager_FWD_DEFINED__")
cpp_quote("#define __IInternetSecurityManager_FWD_DEFINED__")
cpp_quote("typedef struct IInternetSecurityManager IInternetSecurityManager;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetSecurityManagerEx_FWD_DEFINED__")
cpp_quote("#define __IInternetSecurityManagerEx_FWD_DEFINED__")
cpp_quote("typedef struct IInternetSecurityManagerEx IInternetSecurityManagerEx;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IZoneIdentifier_FWD_DEFINED__")
cpp_quote("#define __IZoneIdentifier_FWD_DEFINED__")
cpp_quote("typedef struct IZoneIdentifier IZoneIdentifier;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetHostSecurityManager_FWD_DEFINED__")
cpp_quote("#define __IInternetHostSecurityManager_FWD_DEFINED__")
cpp_quote("typedef struct IInternetHostSecurityManager IInternetHostSecurityManager;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetZoneManager_FWD_DEFINED__")
cpp_quote("#define __IInternetZoneManager_FWD_DEFINED__")
cpp_quote("typedef struct IInternetZoneManager IInternetZoneManager;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetZoneManagerEx_FWD_DEFINED__")
cpp_quote("#define __IInternetZoneManagerEx_FWD_DEFINED__")
cpp_quote("typedef struct IInternetZoneManagerEx IInternetZoneManagerEx;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISoftDistExt_FWD_DEFINED__")
cpp_quote("#define __ISoftDistExt_FWD_DEFINED__")
cpp_quote("typedef struct ISoftDistExt ISoftDistExt;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICatalogFileInfo_FWD_DEFINED__")
cpp_quote("#define __ICatalogFileInfo_FWD_DEFINED__")
cpp_quote("typedef struct ICatalogFileInfo ICatalogFileInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDataFilter_FWD_DEFINED__")
cpp_quote("#define __IDataFilter_FWD_DEFINED__")
cpp_quote("typedef struct IDataFilter IDataFilter;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEncodingFilterFactory_FWD_DEFINED__")
cpp_quote("#define __IEncodingFilterFactory_FWD_DEFINED__")
cpp_quote("typedef struct IEncodingFilterFactory IEncodingFilterFactory;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IWrappedProtocol_FWD_DEFINED__")
cpp_quote("#define __IWrappedProtocol_FWD_DEFINED__")
cpp_quote("typedef struct IWrappedProtocol IWrappedProtocol;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#include \"servprov.h\"")
cpp_quote("#include \"msxml.h\"")
cpp_quote("")
cpp_quote("  EXTERN_C const IID CLSID_SBS_StdURLMoniker;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_HttpProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_FtpProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_GopherProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_HttpSProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_FileProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_MkProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_UrlMkBindCtx;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_SoftDistExt;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_StdEncodingFilterFac;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_DeCompMimeFilter;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_CdlProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_ClassInstallFilter;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_InternetSecurityManager;")
cpp_quote("  EXTERN_C const IID CLSID_SBS_InternetZoneManager;")
cpp_quote("")
cpp_quote("#define BINDF_DONTUSECACHE BINDF_GETNEWESTVERSION")
cpp_quote("#define BINDF_DONTPUTINCACHE BINDF_NOWRITECACHE")
cpp_quote("#define BINDF_NOCOPYDATA BINDF_PULLDATA")
cpp_quote("#define INVALID_P_ROOT_SECURITY_ID ((BYTE*)-1)")
cpp_quote("#define PI_DOCFILECLSIDLOOKUP PI_CLSIDLOOKUP")
cpp_quote("  EXTERN_C const IID IID_IAsyncMoniker;")
cpp_quote("  EXTERN_C const IID CLSID_StdURLMoniker;")
cpp_quote("  EXTERN_C const IID CLSID_HttpProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_FtpProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_GopherProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_HttpSProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_FileProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_MkProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_StdURLProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_UrlMkBindCtx;")
cpp_quote("  EXTERN_C const IID CLSID_StdEncodingFilterFac;")
cpp_quote("  EXTERN_C const IID CLSID_DeCompMimeFilter;")
cpp_quote("  EXTERN_C const IID CLSID_CdlProtocol;")
cpp_quote("  EXTERN_C const IID CLSID_ClassInstallFilter;")
cpp_quote("  EXTERN_C const IID IID_IAsyncBindCtx;")
cpp_quote("")
cpp_quote("#define SZ_URLCONTEXT OLESTR(\"URL Context\")")
cpp_quote("#define SZ_ASYNC_CALLEE OLESTR(\"AsyncCallee\")")
cpp_quote("#define MKSYS_URLMONIKER 6")
cpp_quote("#define URL_MK_LEGACY 0")
cpp_quote("#define URL_MK_UNIFORM 1")
cpp_quote("#define URL_MK_NO_CANONICALIZE 2")
cpp_quote("")
cpp_quote("  STDAPI CreateURLMoniker(LPMONIKER pMkCtx,LPCWSTR szURL,LPMONIKER *ppmk);")
cpp_quote("  STDAPI CreateURLMonikerEx(LPMONIKER pMkCtx,LPCWSTR szURL,LPMONIKER *ppmk,DWORD dwFlags);")
cpp_quote("  STDAPI GetClassURL(LPCWSTR szURL,CLSID *pClsID);")
cpp_quote("  STDAPI CreateAsyncBindCtx(DWORD reserved,IBindStatusCallback *pBSCb,IEnumFORMATETC *pEFetc,IBindCtx **ppBC);")
cpp_quote("  STDAPI CreateAsyncBindCtxEx(IBindCtx *pbc,DWORD dwOptions,IBindStatusCallback *pBSCb,IEnumFORMATETC *pEnum,IBindCtx **ppBC,DWORD reserved);")
cpp_quote("  STDAPI MkParseDisplayNameEx(IBindCtx *pbc,LPCWSTR szDisplayName,ULONG *pchEaten,LPMONIKER *ppmk);")
cpp_quote("  STDAPI RegisterBindStatusCallback(LPBC pBC,IBindStatusCallback *pBSCb,IBindStatusCallback **ppBSCBPrev,DWORD dwReserved);")
cpp_quote("  STDAPI RevokeBindStatusCallback(LPBC pBC,IBindStatusCallback *pBSCb);")
cpp_quote("  STDAPI GetClassFileOrMime(LPBC pBC,LPCWSTR szFilename,LPVOID pBuffer,DWORD cbSize,LPCWSTR szMime,DWORD dwReserved,CLSID *pclsid);")
cpp_quote("  STDAPI IsValidURL(LPBC pBC,LPCWSTR szURL,DWORD dwReserved);")
cpp_quote("  STDAPI CoGetClassObjectFromURL(REFCLSID rCLASSID,LPCWSTR szCODE,DWORD dwFileVersionMS,DWORD dwFileVersionLS,LPCWSTR szTYPE,LPBINDCTX pBindCtx,DWORD dwClsContext,LPVOID pvReserved,REFIID riid,LPVOID *ppv);")
cpp_quote("  STDAPI FaultInIEFeature(HWND hWnd,uCLSSPEC *pClassSpec,QUERYCONTEXT *pQuery,DWORD dwFlags);")
cpp_quote("  STDAPI GetComponentIDFromCLSSPEC(uCLSSPEC *pClassspec,LPSTR *ppszComponentID);")
cpp_quote("")
cpp_quote("#define FIEF_FLAG_FORCE_JITUI 0x1")
cpp_quote("")
cpp_quote("#define FIEF_FLAG_PEEK 0x2")
cpp_quote("#define FIEF_FLAG_SKIP_INSTALLED_VERSION_CHECK 0x4")
cpp_quote("")
cpp_quote("  STDAPI IsAsyncMoniker(IMoniker *pmk);")
cpp_quote("  STDAPI CreateURLBinding(LPCWSTR lpszUrl,IBindCtx *pbc,IBinding **ppBdg);")
cpp_quote("  STDAPI RegisterMediaTypes(UINT ctypes,const LPCSTR *rgszTypes,CLIPFORMAT *rgcfTypes);")
cpp_quote("  STDAPI FindMediaType(LPCSTR rgszTypes,CLIPFORMAT *rgcfTypes);")
cpp_quote("  STDAPI CreateFormatEnumerator(UINT cfmtetc,FORMATETC *rgfmtetc,IEnumFORMATETC **ppenumfmtetc);")
cpp_quote("  STDAPI RegisterFormatEnumerator(LPBC pBC,IEnumFORMATETC *pEFetc,DWORD reserved);")
cpp_quote("  STDAPI RevokeFormatEnumerator(LPBC pBC,IEnumFORMATETC *pEFetc);")
cpp_quote("  STDAPI RegisterMediaTypeClass(LPBC pBC,UINT ctypes,const LPCSTR *rgszTypes,CLSID *rgclsID,DWORD reserved);")
cpp_quote("  STDAPI FindMediaTypeClass(LPBC pBC,LPCSTR szType,CLSID *pclsID,DWORD reserved);")
cpp_quote("  STDAPI UrlMkSetSessionOption(DWORD dwOption,LPVOID pBuffer,DWORD dwBufferLength,DWORD dwReserved);")
cpp_quote("  STDAPI UrlMkGetSessionOption(DWORD dwOption,LPVOID pBuffer,DWORD dwBufferLength,DWORD *pdwBufferLength,DWORD dwReserved);")
cpp_quote("  STDAPI FindMimeFromData(LPBC pBC,LPCWSTR pwzUrl,LPVOID pBuffer,DWORD cbSize,LPCWSTR pwzMimeProposed,DWORD dwMimeFlags,LPWSTR *ppwzMimeOut,DWORD dwReserved);")
cpp_quote("#define FMFD_DEFAULT 0x00000000")
cpp_quote("#define FMFD_URLASFILENAME 0x00000001")
cpp_quote("#define FMFD_ENABLEMIMESNIFFING 0x00000002")
cpp_quote("#define FMFD_IGNOREMIMETEXTPLAIN 0x00000004")
cpp_quote("  STDAPI ObtainUserAgentString(DWORD dwOption,LPSTR pszUAOut,DWORD *cbSize);")
cpp_quote("  STDAPI CompareSecurityIds(BYTE *pbSecurityId1,DWORD dwLen1,BYTE *pbSecurityId2,DWORD dwLen2,DWORD dwReserved);")
cpp_quote("  STDAPI CompatFlagsFromClsid(CLSID *pclsid,LPDWORD pdwCompatFlags,LPDWORD pdwMiscStatusFlags);")
cpp_quote("")
cpp_quote("#define URLMON_OPTION_USERAGENT 0x10000001")
cpp_quote("#define URLMON_OPTION_USERAGENT_REFRESH 0x10000002")
cpp_quote("#define URLMON_OPTION_URL_ENCODING 0x10000004")
cpp_quote("#define URLMON_OPTION_USE_BINDSTRINGCREDS 0x10000008")
cpp_quote("")
cpp_quote("#define CF_NULL 0")
cpp_quote("#define CFSTR_MIME_NULL NULL")
cpp_quote("#define CFSTR_MIME_TEXT (TEXT(\"text/plain\"))")
cpp_quote("#define CFSTR_MIME_RICHTEXT (TEXT(\"text/richtext\"))")
cpp_quote("#define CFSTR_MIME_X_BITMAP (TEXT(\"image/x-xbitmap\"))")
cpp_quote("#define CFSTR_MIME_POSTSCRIPT (TEXT(\"application/postscript\"))")
cpp_quote("#define CFSTR_MIME_AIFF (TEXT(\"audio/aiff\"))")
cpp_quote("#define CFSTR_MIME_BASICAUDIO (TEXT(\"audio/basic\"))")
cpp_quote("#define CFSTR_MIME_WAV (TEXT(\"audio/wav\"))")
cpp_quote("#define CFSTR_MIME_X_WAV (TEXT(\"audio/x-wav\"))")
cpp_quote("#define CFSTR_MIME_GIF (TEXT(\"image/gif\"))")
cpp_quote("#define CFSTR_MIME_PJPEG (TEXT(\"image/pjpeg\"))")
cpp_quote("#define CFSTR_MIME_JPEG (TEXT(\"image/jpeg\"))")
cpp_quote("#define CFSTR_MIME_TIFF (TEXT(\"image/tiff\"))")
cpp_quote("#define CFSTR_MIME_X_PNG (TEXT(\"image/x-png\"))")
cpp_quote("#define CFSTR_MIME_BMP (TEXT(\"image/bmp\"))")
cpp_quote("#define CFSTR_MIME_X_ART (TEXT(\"image/x-jg\"))")
cpp_quote("#define CFSTR_MIME_X_EMF (TEXT(\"image/x-emf\"))")
cpp_quote("#define CFSTR_MIME_X_WMF (TEXT(\"image/x-wmf\"))")
cpp_quote("#define CFSTR_MIME_AVI (TEXT(\"video/avi\"))")
cpp_quote("#define CFSTR_MIME_MPEG (TEXT(\"video/mpeg\"))")
cpp_quote("#define CFSTR_MIME_FRACTALS (TEXT(\"application/fractals\"))")
cpp_quote("#define CFSTR_MIME_RAWDATA (TEXT(\"application/octet-stream\"))")
cpp_quote("#define CFSTR_MIME_RAWDATASTRM (TEXT(\"application/octet-stream\"))")
cpp_quote("#define CFSTR_MIME_PDF (TEXT(\"application/pdf\"))")
cpp_quote("#define CFSTR_MIME_HTA (TEXT(\"application/hta\"))")
cpp_quote("#define CFSTR_MIME_X_AIFF (TEXT(\"audio/x-aiff\"))")
cpp_quote("#define CFSTR_MIME_X_REALAUDIO (TEXT(\"audio/x-pn-realaudio\"))")
cpp_quote("#define CFSTR_MIME_XBM (TEXT(\"image/xbm\"))")
cpp_quote("#define CFSTR_MIME_QUICKTIME (TEXT(\"video/quicktime\"))")
cpp_quote("#define CFSTR_MIME_X_MSVIDEO (TEXT(\"video/x-msvideo\"))")
cpp_quote("#define CFSTR_MIME_X_SGI_MOVIE (TEXT(\"video/x-sgi-movie\"))")
cpp_quote("#define CFSTR_MIME_HTML (TEXT(\"text/html\"))")
cpp_quote("#define CFSTR_MIME_XML (TEXT(\"text/xml\"))")
cpp_quote("")
cpp_quote("#define MK_S_ASYNCHRONOUS _HRESULT_TYPEDEF_(0x000401E8L)")
cpp_quote("#ifndef S_ASYNCHRONOUS")
cpp_quote("#define S_ASYNCHRONOUS MK_S_ASYNCHRONOUS")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef E_PENDING")
cpp_quote("#define E_PENDING _HRESULT_TYPEDEF_(0x8000000AL)")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#define INET_E_INVALID_URL _HRESULT_TYPEDEF_(0x800C0002L)")
cpp_quote("#define INET_E_NO_SESSION _HRESULT_TYPEDEF_(0x800C0003L)")
cpp_quote("#define INET_E_CANNOT_CONNECT _HRESULT_TYPEDEF_(0x800C0004L)")
cpp_quote("#define INET_E_RESOURCE_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0005L)")
cpp_quote("#define INET_E_OBJECT_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0006L)")
cpp_quote("#define INET_E_DATA_NOT_AVAILABLE _HRESULT_TYPEDEF_(0x800C0007L)")
cpp_quote("#define INET_E_DOWNLOAD_FAILURE _HRESULT_TYPEDEF_(0x800C0008L)")
cpp_quote("#define INET_E_AUTHENTICATION_REQUIRED _HRESULT_TYPEDEF_(0x800C0009L)")
cpp_quote("#define INET_E_NO_VALID_MEDIA _HRESULT_TYPEDEF_(0x800C000AL)")
cpp_quote("#define INET_E_CONNECTION_TIMEOUT _HRESULT_TYPEDEF_(0x800C000BL)")
cpp_quote("#define INET_E_INVALID_REQUEST _HRESULT_TYPEDEF_(0x800C000CL)")
cpp_quote("#define INET_E_UNKNOWN_PROTOCOL _HRESULT_TYPEDEF_(0x800C000DL)")
cpp_quote("#define INET_E_SECURITY_PROBLEM _HRESULT_TYPEDEF_(0x800C000EL)")
cpp_quote("#define INET_E_CANNOT_LOAD_DATA _HRESULT_TYPEDEF_(0x800C000FL)")
cpp_quote("#define INET_E_CANNOT_INSTANTIATE_OBJECT _HRESULT_TYPEDEF_(0x800C0010L)")
cpp_quote("#define INET_E_REDIRECT_FAILED _HRESULT_TYPEDEF_(0x800C0014L)")
cpp_quote("#define INET_E_REDIRECT_TO_DIR _HRESULT_TYPEDEF_(0x800C0015L)")
cpp_quote("#define INET_E_CANNOT_LOCK_REQUEST _HRESULT_TYPEDEF_(0x800C0016L)")
cpp_quote("#define INET_E_USE_EXTEND_BINDING _HRESULT_TYPEDEF_(0x800C0017L)")
cpp_quote("#define INET_E_TERMINATED_BIND _HRESULT_TYPEDEF_(0x800C0018L)")
cpp_quote("#define INET_E_ERROR_FIRST _HRESULT_TYPEDEF_(0x800C0002L)")
cpp_quote("#define INET_E_CODE_DOWNLOAD_DECLINED _HRESULT_TYPEDEF_(0x800C0100L)")
cpp_quote("#define INET_E_RESULT_DISPATCHED _HRESULT_TYPEDEF_(0x800C0200L)")
cpp_quote("#define INET_E_CANNOT_REPLACE_SFP_FILE _HRESULT_TYPEDEF_(0x800C0300L)")
cpp_quote("#define INET_E_CODE_INSTALL_SUPPRESSED _HRESULT_TYPEDEF_(0x800C0400L)")
cpp_quote("#define INET_E_ERROR_LAST INET_E_CANNOT_REPLACE_SFP_FILE")
cpp_quote("")
cpp_quote("#ifndef _LPPERSISTMONIKER_DEFINED")
cpp_quote("#define _LPPERSISTMONIKER_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_v0_0_s_ifspec;")
cpp_quote("#ifndef __IPersistMoniker_INTERFACE_DEFINED__")
cpp_quote("#define __IPersistMoniker_INTERFACE_DEFINED__")
cpp_quote("  typedef IPersistMoniker *LPPERSISTMONIKER;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPersistMoniker;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPersistMoniker : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetClassID(CLSID *pClassID) = 0;")
cpp_quote("    virtual HRESULT WINAPI IsDirty(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Load(WINBOOL fFullyAvailable,IMoniker *pimkName,LPBC pibc,DWORD grfMode) = 0;")
cpp_quote("    virtual HRESULT WINAPI Save(IMoniker *pimkName,LPBC pbc,WINBOOL fRemember) = 0;")
cpp_quote("    virtual HRESULT WINAPI SaveCompleted(IMoniker *pimkName,LPBC pibc) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetCurMoniker(IMoniker **ppimkName) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPersistMonikerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPersistMoniker *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPersistMoniker *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPersistMoniker *This);")
cpp_quote("      HRESULT (WINAPI *GetClassID)(IPersistMoniker *This,CLSID *pClassID);")
cpp_quote("      HRESULT (WINAPI *IsDirty)(IPersistMoniker *This);")
cpp_quote("      HRESULT (WINAPI *Load)(IPersistMoniker *This,WINBOOL fFullyAvailable,IMoniker *pimkName,LPBC pibc,DWORD grfMode);")
cpp_quote("      HRESULT (WINAPI *Save)(IPersistMoniker *This,IMoniker *pimkName,LPBC pbc,WINBOOL fRemember);")
cpp_quote("      HRESULT (WINAPI *SaveCompleted)(IPersistMoniker *This,IMoniker *pimkName,LPBC pibc);")
cpp_quote("      HRESULT (WINAPI *GetCurMoniker)(IPersistMoniker *This,IMoniker **ppimkName);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPersistMonikerVtbl;")
cpp_quote("  struct IPersistMoniker {")
cpp_quote("    CONST_VTBL struct IPersistMonikerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPersistMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPersistMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPersistMoniker_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPersistMoniker_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)")
cpp_quote("#define IPersistMoniker_IsDirty(This) (This)->lpVtbl->IsDirty(This)")
cpp_quote("#define IPersistMoniker_Load(This,fFullyAvailable,pimkName,pibc,grfMode) (This)->lpVtbl->Load(This,fFullyAvailable,pimkName,pibc,grfMode)")
cpp_quote("#define IPersistMoniker_Save(This,pimkName,pbc,fRemember) (This)->lpVtbl->Save(This,pimkName,pbc,fRemember)")
cpp_quote("#define IPersistMoniker_SaveCompleted(This,pimkName,pibc) (This)->lpVtbl->SaveCompleted(This,pimkName,pibc)")
cpp_quote("#define IPersistMoniker_GetCurMoniker(This,ppimkName) (This)->lpVtbl->GetCurMoniker(This,ppimkName)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPersistMoniker_GetClassID_Proxy(IPersistMoniker *This,CLSID *pClassID);")
cpp_quote("  void __RPC_STUB IPersistMoniker_GetClassID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMoniker_IsDirty_Proxy(IPersistMoniker *This);")
cpp_quote("  void __RPC_STUB IPersistMoniker_IsDirty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMoniker_Load_Proxy(IPersistMoniker *This,WINBOOL fFullyAvailable,IMoniker *pimkName,LPBC pibc,DWORD grfMode);")
cpp_quote("  void __RPC_STUB IPersistMoniker_Load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMoniker_Save_Proxy(IPersistMoniker *This,IMoniker *pimkName,LPBC pbc,WINBOOL fRemember);")
cpp_quote("  void __RPC_STUB IPersistMoniker_Save_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMoniker_SaveCompleted_Proxy(IPersistMoniker *This,IMoniker *pimkName,LPBC pibc);")
cpp_quote("  void __RPC_STUB IPersistMoniker_SaveCompleted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMoniker_GetCurMoniker_Proxy(IPersistMoniker *This,IMoniker **ppimkName);")
cpp_quote("  void __RPC_STUB IPersistMoniker_GetCurMoniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPMONIKERPROP_DEFINED")
cpp_quote("#define _LPMONIKERPROP_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0178_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0178_v0_0_s_ifspec;")
cpp_quote("#ifndef __IMonikerProp_INTERFACE_DEFINED__")
cpp_quote("#define __IMonikerProp_INTERFACE_DEFINED__")
cpp_quote("  typedef IMonikerProp *LPMONIKERPROP;")
cpp_quote("")
cpp_quote("  typedef enum __MIDL_IMonikerProp_0001 {")
cpp_quote("    MIMETYPEPROP = 0,USE_SRC_URL = 0x1,CLASSIDPROP = 0x2,TRUSTEDDOWNLOADPROP = 0x3,POPUPLEVELPROP = 0x4")
cpp_quote("  } MONIKERPROPERTY;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IMonikerProp;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IMonikerProp : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI PutProperty(MONIKERPROPERTY mkp,LPCWSTR val) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IMonikerPropVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IMonikerProp *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IMonikerProp *This);")
cpp_quote("      ULONG (WINAPI *Release)(IMonikerProp *This);")
cpp_quote("      HRESULT (WINAPI *PutProperty)(IMonikerProp *This,MONIKERPROPERTY mkp,LPCWSTR val);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IMonikerPropVtbl;")
cpp_quote("  struct IMonikerProp {")
cpp_quote("    CONST_VTBL struct IMonikerPropVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IMonikerProp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IMonikerProp_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IMonikerProp_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IMonikerProp_PutProperty(This,mkp,val) (This)->lpVtbl->PutProperty(This,mkp,val)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IMonikerProp_PutProperty_Proxy(IMonikerProp *This,MONIKERPROPERTY mkp,LPCWSTR val);")
cpp_quote("  void __RPC_STUB IMonikerProp_PutProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPBINDPROTOCOL_DEFINED")
cpp_quote("#define _LPBINDPROTOCOL_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0179_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0179_v0_0_s_ifspec;")
cpp_quote("#ifndef __IBindProtocol_INTERFACE_DEFINED__")
cpp_quote("#define __IBindProtocol_INTERFACE_DEFINED__")
cpp_quote("  typedef IBindProtocol *LPBINDPROTOCOL;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IBindProtocol;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IBindProtocol : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CreateBinding(LPCWSTR szUrl,IBindCtx *pbc,IBinding **ppb) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IBindProtocolVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IBindProtocol *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IBindProtocol *This);")
cpp_quote("      ULONG (WINAPI *Release)(IBindProtocol *This);")
cpp_quote("      HRESULT (WINAPI *CreateBinding)(IBindProtocol *This,LPCWSTR szUrl,IBindCtx *pbc,IBinding **ppb);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IBindProtocolVtbl;")
cpp_quote("  struct IBindProtocol {")
cpp_quote("    CONST_VTBL struct IBindProtocolVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IBindProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IBindProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IBindProtocol_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IBindProtocol_CreateBinding(This,szUrl,pbc,ppb) (This)->lpVtbl->CreateBinding(This,szUrl,pbc,ppb)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IBindProtocol_CreateBinding_Proxy(IBindProtocol *This,LPCWSTR szUrl,IBindCtx *pbc,IBinding **ppb);")
cpp_quote("  void __RPC_STUB IBindProtocol_CreateBinding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")

cpp_quote("#ifndef _LPBINDING_DEFINED")
cpp_quote("#define _LPBINDING_DEFINED")

[
    object,
    uuid(79eac9c0-baf9-11ce-8c82-00aa004ba90b),
    pointer_default(unique)
]
interface IBinding: IUnknown
{
    typedef [unique] IBinding *LPBINDING;

    HRESULT Abort();
    HRESULT Suspend();
    HRESULT Resume();
    HRESULT SetPriority([in] LONG nPriority);
    HRESULT GetPriority([out] LONG *pnPriority);

    [local]
    HRESULT GetBindResult(
            [out] CLSID *pclsidProtocol,
            [out] DWORD *pdwResult,
            [out] LPOLESTR *pszResult,
            [in, out] DWORD *pdwReserved);
    [call_as(GetBindResult)]
    HRESULT RemoteGetBindResult(
            [out] CLSID *pclsidProtocol,
            [out] DWORD *pdwResult,
            [out] LPOLESTR *pszResult,
            [in] DWORD dwReserved);
}

cpp_quote("#endif")

cpp_quote("#ifndef _LPBINDSTATUSCALLBACK_DEFINED")
cpp_quote("#define _LPBINDSTATUSCALLBACK_DEFINED")

[
    object,
    uuid(79eac9c1-baf9-11ce-8c82-00aa004ba90b),
    pointer_default(unique)
]
interface IBindStatusCallback: IUnknown
{
    typedef [unique] IBindStatusCallback *LPBINDSTATUSCALLBACK;

    typedef enum {
        BINDVERB_GET = 0,
        BINDVERB_POST = 1,
        BINDVERB_PUT = 2,
        BINDVERB_CUSTOM = 3
    } BINDVERB;

    typedef enum  {
        BINDINFOF_URLENCODESTGMEDDATA = 0x1,
        BINDINFOF_URLENCODEDEXTRAINFO = 0x2
    } BINDINFOF;

    typedef enum {
        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 {
        URL_ENCODING_NONE = 0,
        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, *PREMSECURITY_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, *LPREMFORMATETC;

    typedef enum {
        BINDINFO_OPTIONS_WININETFLAG = 0x10000,
        BINDINFO_OPTIONS_ENABLE_UTF8 = 0x20000,
        BINDINFO_OPTIONS_DISABLE_UTF8 = 0x40000,
        BINDINFO_OPTIONS_USE_IE_ENCODING = 0x80000,
        BINDINFO_OPTIONS_BINDTOOBJECT = 0x100000,
        BINDINFO_OPTIONS_SECURITYOPTOUT = 0x200000,
        BINDINFO_OPTIONS_IGNOREMIMETEXTPLAIN = 0x400000,
        BINDINFO_OPTIONS_USEBINDSTRINGCREDS = 0x800000,
        BINDINFO_OPTIONS_IGNOREHTTPHTTPSREDIRECTS = 0x1000000,
        BINDINFO_OPTIONS_SHDOCVW_NAVIGATE = 0x80000000
    } BINDINFO_OPTIONS;

    typedef enum {
        BSCF_FIRSTDATANOTIFICATION = 0x1,
        BSCF_INTERMEDIATEDATANOTIFICATION = 0x2,
        BSCF_LASTDATANOTIFICATION = 0x4,
        BSCF_DATAFULLYAVAILABLE = 0x8,
        BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10
    } BSCF;

    typedef enum tagBINDSTATUS {
        BINDSTATUS_FINDINGRESOURCE = 1,
        BINDSTATUS_CONNECTING,
        BINDSTATUS_REDIRECTING,
        BINDSTATUS_BEGINDOWNLOADDATA,
        BINDSTATUS_DOWNLOADINGDATA,
        BINDSTATUS_ENDDOWNLOADDATA,
        BINDSTATUS_BEGINDOWNLOADCOMPONENTS,
        BINDSTATUS_INSTALLINGCOMPONENTS,
        BINDSTATUS_ENDDOWNLOADCOMPONENTS,
        BINDSTATUS_USINGCACHEDCOPY,
        BINDSTATUS_SENDINGREQUEST,
        BINDSTATUS_CLASSIDAVAILABLE,
        BINDSTATUS_MIMETYPEAVAILABLE,
        BINDSTATUS_CACHEFILENAMEAVAILABLE,
        BINDSTATUS_BEGINSYNCOPERATION,
        BINDSTATUS_ENDSYNCOPERATION,
        BINDSTATUS_BEGINUPLOADDATA,
        BINDSTATUS_UPLOADINGDATA,
        BINDSTATUS_ENDUPLOADDATA,
        BINDSTATUS_PROTOCOLCLASSID,
        BINDSTATUS_ENCODING,
        BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE,
        BINDSTATUS_CLASSINSTALLLOCATION,
        BINDSTATUS_DECODING,
        BINDSTATUS_LOADINGMIMEHANDLER,
        BINDSTATUS_CONTENTDISPOSITIONATTACH,
        BINDSTATUS_FILTERREPORTMIMETYPE,
        BINDSTATUS_CLSIDCANINSTANTIATE,
        BINDSTATUS_IUNKNOWNAVAILABLE,
        BINDSTATUS_DIRECTBIND,
        BINDSTATUS_RAWMIMETYPE,
        BINDSTATUS_PROXYDETECTING,
        BINDSTATUS_ACCEPTRANGES,
        BINDSTATUS_COOKIE_SENT,
        BINDSTATUS_COMPACT_POLICY_RECEIVED,
        BINDSTATUS_COOKIE_SUPPRESSED,
        BINDSTATUS_COOKIE_STATE_UNKNOWN,
        BINDSTATUS_COOKIE_STATE_ACCEPT,
        BINDSTATUS_COOKIE_STATE_REJECT,
        BINDSTATUS_COOKIE_STATE_PROMPT,
        BINDSTATUS_COOKIE_STATE_LEASH,
        BINDSTATUS_COOKIE_STATE_DOWNGRADE,
        BINDSTATUS_POLICY_HREF,
        BINDSTATUS_P3P_HEADER,
        BINDSTATUS_SESSION_COOKIE_RECEIVED,
        BINDSTATUS_PERSISTENT_COOKIE_RECEIVED,
        BINDSTATUS_SESSION_COOKIES_ALLOWED,
        BINDSTATUS_CACHECONTROL,
        BINDSTATUS_CONTENTDISPOSITIONFILENAME,
        BINDSTATUS_MIMETEXTPLAINMISMATCH,
        BINDSTATUS_PUBLISHERAVAILABLE,
        BINDSTATUS_DISPLAYNAMEAVAILABLE
    } BINDSTATUS;

    HRESULT OnStartBinding(
            [in] DWORD dwReserved,
            [in] IBinding *pib);

    HRESULT GetPriority([out] LONG *pnPriority);
    HRESULT OnLowResource([in] DWORD reserved);

    HRESULT OnProgress(
            [in] ULONG ulProgress,
            [in] ULONG ulProgressMax,
            [in] ULONG ulStatusCode,
            [in, unique] LPCWSTR szStatusText);

    HRESULT OnStopBinding(
            [in] HRESULT hresult,
            [in, unique] LPCWSTR szError);

    [local]
    HRESULT GetBindInfo(
            [out] DWORD *grfBINDF,
            [in, out, unique] BINDINFO *pbindinfo);
    [call_as(GetBindInfo)]
    HRESULT RemoteGetBindInfo(
            [out] DWORD *grfBINDF,
            [in, out, unique] RemBINDINFO *pbindinfo,
            [in, out, unique] RemSTGMEDIUM *pstgmed);

    [local]
    HRESULT OnDataAvailable(
            [in] DWORD grfBSCF,
            [in] DWORD dwSize,
            [in] FORMATETC *pformatetc,
            [in] STGMEDIUM *pstgmed);
    [call_as(OnDataAvailable)]
    HRESULT RemoteOnDataAvailable(
            [in] DWORD grfBSCF,
            [in] DWORD dwSize,
            [in] RemFORMATETC *pformatetc,
            [in] RemSTGMEDIUM *pstgmed);

    HRESULT OnObjectAvailable(
            [in] REFIID riid,
            [in, iid_is(riid)] IUnknown *punk);
}

cpp_quote("#endif")

cpp_quote("#ifndef _LPAUTHENTICATION_DEFINED")
cpp_quote("#define _LPAUTHENTICATION_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0182_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0182_v0_0_s_ifspec;")
cpp_quote("#ifndef __IAuthenticate_INTERFACE_DEFINED__")
cpp_quote("#define __IAuthenticate_INTERFACE_DEFINED__")
cpp_quote("  typedef IAuthenticate *LPAUTHENTICATION;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IAuthenticate;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IAuthenticate : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Authenticate(HWND *phwnd,LPWSTR *pszUsername,LPWSTR *pszPassword) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IAuthenticateVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IAuthenticate *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IAuthenticate *This);")
cpp_quote("      ULONG (WINAPI *Release)(IAuthenticate *This);")
cpp_quote("      HRESULT (WINAPI *Authenticate)(IAuthenticate *This,HWND *phwnd,LPWSTR *pszUsername,LPWSTR *pszPassword);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IAuthenticateVtbl;")
cpp_quote("  struct IAuthenticate {")
cpp_quote("    CONST_VTBL struct IAuthenticateVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IAuthenticate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IAuthenticate_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IAuthenticate_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IAuthenticate_Authenticate(This,phwnd,pszUsername,pszPassword) (This)->lpVtbl->Authenticate(This,phwnd,pszUsername,pszPassword)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IAuthenticate_Authenticate_Proxy(IAuthenticate *This,HWND *phwnd,LPWSTR *pszUsername,LPWSTR *pszPassword);")
cpp_quote("  void __RPC_STUB IAuthenticate_Authenticate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPHTTPNEGOTIATE_DEFINED")
cpp_quote("#define _LPHTTPNEGOTIATE_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0183_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0183_v0_0_s_ifspec;")
cpp_quote("#ifndef __IHttpNegotiate_INTERFACE_DEFINED__")
cpp_quote("#define __IHttpNegotiate_INTERFACE_DEFINED__")
cpp_quote("  typedef IHttpNegotiate *LPHTTPNEGOTIATE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IHttpNegotiate;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IHttpNegotiate : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI BeginningTransaction(LPCWSTR szURL,LPCWSTR szHeaders,DWORD dwReserved,LPWSTR *pszAdditionalHeaders) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnResponse(DWORD dwResponseCode,LPCWSTR szResponseHeaders,LPCWSTR szRequestHeaders,LPWSTR *pszAdditionalRequestHeaders) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IHttpNegotiateVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IHttpNegotiate *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IHttpNegotiate *This);")
cpp_quote("      ULONG (WINAPI *Release)(IHttpNegotiate *This);")
cpp_quote("      HRESULT (WINAPI *BeginningTransaction)(IHttpNegotiate *This,LPCWSTR szURL,LPCWSTR szHeaders,DWORD dwReserved,LPWSTR *pszAdditionalHeaders);")
cpp_quote("      HRESULT (WINAPI *OnResponse)(IHttpNegotiate *This,DWORD dwResponseCode,LPCWSTR szResponseHeaders,LPCWSTR szRequestHeaders,LPWSTR *pszAdditionalRequestHeaders);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IHttpNegotiateVtbl;")
cpp_quote("  struct IHttpNegotiate {")
cpp_quote("    CONST_VTBL struct IHttpNegotiateVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IHttpNegotiate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IHttpNegotiate_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IHttpNegotiate_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IHttpNegotiate_BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders) (This)->lpVtbl->BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders)")
cpp_quote("#define IHttpNegotiate_OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders) (This)->lpVtbl->OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IHttpNegotiate_BeginningTransaction_Proxy(IHttpNegotiate *This,LPCWSTR szURL,LPCWSTR szHeaders,DWORD dwReserved,LPWSTR *pszAdditionalHeaders);")
cpp_quote("  void __RPC_STUB IHttpNegotiate_BeginningTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IHttpNegotiate_OnResponse_Proxy(IHttpNegotiate *This,DWORD dwResponseCode,LPCWSTR szResponseHeaders,LPCWSTR szRequestHeaders,LPWSTR *pszAdditionalRequestHeaders);")
cpp_quote("  void __RPC_STUB IHttpNegotiate_OnResponse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPHTTPNEGOTIATE2_DEFINED")
cpp_quote("#define _LPHTTPNEGOTIATE2_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0184_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0184_v0_0_s_ifspec;")
cpp_quote("#ifndef __IHttpNegotiate2_INTERFACE_DEFINED__")
cpp_quote("#define __IHttpNegotiate2_INTERFACE_DEFINED__")
cpp_quote("  typedef IHttpNegotiate2 *LPHTTPNEGOTIATE2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IHttpNegotiate2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IHttpNegotiate2 : public IHttpNegotiate {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetRootSecurityId(BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IHttpNegotiate2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IHttpNegotiate2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IHttpNegotiate2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IHttpNegotiate2 *This);")
cpp_quote("      HRESULT (WINAPI *BeginningTransaction)(IHttpNegotiate2 *This,LPCWSTR szURL,LPCWSTR szHeaders,DWORD dwReserved,LPWSTR *pszAdditionalHeaders);")
cpp_quote("      HRESULT (WINAPI *OnResponse)(IHttpNegotiate2 *This,DWORD dwResponseCode,LPCWSTR szResponseHeaders,LPCWSTR szRequestHeaders,LPWSTR *pszAdditionalRequestHeaders);")
cpp_quote("      HRESULT (WINAPI *GetRootSecurityId)(IHttpNegotiate2 *This,BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IHttpNegotiate2Vtbl;")
cpp_quote("  struct IHttpNegotiate2 {")
cpp_quote("    CONST_VTBL struct IHttpNegotiate2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IHttpNegotiate2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IHttpNegotiate2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IHttpNegotiate2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IHttpNegotiate2_BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders) (This)->lpVtbl->BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders)")
cpp_quote("#define IHttpNegotiate2_OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders) (This)->lpVtbl->OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders)")
cpp_quote("#define IHttpNegotiate2_GetRootSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetRootSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IHttpNegotiate2_GetRootSecurityId_Proxy(IHttpNegotiate2 *This,BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved);")
cpp_quote("  void __RPC_STUB IHttpNegotiate2_GetRootSecurityId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPWININETFILESTREAM_DEFINED")
cpp_quote("#define _LPWININETFILESTREAM_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0185_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0185_v0_0_s_ifspec;")
cpp_quote("#ifndef __IWinInetFileStream_INTERFACE_DEFINED__")
cpp_quote("#define __IWinInetFileStream_INTERFACE_DEFINED__")
cpp_quote("  typedef IWinInetFileStream *LPWININETFILESTREAM;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IWinInetFileStream;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IWinInetFileStream : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetHandleForUnlock(DWORD_PTR hWinInetLockHandle,DWORD_PTR dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetDeleteFile(DWORD_PTR dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IWinInetFileStreamVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IWinInetFileStream *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IWinInetFileStream *This);")
cpp_quote("      ULONG (WINAPI *Release)(IWinInetFileStream *This);")
cpp_quote("      HRESULT (WINAPI *SetHandleForUnlock)(IWinInetFileStream *This,DWORD_PTR hWinInetLockHandle,DWORD_PTR dwReserved);")
cpp_quote("      HRESULT (WINAPI *SetDeleteFile)(IWinInetFileStream *This,DWORD_PTR dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IWinInetFileStreamVtbl;")
cpp_quote("  struct IWinInetFileStream {")
cpp_quote("    CONST_VTBL struct IWinInetFileStreamVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IWinInetFileStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IWinInetFileStream_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IWinInetFileStream_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IWinInetFileStream_SetHandleForUnlock(This,hWinInetLockHandle,dwReserved) (This)->lpVtbl->SetHandleForUnlock(This,hWinInetLockHandle,dwReserved)")
cpp_quote("#define IWinInetFileStream_SetDeleteFile(This,dwReserved) (This)->lpVtbl->SetDeleteFile(This,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IWinInetFileStream_SetHandleForUnlock_Proxy(IWinInetFileStream *This,DWORD_PTR hWinInetLockHandle,DWORD_PTR dwReserved);")
cpp_quote("  void __RPC_STUB IWinInetFileStream_SetHandleForUnlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IWinInetFileStream_SetDeleteFile_Proxy(IWinInetFileStream *This,DWORD_PTR dwReserved);")
cpp_quote("  void __RPC_STUB IWinInetFileStream_SetDeleteFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPWINDOWFORBINDINGUI_DEFINED")
cpp_quote("#define _LPWINDOWFORBINDINGUI_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0186_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0186_v0_0_s_ifspec;")
cpp_quote("#ifndef __IWindowForBindingUI_INTERFACE_DEFINED__")
cpp_quote("#define __IWindowForBindingUI_INTERFACE_DEFINED__")
cpp_quote("  typedef IWindowForBindingUI *LPWINDOWFORBINDINGUI;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IWindowForBindingUI;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IWindowForBindingUI : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetWindow(REFGUID rguidReason,HWND *phwnd) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IWindowForBindingUIVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IWindowForBindingUI *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IWindowForBindingUI *This);")
cpp_quote("      ULONG (WINAPI *Release)(IWindowForBindingUI *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IWindowForBindingUI *This,REFGUID rguidReason,HWND *phwnd);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IWindowForBindingUIVtbl;")
cpp_quote("  struct IWindowForBindingUI {")
cpp_quote("    CONST_VTBL struct IWindowForBindingUIVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IWindowForBindingUI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IWindowForBindingUI_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IWindowForBindingUI_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IWindowForBindingUI_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IWindowForBindingUI_GetWindow_Proxy(IWindowForBindingUI *This,REFGUID rguidReason,HWND *phwnd);")
cpp_quote("  void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPCODEINSTALL_DEFINED")
cpp_quote("#define _LPCODEINSTALL_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0187_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0187_v0_0_s_ifspec;")
cpp_quote("#ifndef __ICodeInstall_INTERFACE_DEFINED__")
cpp_quote("#define __ICodeInstall_INTERFACE_DEFINED__")
cpp_quote("  typedef ICodeInstall *LPCODEINSTALL;")
cpp_quote("")
cpp_quote("  typedef enum __MIDL_ICodeInstall_0001 {")
cpp_quote("    CIP_DISK_FULL = 0,")
cpp_quote("    CIP_ACCESS_DENIED,CIP_NEWER_VERSION_EXISTS,CIP_OLDER_VERSION_EXISTS,")
cpp_quote("    CIP_NAME_CONFLICT,CIP_TRUST_VERIFICATION_COMPONENT_MISSING,CIP_EXE_SELF_REGISTERATION_TIMEOUT,")
cpp_quote("    CIP_UNSAFE_TO_ABORT,CIP_NEED_REBOOT,CIP_NEED_REBOOT_UI_PERMISSION")
cpp_quote("  } CIP_STATUS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ICodeInstall;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICodeInstall : public IWindowForBindingUI {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnCodeInstallProblem(ULONG ulStatusCode,LPCWSTR szDestination,LPCWSTR szSource,DWORD dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICodeInstallVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICodeInstall *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICodeInstall *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICodeInstall *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(ICodeInstall *This,REFGUID rguidReason,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *OnCodeInstallProblem)(ICodeInstall *This,ULONG ulStatusCode,LPCWSTR szDestination,LPCWSTR szSource,DWORD dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICodeInstallVtbl;")
cpp_quote("  struct ICodeInstall {")
cpp_quote("    CONST_VTBL struct ICodeInstallVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICodeInstall_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICodeInstall_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICodeInstall_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICodeInstall_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)")
cpp_quote("#define ICodeInstall_OnCodeInstallProblem(This,ulStatusCode,szDestination,szSource,dwReserved) (This)->lpVtbl->OnCodeInstallProblem(This,ulStatusCode,szDestination,szSource,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICodeInstall_OnCodeInstallProblem_Proxy(ICodeInstall *This,ULONG ulStatusCode,LPCWSTR szDestination,LPCWSTR szSource,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB ICodeInstall_OnCodeInstallProblem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPWININETINFO_DEFINED")
cpp_quote("#define _LPWININETINFO_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0188_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0188_v0_0_s_ifspec;")
cpp_quote("#ifndef __IWinInetInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IWinInetInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef IWinInetInfo *LPWININETINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IWinInetInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IWinInetInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI QueryOption(DWORD dwOption,LPVOID pBuffer,DWORD *pcbBuf) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IWinInetInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IWinInetInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IWinInetInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IWinInetInfo *This);")
cpp_quote("      HRESULT (WINAPI *QueryOption)(IWinInetInfo *This,DWORD dwOption,LPVOID pBuffer,DWORD *pcbBuf);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IWinInetInfoVtbl;")
cpp_quote("  struct IWinInetInfo {")
cpp_quote("    CONST_VTBL struct IWinInetInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IWinInetInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IWinInetInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IWinInetInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IWinInetInfo_QueryOption(This,dwOption,pBuffer,pcbBuf) (This)->lpVtbl->QueryOption(This,dwOption,pBuffer,pcbBuf)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IWinInetInfo_RemoteQueryOption_Proxy(IWinInetInfo *This,DWORD dwOption,BYTE *pBuffer,DWORD *pcbBuf);")
cpp_quote("  void __RPC_STUB IWinInetInfo_RemoteQueryOption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#define WININETINFO_OPTION_LOCK_HANDLE 65534")
cpp_quote("")
cpp_quote("#ifndef _LPHTTPSECURITY_DEFINED")
cpp_quote("#define _LPHTTPSECURITY_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0189_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0189_v0_0_s_ifspec;")
cpp_quote("#ifndef __IHttpSecurity_INTERFACE_DEFINED__")
cpp_quote("#define __IHttpSecurity_INTERFACE_DEFINED__")
cpp_quote("")
cpp_quote("  typedef IHttpSecurity *LPHTTPSECURITY;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IHttpSecurity;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IHttpSecurity : public IWindowForBindingUI {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnSecurityProblem(DWORD dwProblem) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IHttpSecurityVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IHttpSecurity *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IHttpSecurity *This);")
cpp_quote("      ULONG (WINAPI *Release)(IHttpSecurity *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IHttpSecurity *This,REFGUID rguidReason,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *OnSecurityProblem)(IHttpSecurity *This,DWORD dwProblem);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IHttpSecurityVtbl;")
cpp_quote("  struct IHttpSecurity {")
cpp_quote("    CONST_VTBL struct IHttpSecurityVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IHttpSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IHttpSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IHttpSecurity_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IHttpSecurity_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)")
cpp_quote("#define IHttpSecurity_OnSecurityProblem(This,dwProblem) (This)->lpVtbl->OnSecurityProblem(This,dwProblem)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IHttpSecurity_OnSecurityProblem_Proxy(IHttpSecurity *This,DWORD dwProblem);")
cpp_quote("  void __RPC_STUB IHttpSecurity_OnSecurityProblem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPWININETHTTPINFO_DEFINED")
cpp_quote("#define _LPWININETHTTPINFO_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0190_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0190_v0_0_s_ifspec;")
cpp_quote("#ifndef __IWinInetHttpInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IWinInetHttpInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef IWinInetHttpInfo *LPWININETHTTPINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IWinInetHttpInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IWinInetHttpInfo : public IWinInetInfo {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI QueryInfo(DWORD dwOption,LPVOID pBuffer,DWORD *pcbBuf,DWORD *pdwFlags,DWORD *pdwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IWinInetHttpInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IWinInetHttpInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IWinInetHttpInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IWinInetHttpInfo *This);")
cpp_quote("      HRESULT (WINAPI *QueryOption)(IWinInetHttpInfo *This,DWORD dwOption,LPVOID pBuffer,DWORD *pcbBuf);")
cpp_quote("      HRESULT (WINAPI *QueryInfo)(IWinInetHttpInfo *This,DWORD dwOption,LPVOID pBuffer,DWORD *pcbBuf,DWORD *pdwFlags,DWORD *pdwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IWinInetHttpInfoVtbl;")
cpp_quote("  struct IWinInetHttpInfo {")
cpp_quote("    CONST_VTBL struct IWinInetHttpInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IWinInetHttpInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IWinInetHttpInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IWinInetHttpInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IWinInetHttpInfo_QueryOption(This,dwOption,pBuffer,pcbBuf) (This)->lpVtbl->QueryOption(This,dwOption,pBuffer,pcbBuf)")
cpp_quote("#define IWinInetHttpInfo_QueryInfo(This,dwOption,pBuffer,pcbBuf,pdwFlags,pdwReserved) (This)->lpVtbl->QueryInfo(This,dwOption,pBuffer,pcbBuf,pdwFlags,pdwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IWinInetHttpInfo_RemoteQueryInfo_Proxy(IWinInetHttpInfo *This,DWORD dwOption,BYTE *pBuffer,DWORD *pcbBuf,DWORD *pdwFlags,DWORD *pdwReserved);")
cpp_quote("  void __RPC_STUB IWinInetHttpInfo_RemoteQueryInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPWININETCACHEHINTS_DEFINED")
cpp_quote("#define _LPWININETCACHEHINTS_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0191_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0191_v0_0_s_ifspec;")
cpp_quote("#ifndef __IWinInetCacheHints_INTERFACE_DEFINED__")
cpp_quote("#define __IWinInetCacheHints_INTERFACE_DEFINED__")
cpp_quote("  typedef IWinInetCacheHints *LPWININETCACHEHINTS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IWinInetCacheHints;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IWinInetCacheHints : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetCacheExtension(LPCWSTR pwzExt,LPVOID pszCacheFile,DWORD *pcbCacheFile,DWORD *pdwWinInetError,DWORD *pdwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IWinInetCacheHintsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IWinInetCacheHints *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IWinInetCacheHints *This);")
cpp_quote("      ULONG (WINAPI *Release)(IWinInetCacheHints *This);")
cpp_quote("      HRESULT (WINAPI *SetCacheExtension)(IWinInetCacheHints *This,LPCWSTR pwzExt,LPVOID pszCacheFile,DWORD *pcbCacheFile,DWORD *pdwWinInetError,DWORD *pdwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IWinInetCacheHintsVtbl;")
cpp_quote("  struct IWinInetCacheHints {")
cpp_quote("    CONST_VTBL struct IWinInetCacheHintsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IWinInetCacheHints_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IWinInetCacheHints_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IWinInetCacheHints_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IWinInetCacheHints_SetCacheExtension(This,pwzExt,pszCacheFile,pcbCacheFile,pdwWinInetError,pdwReserved) (This)->lpVtbl->SetCacheExtension(This,pwzExt,pszCacheFile,pcbCacheFile,pdwWinInetError,pdwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IWinInetCacheHints_SetCacheExtension_Proxy(IWinInetCacheHints *This,LPCWSTR pwzExt,LPVOID pszCacheFile,DWORD *pcbCacheFile,DWORD *pdwWinInetError,DWORD *pdwReserved);")
cpp_quote("  void __RPC_STUB IWinInetCacheHints_SetCacheExtension_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#define SID_IBindHost IID_IBindHost")
cpp_quote("#define SID_SBindHost IID_IBindHost")
cpp_quote("#ifndef _LPBINDHOST_DEFINED")
cpp_quote("#define _LPBINDHOST_DEFINED")
cpp_quote("  EXTERN_C const GUID SID_BindHost;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0192_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0192_v0_0_s_ifspec;")
cpp_quote("#ifndef __IBindHost_INTERFACE_DEFINED__")
cpp_quote("#define __IBindHost_INTERFACE_DEFINED__")
cpp_quote("  typedef IBindHost *LPBINDHOST;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IBindHost;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IBindHost : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CreateMoniker(LPOLESTR szName,IBindCtx *pBC,IMoniker **ppmk,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI MonikerBindToStorage(IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,void **ppvObj) = 0;")
cpp_quote("    virtual HRESULT WINAPI MonikerBindToObject(IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,void **ppvObj) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IBindHostVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IBindHost *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IBindHost *This);")
cpp_quote("      ULONG (WINAPI *Release)(IBindHost *This);")
cpp_quote("      HRESULT (WINAPI *CreateMoniker)(IBindHost *This,LPOLESTR szName,IBindCtx *pBC,IMoniker **ppmk,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *MonikerBindToStorage)(IBindHost *This,IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,void **ppvObj);")
cpp_quote("      HRESULT (WINAPI *MonikerBindToObject)(IBindHost *This,IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,void **ppvObj);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IBindHostVtbl;")
cpp_quote("  struct IBindHost {")
cpp_quote("    CONST_VTBL struct IBindHostVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IBindHost_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IBindHost_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IBindHost_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IBindHost_CreateMoniker(This,szName,pBC,ppmk,dwReserved) (This)->lpVtbl->CreateMoniker(This,szName,pBC,ppmk,dwReserved)")
cpp_quote("#define IBindHost_MonikerBindToStorage(This,pMk,pBC,pBSC,riid,ppvObj) (This)->lpVtbl->MonikerBindToStorage(This,pMk,pBC,pBSC,riid,ppvObj)")
cpp_quote("#define IBindHost_MonikerBindToObject(This,pMk,pBC,pBSC,riid,ppvObj) (This)->lpVtbl->MonikerBindToObject(This,pMk,pBC,pBSC,riid,ppvObj)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IBindHost_CreateMoniker_Proxy(IBindHost *This,LPOLESTR szName,IBindCtx *pBC,IMoniker **ppmk,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IBindHost_CreateMoniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IBindHost_RemoteMonikerBindToStorage_Proxy(IBindHost *This,IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,IUnknown **ppvObj);")
cpp_quote("  void __RPC_STUB IBindHost_RemoteMonikerBindToStorage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IBindHost_RemoteMonikerBindToObject_Proxy(IBindHost *This,IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,IUnknown **ppvObj);")
cpp_quote("  void __RPC_STUB IBindHost_RemoteMonikerBindToObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#define URLOSTRM_USECACHEDCOPY_ONLY 0x1")
cpp_quote("#define URLOSTRM_USECACHEDCOPY 0x2")
cpp_quote("#define URLOSTRM_GETNEWESTVERSION 0x3")
cpp_quote("")
cpp_quote("  struct IBindStatusCallback;")
cpp_quote("")
cpp_quote("  STDAPI HlinkSimpleNavigateToString(LPCWSTR szTarget,LPCWSTR szLocation,LPCWSTR szTargetFrameName,IUnknown *pUnk,IBindCtx *pbc,IBindStatusCallback *,DWORD grfHLNF,DWORD dwReserved);")
cpp_quote("  STDAPI HlinkSimpleNavigateToMoniker(IMoniker *pmkTarget,LPCWSTR szLocation,LPCWSTR szTargetFrameName,IUnknown *pUnk,IBindCtx *pbc,IBindStatusCallback *,DWORD grfHLNF,DWORD dwReserved);")
cpp_quote("  STDAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPTSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("  STDAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
cpp_quote("")
cpp_quote("#define URLOpenStream __MINGW_NAME_AW(URLOpenStream)")
cpp_quote("#define URLOpenPullStream __MINGW_NAME_AW(URLOpenPullStream)")
cpp_quote("#define URLDownloadToFile __MINGW_NAME_AW(URLDownloadToFile)")
cpp_quote("#define URLDownloadToCacheFile __MINGW_NAME_AW(URLDownloadToCacheFile)")
cpp_quote("#define URLOpenBlockingStream __MINGW_NAME_AW(URLOpenBlockingStream)")
cpp_quote("")
cpp_quote("  STDAPI HlinkGoBack(IUnknown *pUnk);")
cpp_quote("  STDAPI HlinkGoForward(IUnknown *pUnk);")
cpp_quote("  STDAPI HlinkNavigateString(IUnknown *pUnk,LPCWSTR szTarget);")
cpp_quote("  STDAPI HlinkNavigateMoniker(IUnknown *pUnk,IMoniker *pmkTarget);")
cpp_quote("")
cpp_quote("#ifndef _URLMON_NO_ASYNC_PLUGABLE_PROTOCOLS_")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNET")
cpp_quote("#define _LPIINTERNET")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0193_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0193_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternet_INTERFACE_DEFINED__")
cpp_quote("#define __IInternet_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternet *LPIINTERNET;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternet;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternet : public IUnknown {")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternet *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternet *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternet *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetVtbl;")
cpp_quote("  struct IInternet {")
cpp_quote("    CONST_VTBL struct IInternetVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternet_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternet_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETBINDINFO")
cpp_quote("#define _LPIINTERNETBINDINFO")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0194_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0194_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetBindInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetBindInfo_INTERFACE_DEFINED__")
cpp_quote("")
cpp_quote("  typedef IInternetBindInfo *LPIINTERNETBINDINFO;")
cpp_quote("")
cpp_quote("  typedef enum tagBINDSTRING {")
cpp_quote("    BINDSTRING_HEADERS = 1,")
cpp_quote("    BINDSTRING_ACCEPT_MIMES,BINDSTRING_EXTRA_URL,BINDSTRING_LANGUAGE,BINDSTRING_USERNAME,")
cpp_quote("    BINDSTRING_PASSWORD,BINDSTRING_UA_PIXELS,BINDSTRING_UA_COLOR,BINDSTRING_OS,")
cpp_quote("    BINDSTRING_USER_AGENT,BINDSTRING_ACCEPT_ENCODINGS,BINDSTRING_POST_COOKIE,")
cpp_quote("    BINDSTRING_POST_DATA_MIME,BINDSTRING_URL,BINDSTRING_IID,BINDSTRING_FLAG_BIND_TO_OBJECT,")
cpp_quote("    BINDSTRING_PTR_BIND_CONTEXT")
cpp_quote("  } BINDSTRING;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetBindInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetBindInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetBindInfo(DWORD *grfBINDF,BINDINFO *pbindinfo) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetBindString(ULONG ulStringType,LPOLESTR *ppwzStr,ULONG cEl,ULONG *pcElFetched) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetBindInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetBindInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetBindInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetBindInfo *This);")
cpp_quote("      HRESULT (WINAPI *GetBindInfo)(IInternetBindInfo *This,DWORD *grfBINDF,BINDINFO *pbindinfo);")
cpp_quote("      HRESULT (WINAPI *GetBindString)(IInternetBindInfo *This,ULONG ulStringType,LPOLESTR *ppwzStr,ULONG cEl,ULONG *pcElFetched);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetBindInfoVtbl;")
cpp_quote("  struct IInternetBindInfo {")
cpp_quote("    CONST_VTBL struct IInternetBindInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetBindInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetBindInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetBindInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetBindInfo_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)")
cpp_quote("#define IInternetBindInfo_GetBindString(This,ulStringType,ppwzStr,cEl,pcElFetched) (This)->lpVtbl->GetBindString(This,ulStringType,ppwzStr,cEl,pcElFetched)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetBindInfo_GetBindInfo_Proxy(IInternetBindInfo *This,DWORD *grfBINDF,BINDINFO *pbindinfo);")
cpp_quote("  void __RPC_STUB IInternetBindInfo_GetBindInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetBindInfo_GetBindString_Proxy(IInternetBindInfo *This,ULONG ulStringType,LPOLESTR *ppwzStr,ULONG cEl,ULONG *pcElFetched);")
cpp_quote("  void __RPC_STUB IInternetBindInfo_GetBindString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETPROTOCOLROOT_DEFINED")
cpp_quote("#define _LPIINTERNETPROTOCOLROOT_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0195_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0195_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetProtocolRoot_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetProtocolRoot_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;")
cpp_quote("")
cpp_quote("  typedef enum _tagPI_FLAGS {")
cpp_quote("    PI_PARSE_URL = 0x1,PI_FILTER_MODE = 0x2,PI_FORCE_ASYNC = 0x4,PI_USE_WORKERTHREAD = 0x8,PI_MIMEVERIFICATION = 0x10,PI_CLSIDLOOKUP = 0x20,")
cpp_quote("    PI_DATAPROGRESS = 0x40,PI_SYNCHRONOUS = 0x80,PI_APARTMENTTHREADED = 0x100,PI_CLASSINSTALL = 0x200,PI_PASSONBINDCTX = 0x2000,")
cpp_quote("    PI_NOMIMEHANDLER = 0x8000,PI_LOADAPPDIRECT = 0x4000,PD_FORCE_SWITCH = 0x10000,PI_PREFERDEFAULTHANDLER = 0x20000")
cpp_quote("  } PI_FLAGS;")
cpp_quote("")
cpp_quote("  typedef struct _tagPROTOCOLDATA {")
cpp_quote("    DWORD grfFlags;")
cpp_quote("    DWORD dwState;")
cpp_quote("    LPVOID pData;")
cpp_quote("    ULONG cbData;")
cpp_quote("  } PROTOCOLDATA;")
cpp_quote("")
cpp_quote("  typedef struct _tagStartParam {")
cpp_quote("    IID iid;")
cpp_quote("    IBindCtx *pIBindCtx;")
cpp_quote("    IUnknown *pItf;")
cpp_quote("  } StartParam;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetProtocolRoot;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetProtocolRoot : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Start(LPCWSTR szUrl,IInternetProtocolSink *pOIProtSink,IInternetBindInfo *pOIBindInfo,DWORD grfPI,HANDLE_PTR dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI Continue(PROTOCOLDATA *pProtocolData) = 0;")
cpp_quote("    virtual HRESULT WINAPI Abort(HRESULT hrReason,DWORD dwOptions) = 0;")
cpp_quote("    virtual HRESULT WINAPI Terminate(DWORD dwOptions) = 0;")
cpp_quote("    virtual HRESULT WINAPI Suspend(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Resume(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetProtocolRootVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetProtocolRoot *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetProtocolRoot *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetProtocolRoot *This);")
cpp_quote("      HRESULT (WINAPI *Start)(IInternetProtocolRoot *This,LPCWSTR szUrl,IInternetProtocolSink *pOIProtSink,IInternetBindInfo *pOIBindInfo,DWORD grfPI,HANDLE_PTR dwReserved);")
cpp_quote("      HRESULT (WINAPI *Continue)(IInternetProtocolRoot *This,PROTOCOLDATA *pProtocolData);")
cpp_quote("      HRESULT (WINAPI *Abort)(IInternetProtocolRoot *This,HRESULT hrReason,DWORD dwOptions);")
cpp_quote("      HRESULT (WINAPI *Terminate)(IInternetProtocolRoot *This,DWORD dwOptions);")
cpp_quote("      HRESULT (WINAPI *Suspend)(IInternetProtocolRoot *This);")
cpp_quote("      HRESULT (WINAPI *Resume)(IInternetProtocolRoot *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetProtocolRootVtbl;")
cpp_quote("  struct IInternetProtocolRoot {")
cpp_quote("    CONST_VTBL struct IInternetProtocolRootVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetProtocolRoot_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetProtocolRoot_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetProtocolRoot_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetProtocolRoot_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)")
cpp_quote("#define IInternetProtocolRoot_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)")
cpp_quote("#define IInternetProtocolRoot_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)")
cpp_quote("#define IInternetProtocolRoot_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)")
cpp_quote("#define IInternetProtocolRoot_Suspend(This) (This)->lpVtbl->Suspend(This)")
cpp_quote("#define IInternetProtocolRoot_Resume(This) (This)->lpVtbl->Resume(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetProtocolRoot_Start_Proxy(IInternetProtocolRoot *This,LPCWSTR szUrl,IInternetProtocolSink *pOIProtSink,IInternetBindInfo *pOIBindInfo,DWORD grfPI,HANDLE_PTR dwReserved);")
cpp_quote("  void __RPC_STUB IInternetProtocolRoot_Start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolRoot_Continue_Proxy(IInternetProtocolRoot *This,PROTOCOLDATA *pProtocolData);")
cpp_quote("  void __RPC_STUB IInternetProtocolRoot_Continue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolRoot_Abort_Proxy(IInternetProtocolRoot *This,HRESULT hrReason,DWORD dwOptions);")
cpp_quote("  void __RPC_STUB IInternetProtocolRoot_Abort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolRoot_Terminate_Proxy(IInternetProtocolRoot *This,DWORD dwOptions);")
cpp_quote("  void __RPC_STUB IInternetProtocolRoot_Terminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolRoot_Suspend_Proxy(IInternetProtocolRoot *This);")
cpp_quote("  void __RPC_STUB IInternetProtocolRoot_Suspend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolRoot_Resume_Proxy(IInternetProtocolRoot *This);")
cpp_quote("  void __RPC_STUB IInternetProtocolRoot_Resume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETPROTOCOL_DEFINED")
cpp_quote("#define _LPIINTERNETPROTOCOL_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0196_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0196_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetProtocol_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetProtocol_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternetProtocol *LPIINTERNETPROTOCOL;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetProtocol;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetProtocol : public IInternetProtocolRoot {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Read(void *pv,ULONG cb,ULONG *pcbRead) = 0;")
cpp_quote("    virtual HRESULT WINAPI Seek(LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) = 0;")
cpp_quote("    virtual HRESULT WINAPI LockRequest(DWORD dwOptions) = 0;")
cpp_quote("    virtual HRESULT WINAPI UnlockRequest(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetProtocolVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetProtocol *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetProtocol *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetProtocol *This);")
cpp_quote("      HRESULT (WINAPI *Start)(IInternetProtocol *This,LPCWSTR szUrl,IInternetProtocolSink *pOIProtSink,IInternetBindInfo *pOIBindInfo,DWORD grfPI,HANDLE_PTR dwReserved);")
cpp_quote("      HRESULT (WINAPI *Continue)(IInternetProtocol *This,PROTOCOLDATA *pProtocolData);")
cpp_quote("      HRESULT (WINAPI *Abort)(IInternetProtocol *This,HRESULT hrReason,DWORD dwOptions);")
cpp_quote("      HRESULT (WINAPI *Terminate)(IInternetProtocol *This,DWORD dwOptions);")
cpp_quote("      HRESULT (WINAPI *Suspend)(IInternetProtocol *This);")
cpp_quote("      HRESULT (WINAPI *Resume)(IInternetProtocol *This);")
cpp_quote("      HRESULT (WINAPI *Read)(IInternetProtocol *This,void *pv,ULONG cb,ULONG *pcbRead);")
cpp_quote("      HRESULT (WINAPI *Seek)(IInternetProtocol *This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition);")
cpp_quote("      HRESULT (WINAPI *LockRequest)(IInternetProtocol *This,DWORD dwOptions);")
cpp_quote("      HRESULT (WINAPI *UnlockRequest)(IInternetProtocol *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetProtocolVtbl;")
cpp_quote("  struct IInternetProtocol {")
cpp_quote("    CONST_VTBL struct IInternetProtocolVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetProtocol_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetProtocol_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)")
cpp_quote("#define IInternetProtocol_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)")
cpp_quote("#define IInternetProtocol_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)")
cpp_quote("#define IInternetProtocol_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)")
cpp_quote("#define IInternetProtocol_Suspend(This) (This)->lpVtbl->Suspend(This)")
cpp_quote("#define IInternetProtocol_Resume(This) (This)->lpVtbl->Resume(This)")
cpp_quote("#define IInternetProtocol_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)")
cpp_quote("#define IInternetProtocol_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)")
cpp_quote("#define IInternetProtocol_LockRequest(This,dwOptions) (This)->lpVtbl->LockRequest(This,dwOptions)")
cpp_quote("#define IInternetProtocol_UnlockRequest(This) (This)->lpVtbl->UnlockRequest(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetProtocol_Read_Proxy(IInternetProtocol *This,void *pv,ULONG cb,ULONG *pcbRead);")
cpp_quote("  void __RPC_STUB IInternetProtocol_Read_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocol_Seek_Proxy(IInternetProtocol *This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition);")
cpp_quote("  void __RPC_STUB IInternetProtocol_Seek_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocol_LockRequest_Proxy(IInternetProtocol *This,DWORD dwOptions);")
cpp_quote("  void __RPC_STUB IInternetProtocol_LockRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocol_UnlockRequest_Proxy(IInternetProtocol *This);")
cpp_quote("  void __RPC_STUB IInternetProtocol_UnlockRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETPROTOCOLSINK_DEFINED")
cpp_quote("#define _LPIINTERNETPROTOCOLSINK_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0197_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0197_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetProtocolSink_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetProtocolSink_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetProtocolSink;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetProtocolSink : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Switch(PROTOCOLDATA *pProtocolData) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReportProgress(ULONG ulStatusCode,LPCWSTR szStatusText) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReportData(DWORD grfBSCF,ULONG ulProgress,ULONG ulProgressMax) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReportResult(HRESULT hrResult,DWORD dwError,LPCWSTR szResult) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetProtocolSinkVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetProtocolSink *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetProtocolSink *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetProtocolSink *This);")
cpp_quote("      HRESULT (WINAPI *Switch)(IInternetProtocolSink *This,PROTOCOLDATA *pProtocolData);")
cpp_quote("      HRESULT (WINAPI *ReportProgress)(IInternetProtocolSink *This,ULONG ulStatusCode,LPCWSTR szStatusText);")
cpp_quote("      HRESULT (WINAPI *ReportData)(IInternetProtocolSink *This,DWORD grfBSCF,ULONG ulProgress,ULONG ulProgressMax);")
cpp_quote("      HRESULT (WINAPI *ReportResult)(IInternetProtocolSink *This,HRESULT hrResult,DWORD dwError,LPCWSTR szResult);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetProtocolSinkVtbl;")
cpp_quote("  struct IInternetProtocolSink {")
cpp_quote("    CONST_VTBL struct IInternetProtocolSinkVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetProtocolSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetProtocolSink_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetProtocolSink_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetProtocolSink_Switch(This,pProtocolData) (This)->lpVtbl->Switch(This,pProtocolData)")
cpp_quote("#define IInternetProtocolSink_ReportProgress(This,ulStatusCode,szStatusText) (This)->lpVtbl->ReportProgress(This,ulStatusCode,szStatusText)")
cpp_quote("#define IInternetProtocolSink_ReportData(This,grfBSCF,ulProgress,ulProgressMax) (This)->lpVtbl->ReportData(This,grfBSCF,ulProgress,ulProgressMax)")
cpp_quote("#define IInternetProtocolSink_ReportResult(This,hrResult,dwError,szResult) (This)->lpVtbl->ReportResult(This,hrResult,dwError,szResult)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetProtocolSink_Switch_Proxy(IInternetProtocolSink *This,PROTOCOLDATA *pProtocolData);")
cpp_quote("  void __RPC_STUB IInternetProtocolSink_Switch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolSink_ReportProgress_Proxy(IInternetProtocolSink *This,ULONG ulStatusCode,LPCWSTR szStatusText);")
cpp_quote("  void __RPC_STUB IInternetProtocolSink_ReportProgress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolSink_ReportData_Proxy(IInternetProtocolSink *This,DWORD grfBSCF,ULONG ulProgress,ULONG ulProgressMax);")
cpp_quote("  void __RPC_STUB IInternetProtocolSink_ReportData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolSink_ReportResult_Proxy(IInternetProtocolSink *This,HRESULT hrResult,DWORD dwError,LPCWSTR szResult);")
cpp_quote("  void __RPC_STUB IInternetProtocolSink_ReportResult_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETPROTOCOLSINKSTACKABLE_DEFINED")
cpp_quote("#define _LPIINTERNETPROTOCOLSINKSTACKABLE_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0198_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0198_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetProtocolSinkStackable_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetProtocolSinkStackable_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternetProtocolSinkStackable *LPIINTERNETPROTOCOLSINKStackable;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetProtocolSinkStackable;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetProtocolSinkStackable : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SwitchSink(IInternetProtocolSink *pOIProtSink) = 0;")
cpp_quote("    virtual HRESULT WINAPI CommitSwitch(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI RollbackSwitch(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetProtocolSinkStackableVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetProtocolSinkStackable *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetProtocolSinkStackable *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetProtocolSinkStackable *This);")
cpp_quote("      HRESULT (WINAPI *SwitchSink)(IInternetProtocolSinkStackable *This,IInternetProtocolSink *pOIProtSink);")
cpp_quote("      HRESULT (WINAPI *CommitSwitch)(IInternetProtocolSinkStackable *This);")
cpp_quote("      HRESULT (WINAPI *RollbackSwitch)(IInternetProtocolSinkStackable *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetProtocolSinkStackableVtbl;")
cpp_quote("  struct IInternetProtocolSinkStackable {")
cpp_quote("    CONST_VTBL struct IInternetProtocolSinkStackableVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetProtocolSinkStackable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetProtocolSinkStackable_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetProtocolSinkStackable_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetProtocolSinkStackable_SwitchSink(This,pOIProtSink) (This)->lpVtbl->SwitchSink(This,pOIProtSink)")
cpp_quote("#define IInternetProtocolSinkStackable_CommitSwitch(This) (This)->lpVtbl->CommitSwitch(This)")
cpp_quote("#define IInternetProtocolSinkStackable_RollbackSwitch(This) (This)->lpVtbl->RollbackSwitch(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetProtocolSinkStackable_SwitchSink_Proxy(IInternetProtocolSinkStackable *This,IInternetProtocolSink *pOIProtSink);")
cpp_quote("  void __RPC_STUB IInternetProtocolSinkStackable_SwitchSink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolSinkStackable_CommitSwitch_Proxy(IInternetProtocolSinkStackable *This);")
cpp_quote("  void __RPC_STUB IInternetProtocolSinkStackable_CommitSwitch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolSinkStackable_RollbackSwitch_Proxy(IInternetProtocolSinkStackable *This);")
cpp_quote("  void __RPC_STUB IInternetProtocolSinkStackable_RollbackSwitch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETSESSION_DEFINED")
cpp_quote("#define _LPIINTERNETSESSION_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0199_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0199_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetSession_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetSession_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternetSession *LPIINTERNETSESSION;")
cpp_quote("")
cpp_quote("  typedef enum _tagOIBDG_FLAGS {")
cpp_quote("    OIBDG_APARTMENTTHREADED = 0x100,OIBDG_DATAONLY = 0x1000")
cpp_quote("  } OIBDG_FLAGS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetSession;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetSession : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI RegisterNameSpace(IClassFactory *pCF,REFCLSID rclsid,LPCWSTR pwzProtocol,ULONG cPatterns,const LPCWSTR *ppwzPatterns,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI UnregisterNameSpace(IClassFactory *pCF,LPCWSTR pszProtocol) = 0;")
cpp_quote("    virtual HRESULT WINAPI RegisterMimeFilter(IClassFactory *pCF,REFCLSID rclsid,LPCWSTR pwzType) = 0;")
cpp_quote("    virtual HRESULT WINAPI UnregisterMimeFilter(IClassFactory *pCF,LPCWSTR pwzType) = 0;")
cpp_quote("    virtual HRESULT WINAPI CreateBinding(LPBC pBC,LPCWSTR szUrl,IUnknown *pUnkOuter,IUnknown **ppUnk,IInternetProtocol **ppOInetProt,DWORD dwOption) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetSessionOption(DWORD dwOption,LPVOID pBuffer,DWORD dwBufferLength,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSessionOption(DWORD dwOption,LPVOID pBuffer,DWORD *pdwBufferLength,DWORD dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetSessionVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetSession *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetSession *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetSession *This);")
cpp_quote("      HRESULT (WINAPI *RegisterNameSpace)(IInternetSession *This,IClassFactory *pCF,REFCLSID rclsid,LPCWSTR pwzProtocol,ULONG cPatterns,const LPCWSTR *ppwzPatterns,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *UnregisterNameSpace)(IInternetSession *This,IClassFactory *pCF,LPCWSTR pszProtocol);")
cpp_quote("      HRESULT (WINAPI *RegisterMimeFilter)(IInternetSession *This,IClassFactory *pCF,REFCLSID rclsid,LPCWSTR pwzType);")
cpp_quote("      HRESULT (WINAPI *UnregisterMimeFilter)(IInternetSession *This,IClassFactory *pCF,LPCWSTR pwzType);")
cpp_quote("      HRESULT (WINAPI *CreateBinding)(IInternetSession *This,LPBC pBC,LPCWSTR szUrl,IUnknown *pUnkOuter,IUnknown **ppUnk,IInternetProtocol **ppOInetProt,DWORD dwOption);")
cpp_quote("      HRESULT (WINAPI *SetSessionOption)(IInternetSession *This,DWORD dwOption,LPVOID pBuffer,DWORD dwBufferLength,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *GetSessionOption)(IInternetSession *This,DWORD dwOption,LPVOID pBuffer,DWORD *pdwBufferLength,DWORD dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetSessionVtbl;")
cpp_quote("  struct IInternetSession {")
cpp_quote("    CONST_VTBL struct IInternetSessionVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetSession_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetSession_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetSession_RegisterNameSpace(This,pCF,rclsid,pwzProtocol,cPatterns,ppwzPatterns,dwReserved) (This)->lpVtbl->RegisterNameSpace(This,pCF,rclsid,pwzProtocol,cPatterns,ppwzPatterns,dwReserved)")
cpp_quote("#define IInternetSession_UnregisterNameSpace(This,pCF,pszProtocol) (This)->lpVtbl->UnregisterNameSpace(This,pCF,pszProtocol)")
cpp_quote("#define IInternetSession_RegisterMimeFilter(This,pCF,rclsid,pwzType) (This)->lpVtbl->RegisterMimeFilter(This,pCF,rclsid,pwzType)")
cpp_quote("#define IInternetSession_UnregisterMimeFilter(This,pCF,pwzType) (This)->lpVtbl->UnregisterMimeFilter(This,pCF,pwzType)")
cpp_quote("#define IInternetSession_CreateBinding(This,pBC,szUrl,pUnkOuter,ppUnk,ppOInetProt,dwOption) (This)->lpVtbl->CreateBinding(This,pBC,szUrl,pUnkOuter,ppUnk,ppOInetProt,dwOption)")
cpp_quote("#define IInternetSession_SetSessionOption(This,dwOption,pBuffer,dwBufferLength,dwReserved) (This)->lpVtbl->SetSessionOption(This,dwOption,pBuffer,dwBufferLength,dwReserved)")
cpp_quote("#define IInternetSession_GetSessionOption(This,dwOption,pBuffer,pdwBufferLength,dwReserved) (This)->lpVtbl->GetSessionOption(This,dwOption,pBuffer,pdwBufferLength,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetSession_RegisterNameSpace_Proxy(IInternetSession *This,IClassFactory *pCF,REFCLSID rclsid,LPCWSTR pwzProtocol,ULONG cPatterns,const LPCWSTR *ppwzPatterns,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetSession_RegisterNameSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSession_UnregisterNameSpace_Proxy(IInternetSession *This,IClassFactory *pCF,LPCWSTR pszProtocol);")
cpp_quote("  void __RPC_STUB IInternetSession_UnregisterNameSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSession_RegisterMimeFilter_Proxy(IInternetSession *This,IClassFactory *pCF,REFCLSID rclsid,LPCWSTR pwzType);")
cpp_quote("  void __RPC_STUB IInternetSession_RegisterMimeFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSession_UnregisterMimeFilter_Proxy(IInternetSession *This,IClassFactory *pCF,LPCWSTR pwzType);")
cpp_quote("  void __RPC_STUB IInternetSession_UnregisterMimeFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSession_CreateBinding_Proxy(IInternetSession *This,LPBC pBC,LPCWSTR szUrl,IUnknown *pUnkOuter,IUnknown **ppUnk,IInternetProtocol **ppOInetProt,DWORD dwOption);")
cpp_quote("  void __RPC_STUB IInternetSession_CreateBinding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSession_SetSessionOption_Proxy(IInternetSession *This,DWORD dwOption,LPVOID pBuffer,DWORD dwBufferLength,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetSession_SetSessionOption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSession_GetSessionOption_Proxy(IInternetSession *This,DWORD dwOption,LPVOID pBuffer,DWORD *pdwBufferLength,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetSession_GetSessionOption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETTHREADSWITCH_DEFINED")
cpp_quote("#define _LPIINTERNETTHREADSWITCH_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0200_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0200_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetThreadSwitch_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetThreadSwitch_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternetThreadSwitch *LPIINTERNETTHREADSWITCH;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetThreadSwitch;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetThreadSwitch : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Prepare(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Continue(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetThreadSwitchVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetThreadSwitch *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetThreadSwitch *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetThreadSwitch *This);")
cpp_quote("      HRESULT (WINAPI *Prepare)(IInternetThreadSwitch *This);")
cpp_quote("      HRESULT (WINAPI *Continue)(IInternetThreadSwitch *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetThreadSwitchVtbl;")
cpp_quote("  struct IInternetThreadSwitch {")
cpp_quote("    CONST_VTBL struct IInternetThreadSwitchVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetThreadSwitch_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetThreadSwitch_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetThreadSwitch_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetThreadSwitch_Prepare(This) (This)->lpVtbl->Prepare(This)")
cpp_quote("#define IInternetThreadSwitch_Continue(This) (This)->lpVtbl->Continue(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetThreadSwitch_Prepare_Proxy(IInternetThreadSwitch *This);")
cpp_quote("  void __RPC_STUB IInternetThreadSwitch_Prepare_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetThreadSwitch_Continue_Proxy(IInternetThreadSwitch *This);")
cpp_quote("  void __RPC_STUB IInternetThreadSwitch_Continue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETPRIORITY_DEFINED")
cpp_quote("#define _LPIINTERNETPRIORITY_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0201_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0201_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetPriority_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetPriority_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternetPriority *LPIINTERNETPRIORITY;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetPriority;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetPriority : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetPriority(LONG nPriority) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetPriority(LONG *pnPriority) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetPriorityVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetPriority *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetPriority *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetPriority *This);")
cpp_quote("      HRESULT (WINAPI *SetPriority)(IInternetPriority *This,LONG nPriority);")
cpp_quote("      HRESULT (WINAPI *GetPriority)(IInternetPriority *This,LONG *pnPriority);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetPriorityVtbl;")
cpp_quote("  struct IInternetPriority {")
cpp_quote("    CONST_VTBL struct IInternetPriorityVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetPriority_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetPriority_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetPriority_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetPriority_SetPriority(This,nPriority) (This)->lpVtbl->SetPriority(This,nPriority)")
cpp_quote("#define IInternetPriority_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetPriority_SetPriority_Proxy(IInternetPriority *This,LONG nPriority);")
cpp_quote("  void __RPC_STUB IInternetPriority_SetPriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetPriority_GetPriority_Proxy(IInternetPriority *This,LONG *pnPriority);")
cpp_quote("  void __RPC_STUB IInternetPriority_GetPriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIINTERNETPROTOCOLINFO_DEFINED")
cpp_quote("#define _LPIINTERNETPROTOCOLINFO_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0202_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0202_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetProtocolInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetProtocolInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;")
cpp_quote("")
cpp_quote("  typedef enum _tagPARSEACTION {")
cpp_quote("    PARSE_CANONICALIZE = 1,")
cpp_quote("    PARSE_FRIENDLY,PARSE_SECURITY_URL,PARSE_ROOTDOCUMENT,PARSE_DOCUMENT,PARSE_ANCHOR,")
cpp_quote("    PARSE_ENCODE,PARSE_DECODE,PARSE_PATH_FROM_URL,PARSE_URL_FROM_PATH,PARSE_MIME,")
cpp_quote("    PARSE_SERVER,PARSE_SCHEMA,PARSE_SITE,PARSE_DOMAIN,PARSE_LOCATION,PARSE_SECURITY_DOMAIN,")
cpp_quote("    PARSE_ESCAPE,PARSE_UNESCAPE")
cpp_quote("  } PARSEACTION;")
cpp_quote("")
cpp_quote("  typedef enum _tagPSUACTION {")
cpp_quote("    PSU_DEFAULT = 1,")
cpp_quote("    PSU_SECURITY_URL_ONLY")
cpp_quote("  } PSUACTION;")
cpp_quote("")
cpp_quote("  typedef enum _tagQUERYOPTION {")
cpp_quote("    QUERY_EXPIRATION_DATE = 1,")
cpp_quote("    QUERY_TIME_OF_LAST_CHANGE,QUERY_CONTENT_ENCODING,QUERY_CONTENT_TYPE,QUERY_REFRESH,")
cpp_quote("    QUERY_RECOMBINE,QUERY_CAN_NAVIGATE,QUERY_USES_NETWORK,QUERY_IS_CACHED,QUERY_IS_INSTALLEDENTRY,")
cpp_quote("    QUERY_IS_CACHED_OR_MAPPED,QUERY_USES_CACHE,QUERY_IS_SECURE,QUERY_IS_SAFE")
cpp_quote("  } QUERYOPTION;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetProtocolInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetProtocolInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ParseUrl(LPCWSTR pwzUrl,PARSEACTION ParseAction,DWORD dwParseFlags,LPWSTR pwzResult,DWORD cchResult,DWORD *pcchResult,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI CombineUrl(LPCWSTR pwzBaseUrl,LPCWSTR pwzRelativeUrl,DWORD dwCombineFlags,LPWSTR pwzResult,DWORD cchResult,DWORD *pcchResult,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI CompareUrl(LPCWSTR pwzUrl1,LPCWSTR pwzUrl2,DWORD dwCompareFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI QueryInfo(LPCWSTR pwzUrl,QUERYOPTION OueryOption,DWORD dwQueryFlags,LPVOID pBuffer,DWORD cbBuffer,DWORD *pcbBuf,DWORD dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetProtocolInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetProtocolInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetProtocolInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetProtocolInfo *This);")
cpp_quote("      HRESULT (WINAPI *ParseUrl)(IInternetProtocolInfo *This,LPCWSTR pwzUrl,PARSEACTION ParseAction,DWORD dwParseFlags,LPWSTR pwzResult,DWORD cchResult,DWORD *pcchResult,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *CombineUrl)(IInternetProtocolInfo *This,LPCWSTR pwzBaseUrl,LPCWSTR pwzRelativeUrl,DWORD dwCombineFlags,LPWSTR pwzResult,DWORD cchResult,DWORD *pcchResult,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *CompareUrl)(IInternetProtocolInfo *This,LPCWSTR pwzUrl1,LPCWSTR pwzUrl2,DWORD dwCompareFlags);")
cpp_quote("      HRESULT (WINAPI *QueryInfo)(IInternetProtocolInfo *This,LPCWSTR pwzUrl,QUERYOPTION OueryOption,DWORD dwQueryFlags,LPVOID pBuffer,DWORD cbBuffer,DWORD *pcbBuf,DWORD dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetProtocolInfoVtbl;")
cpp_quote("  struct IInternetProtocolInfo {")
cpp_quote("    CONST_VTBL struct IInternetProtocolInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetProtocolInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetProtocolInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetProtocolInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetProtocolInfo_ParseUrl(This,pwzUrl,ParseAction,dwParseFlags,pwzResult,cchResult,pcchResult,dwReserved) (This)->lpVtbl->ParseUrl(This,pwzUrl,ParseAction,dwParseFlags,pwzResult,cchResult,pcchResult,dwReserved)")
cpp_quote("#define IInternetProtocolInfo_CombineUrl(This,pwzBaseUrl,pwzRelativeUrl,dwCombineFlags,pwzResult,cchResult,pcchResult,dwReserved) (This)->lpVtbl->CombineUrl(This,pwzBaseUrl,pwzRelativeUrl,dwCombineFlags,pwzResult,cchResult,pcchResult,dwReserved)")
cpp_quote("#define IInternetProtocolInfo_CompareUrl(This,pwzUrl1,pwzUrl2,dwCompareFlags) (This)->lpVtbl->CompareUrl(This,pwzUrl1,pwzUrl2,dwCompareFlags)")
cpp_quote("#define IInternetProtocolInfo_QueryInfo(This,pwzUrl,OueryOption,dwQueryFlags,pBuffer,cbBuffer,pcbBuf,dwReserved) (This)->lpVtbl->QueryInfo(This,pwzUrl,OueryOption,dwQueryFlags,pBuffer,cbBuffer,pcbBuf,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetProtocolInfo_ParseUrl_Proxy(IInternetProtocolInfo *This,LPCWSTR pwzUrl,PARSEACTION ParseAction,DWORD dwParseFlags,LPWSTR pwzResult,DWORD cchResult,DWORD *pcchResult,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetProtocolInfo_ParseUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolInfo_CombineUrl_Proxy(IInternetProtocolInfo *This,LPCWSTR pwzBaseUrl,LPCWSTR pwzRelativeUrl,DWORD dwCombineFlags,LPWSTR pwzResult,DWORD cchResult,DWORD *pcchResult,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetProtocolInfo_CombineUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolInfo_CompareUrl_Proxy(IInternetProtocolInfo *This,LPCWSTR pwzUrl1,LPCWSTR pwzUrl2,DWORD dwCompareFlags);")
cpp_quote("  void __RPC_STUB IInternetProtocolInfo_CompareUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetProtocolInfo_QueryInfo_Proxy(IInternetProtocolInfo *This,LPCWSTR pwzUrl,QUERYOPTION OueryOption,DWORD dwQueryFlags,LPVOID pBuffer,DWORD cbBuffer,DWORD *pcbBuf,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetProtocolInfo_QueryInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#define IOInet IInternet")
cpp_quote("#define IOInetBindInfo IInternetBindInfo")
cpp_quote("#define IOInetProtocolRoot IInternetProtocolRoot")
cpp_quote("#define IOInetProtocol IInternetProtocol")
cpp_quote("#define IOInetProtocolSink IInternetProtocolSink")
cpp_quote("#define IOInetProtocolInfo IInternetProtocolInfo")
cpp_quote("#define IOInetSession IInternetSession")
cpp_quote("#define IOInetPriority IInternetPriority")
cpp_quote("#define IOInetThreadSwitch IInternetThreadSwitch")
cpp_quote("#define IOInetProtocolSinkStackable IInternetProtocolSinkStackable")
cpp_quote("#define LPOINET LPIINTERNET")
cpp_quote("#define LPOINETPROTOCOLINFO LPIINTERNETPROTOCOLINFO")
cpp_quote("#define LPOINETBINDINFO LPIINTERNETBINDINFO")
cpp_quote("#define LPOINETPROTOCOLROOT LPIINTERNETPROTOCOLROOT")
cpp_quote("#define LPOINETPROTOCOL LPIINTERNETPROTOCOL")
cpp_quote("#define LPOINETPROTOCOLSINK LPIINTERNETPROTOCOLSINK")
cpp_quote("#define LPOINETSESSION LPIINTERNETSESSION")
cpp_quote("#define LPOINETTHREADSWITCH LPIINTERNETTHREADSWITCH")
cpp_quote("#define LPOINETPRIORITY LPIINTERNETPRIORITY")
cpp_quote("#define LPOINETPROTOCOLINFO LPIINTERNETPROTOCOLINFO")
cpp_quote("#define LPOINETPROTOCOLSINKSTACKABLE LPIINTERNETPROTOCOLSINKSTACKABLE")
cpp_quote("#define IID_IOInet IID_IInternet")
cpp_quote("#define IID_IOInetBindInfo IID_IInternetBindInfo")
cpp_quote("#define IID_IOInetProtocolRoot IID_IInternetProtocolRoot")
cpp_quote("#define IID_IOInetProtocol IID_IInternetProtocol")
cpp_quote("#define IID_IOInetProtocolSink IID_IInternetProtocolSink")
cpp_quote("#define IID_IOInetProtocolInfo IID_IInternetProtocolInfo")
cpp_quote("#define IID_IOInetSession IID_IInternetSession")
cpp_quote("#define IID_IOInetPriority IID_IInternetPriority")
cpp_quote("#define IID_IOInetThreadSwitch IID_IInternetThreadSwitch")
cpp_quote("#define IID_IOInetProtocolSinkStackable IID_IInternetProtocolSinkStackable")
cpp_quote("  STDAPI CoInternetParseUrl(LPCWSTR pwzUrl,PARSEACTION ParseAction,DWORD dwFlags,LPWSTR pszResult,DWORD cchResult,DWORD *pcchResult,DWORD dwReserved);")
cpp_quote("  STDAPI CoInternetCombineUrl(LPCWSTR pwzBaseUrl,LPCWSTR pwzRelativeUrl,DWORD dwCombineFlags,LPWSTR pszResult,DWORD cchResult,DWORD *pcchResult,DWORD dwReserved);")
cpp_quote("  STDAPI CoInternetCompareUrl(LPCWSTR pwzUrl1,LPCWSTR pwzUrl2,DWORD dwFlags);")
cpp_quote("  STDAPI CoInternetGetProtocolFlags(LPCWSTR pwzUrl,DWORD *pdwFlags,DWORD dwReserved);")
cpp_quote("  STDAPI CoInternetQueryInfo(LPCWSTR pwzUrl,QUERYOPTION QueryOptions,DWORD dwQueryFlags,LPVOID pvBuffer,DWORD cbBuffer,DWORD *pcbBuffer,DWORD dwReserved);")
cpp_quote("  STDAPI CoInternetGetSession(DWORD dwSessionMode,IInternetSession **ppIInternetSession,DWORD dwReserved);")
cpp_quote("  STDAPI CoInternetGetSecurityUrl(LPCWSTR pwzUrl,LPWSTR *ppwzSecUrl,PSUACTION psuAction,DWORD dwReserved);")
cpp_quote("  STDAPI AsyncInstallDistributionUnit(LPCWSTR szDistUnit,LPCWSTR szTYPE,LPCWSTR szExt,DWORD dwFileVersionMS,DWORD dwFileVersionLS,LPCWSTR szURL,IBindCtx *pbc,LPVOID pvReserved,DWORD flags);")
cpp_quote("#ifndef _INTERNETFEATURELIST_DEFINED")
cpp_quote("#define _INTERNETFEATURELIST_DEFINED")
cpp_quote("")
cpp_quote("  typedef enum _tagINTERNETFEATURELIST {")
cpp_quote("    FEATURE_OBJECT_CACHING = 0,")
cpp_quote("    FEATURE_ZONE_ELEVATION,FEATURE_MIME_HANDLING,FEATURE_MIME_SNIFFING,")
cpp_quote("    FEATURE_WINDOW_RESTRICTIONS,FEATURE_WEBOC_POPUPMANAGEMENT,")
cpp_quote("    FEATURE_BEHAVIORS,FEATURE_DISABLE_MK_PROTOCOL,FEATURE_LOCALMACHINE_LOCKDOWN,")
cpp_quote("    FEATURE_SECURITYBAND,FEATURE_RESTRICT_ACTIVEXINSTALL,FEATURE_VALIDATE_NAVIGATE_URL,")
cpp_quote("    FEATURE_RESTRICT_FILEDOWNLOAD,FEATURE_ADDON_MANAGEMENT,FEATURE_PROTOCOL_LOCKDOWN,")
cpp_quote("    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,FEATURE_SAFE_BINDTOOBJECT,")
cpp_quote("    FEATURE_UNC_SAVEDFILECHECK,FEATURE_GET_URL_DOM_FILEPATH_UNENCODED,")
cpp_quote("    FEATURE_ENTRY_COUNT")
cpp_quote("  } INTERNETFEATURELIST;")
cpp_quote("")
cpp_quote("#define SET_FEATURE_ON_THREAD 0x00000001")
cpp_quote("#define SET_FEATURE_ON_PROCESS 0x00000002")
cpp_quote("#define SET_FEATURE_IN_REGISTRY 0x00000004")
cpp_quote("#define SET_FEATURE_ON_THREAD_LOCALMACHINE 0x00000008")
cpp_quote("#define SET_FEATURE_ON_THREAD_INTRANET 0x00000010")
cpp_quote("#define SET_FEATURE_ON_THREAD_TRUSTED 0x00000020")
cpp_quote("#define SET_FEATURE_ON_THREAD_INTERNET 0x00000040")
cpp_quote("#define SET_FEATURE_ON_THREAD_RESTRICTED 0x00000080")
cpp_quote("")
cpp_quote("#define GET_FEATURE_FROM_THREAD 0x00000001")
cpp_quote("#define GET_FEATURE_FROM_PROCESS 0x00000002")
cpp_quote("#define GET_FEATURE_FROM_REGISTRY 0x00000004")
cpp_quote("#define GET_FEATURE_FROM_THREAD_LOCALMACHINE 0x00000008")
cpp_quote("#define GET_FEATURE_FROM_THREAD_INTRANET 0x00000010")
cpp_quote("#define GET_FEATURE_FROM_THREAD_TRUSTED 0x00000020")
cpp_quote("#define GET_FEATURE_FROM_THREAD_INTERNET 0x00000040")
cpp_quote("#define GET_FEATURE_FROM_THREAD_RESTRICTED 0x00000080")
cpp_quote("#endif")
cpp_quote("  STDAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST FeatureEntry,DWORD dwFlags,WINBOOL fEnable);")
cpp_quote("  STDAPI CoInternetIsFeatureEnabled(INTERNETFEATURELIST FeatureEntry,DWORD dwFlags);")
cpp_quote("  STDAPI CoInternetIsFeatureEnabledForUrl(INTERNETFEATURELIST FeatureEntry,DWORD dwFlags,LPCWSTR szURL,IInternetSecurityManager *pSecMgr);")
cpp_quote("  STDAPI CoInternetIsFeatureZoneElevationEnabled(LPCWSTR szFromURL,LPCWSTR szToURL,IInternetSecurityManager *pSecMgr,DWORD dwFlags);")
cpp_quote("  STDAPI CopyStgMedium(const STGMEDIUM *pcstgmedSrc,STGMEDIUM *pstgmedDest);")
cpp_quote("  STDAPI CopyBindInfo(const BINDINFO *pcbiSrc,BINDINFO *pbiDest);")
cpp_quote("  STDAPI_(void) ReleaseBindInfo(BINDINFO *pbindinfo);")
cpp_quote("")
cpp_quote("#define INET_E_USE_DEFAULT_PROTOCOLHANDLER _HRESULT_TYPEDEF_(0x800C0011L)")
cpp_quote("#define INET_E_USE_DEFAULT_SETTING _HRESULT_TYPEDEF_(0x800C0012L)")
cpp_quote("#define INET_E_DEFAULT_ACTION INET_E_USE_DEFAULT_PROTOCOLHANDLER")
cpp_quote("#define INET_E_QUERYOPTION_UNKNOWN _HRESULT_TYPEDEF_(0x800C0013L)")
cpp_quote("#define INET_E_REDIRECTING _HRESULT_TYPEDEF_(0x800C0014L)")
cpp_quote("#define OInetParseUrl CoInternetParseUrl")
cpp_quote("#define OInetCombineUrl CoInternetCombineUrl")
cpp_quote("#define OInetCompareUrl CoInternetCompareUrl")
cpp_quote("#define OInetQueryInfo CoInternetQueryInfo")
cpp_quote("#define OInetGetSession CoInternetGetSession")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#define PROTOCOLFLAG_NO_PICS_CHECK 0x00000001")
cpp_quote("")
cpp_quote("  STDAPI CoInternetCreateSecurityManager(IServiceProvider *pSP,IInternetSecurityManager **ppSM,DWORD dwReserved);")
cpp_quote("  STDAPI CoInternetCreateZoneManager(IServiceProvider *pSP,IInternetZoneManager **ppZM,DWORD dwReserved);")
cpp_quote("")
cpp_quote("  EXTERN_C const IID CLSID_InternetSecurityManager;")
cpp_quote("  EXTERN_C const IID CLSID_InternetZoneManager;")
cpp_quote("  EXTERN_C const IID CLSID_PersistentZoneIdentifier;")
cpp_quote("")
cpp_quote("#define SID_SInternetSecurityManager IID_IInternetSecurityManager")
cpp_quote("#define SID_SInternetSecurityManagerEx IID_IInternetSecurityManagerEx")
cpp_quote("#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager")
cpp_quote("")
cpp_quote("#ifndef _LPINTERNETSECURITYMGRSITE_DEFINED")
cpp_quote("#define _LPINTERNETSECURITYMGRSITE_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0203_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0203_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetSecurityMgrSite_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetSecurityMgrSite_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IInternetSecurityMgrSite;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetSecurityMgrSite : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetWindow(HWND *phwnd) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnableModeless(WINBOOL fEnable) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetSecurityMgrSiteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetSecurityMgrSite *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetSecurityMgrSite *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetSecurityMgrSite *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IInternetSecurityMgrSite *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *EnableModeless)(IInternetSecurityMgrSite *This,WINBOOL fEnable);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetSecurityMgrSiteVtbl;")
cpp_quote("  struct IInternetSecurityMgrSite {")
cpp_quote("    CONST_VTBL struct IInternetSecurityMgrSiteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetSecurityMgrSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetSecurityMgrSite_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetSecurityMgrSite_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetSecurityMgrSite_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IInternetSecurityMgrSite_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetSecurityMgrSite_GetWindow_Proxy(IInternetSecurityMgrSite *This,HWND *phwnd);")
cpp_quote("  void __RPC_STUB IInternetSecurityMgrSite_GetWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSecurityMgrSite_EnableModeless_Proxy(IInternetSecurityMgrSite *This,WINBOOL fEnable);")
cpp_quote("  void __RPC_STUB IInternetSecurityMgrSite_EnableModeless_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPINTERNETSECURITYMANANGEREX_DEFINED")
cpp_quote("#define _LPINTERNETSECURITYMANANGEREX_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0204_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0204_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetSecurityManager_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetSecurityManager_INTERFACE_DEFINED__")
cpp_quote("")
cpp_quote("#define MUTZ_NOSAVEDFILECHECK 0x00000001")
cpp_quote("#define MUTZ_ISFILE 0x00000002")
cpp_quote("#define MUTZ_ACCEPT_WILDCARD_SCHEME 0x00000080")
cpp_quote("#define MUTZ_ENFORCERESTRICTED 0x00000100")
cpp_quote("#define MUTZ_REQUIRESAVEDFILECHECK 0x00000400")
cpp_quote("#define MUTZ_DONT_UNESCAPE 0x00000800")
cpp_quote("")
cpp_quote("#define MAX_SIZE_SECURITY_ID 512")
cpp_quote("")
cpp_quote("  typedef enum __MIDL_IInternetSecurityManager_0001 {")
cpp_quote("    PUAF_DEFAULT = 0,PUAF_NOUI = 0x1,PUAF_ISFILE = 0x2,PUAF_WARN_IF_DENIED = 0x4,PUAF_FORCEUI_FOREGROUND = 0x8,PUAF_CHECK_TIFS = 0x10,")
cpp_quote("    PUAF_DONTCHECKBOXINDIALOG = 0x20,PUAF_TRUSTED = 0x40,PUAF_ACCEPT_WILDCARD_SCHEME = 0x80,PUAF_ENFORCERESTRICTED = 0x100,")
cpp_quote("    PUAF_NOSAVEDFILECHECK = 0x200,PUAF_REQUIRESAVEDFILECHECK = 0x400,PUAF_LMZ_UNLOCKED = 0x10000,PUAF_LMZ_LOCKED = 0x20000,")
cpp_quote("    PUAF_DEFAULTZONEPOL = 0x40000,PUAF_NPL_USE_LOCKED_IF_RESTRICTED = 0x80000,PUAF_NOUIIFLOCKED = 0x100000,PUAF_DRAGPROTOCOLCHECK = 0x200000")
cpp_quote("  } PUAF;")
cpp_quote("")
cpp_quote("  typedef enum __MIDL_IInternetSecurityManager_0002 {")
cpp_quote("    PUAFOUT_DEFAULT = 0,PUAFOUT_ISLOCKZONEPOLICY = 0x1")
cpp_quote("  } PUAFOUT;")
cpp_quote("")
cpp_quote("  typedef enum __MIDL_IInternetSecurityManager_0003 {")
cpp_quote("    SZM_CREATE = 0,SZM_DELETE = 0x1")
cpp_quote("  } SZM_FLAGS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetSecurityManager;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetSecurityManager : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetSecuritySite(IInternetSecurityMgrSite *pSite) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSecuritySite(IInternetSecurityMgrSite **ppSite) = 0;")
cpp_quote("    virtual HRESULT WINAPI MapUrlToZone(LPCWSTR pwszUrl,DWORD *pdwZone,DWORD dwFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSecurityId(LPCWSTR pwszUrl,BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI ProcessUrlAction(LPCWSTR pwszUrl,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI QueryCustomPolicy(LPCWSTR pwszUrl,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetZoneMapping(DWORD dwZone,LPCWSTR lpszPattern,DWORD dwFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetZoneMappings(DWORD dwZone,IEnumString **ppenumString,DWORD dwFlags) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetSecurityManagerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetSecurityManager *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetSecurityManager *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetSecurityManager *This);")
cpp_quote("      HRESULT (WINAPI *SetSecuritySite)(IInternetSecurityManager *This,IInternetSecurityMgrSite *pSite);")
cpp_quote("      HRESULT (WINAPI *GetSecuritySite)(IInternetSecurityManager *This,IInternetSecurityMgrSite **ppSite);")
cpp_quote("      HRESULT (WINAPI *MapUrlToZone)(IInternetSecurityManager *This,LPCWSTR pwszUrl,DWORD *pdwZone,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *GetSecurityId)(IInternetSecurityManager *This,LPCWSTR pwszUrl,BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved);")
cpp_quote("      HRESULT (WINAPI *ProcessUrlAction)(IInternetSecurityManager *This,LPCWSTR pwszUrl,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *QueryCustomPolicy)(IInternetSecurityManager *This,LPCWSTR pwszUrl,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *SetZoneMapping)(IInternetSecurityManager *This,DWORD dwZone,LPCWSTR lpszPattern,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *GetZoneMappings)(IInternetSecurityManager *This,DWORD dwZone,IEnumString **ppenumString,DWORD dwFlags);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetSecurityManagerVtbl;")
cpp_quote("  struct IInternetSecurityManager {")
cpp_quote("    CONST_VTBL struct IInternetSecurityManagerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetSecurityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetSecurityManager_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetSecurityManager_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetSecurityManager_SetSecuritySite(This,pSite) (This)->lpVtbl->SetSecuritySite(This,pSite)")
cpp_quote("#define IInternetSecurityManager_GetSecuritySite(This,ppSite) (This)->lpVtbl->GetSecuritySite(This,ppSite)")
cpp_quote("#define IInternetSecurityManager_MapUrlToZone(This,pwszUrl,pdwZone,dwFlags) (This)->lpVtbl->MapUrlToZone(This,pwszUrl,pdwZone,dwFlags)")
cpp_quote("#define IInternetSecurityManager_GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved)")
cpp_quote("#define IInternetSecurityManager_ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)")
cpp_quote("#define IInternetSecurityManager_QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)")
cpp_quote("#define IInternetSecurityManager_SetZoneMapping(This,dwZone,lpszPattern,dwFlags) (This)->lpVtbl->SetZoneMapping(This,dwZone,lpszPattern,dwFlags)")
cpp_quote("#define IInternetSecurityManager_GetZoneMappings(This,dwZone,ppenumString,dwFlags) (This)->lpVtbl->GetZoneMappings(This,dwZone,ppenumString,dwFlags)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetSecurityManager_SetSecuritySite_Proxy(IInternetSecurityManager *This,IInternetSecurityMgrSite *pSite);")
cpp_quote("  void __RPC_STUB IInternetSecurityManager_SetSecuritySite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSecurityManager_GetSecuritySite_Proxy(IInternetSecurityManager *This,IInternetSecurityMgrSite **ppSite);")
cpp_quote("  void __RPC_STUB IInternetSecurityManager_GetSecuritySite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSecurityManager_MapUrlToZone_Proxy(IInternetSecurityManager *This,LPCWSTR pwszUrl,DWORD *pdwZone,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IInternetSecurityManager_MapUrlToZone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSecurityManager_GetSecurityId_Proxy(IInternetSecurityManager *This,LPCWSTR pwszUrl,BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved);")
cpp_quote("  void __RPC_STUB IInternetSecurityManager_GetSecurityId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSecurityManager_ProcessUrlAction_Proxy(IInternetSecurityManager *This,LPCWSTR pwszUrl,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetSecurityManager_ProcessUrlAction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSecurityManager_QueryCustomPolicy_Proxy(IInternetSecurityManager *This,LPCWSTR pwszUrl,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetSecurityManager_QueryCustomPolicy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSecurityManager_SetZoneMapping_Proxy(IInternetSecurityManager *This,DWORD dwZone,LPCWSTR lpszPattern,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IInternetSecurityManager_SetZoneMapping_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetSecurityManager_GetZoneMappings_Proxy(IInternetSecurityManager *This,DWORD dwZone,IEnumString **ppenumString,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IInternetSecurityManager_GetZoneMappings_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternetSecurityManagerEx_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetSecurityManagerEx_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IInternetSecurityManagerEx;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetSecurityManagerEx : public IInternetSecurityManager {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ProcessUrlActionEx(LPCWSTR pwszUrl,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved,DWORD *pdwOutFlags) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetSecurityManagerExVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetSecurityManagerEx *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetSecurityManagerEx *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetSecurityManagerEx *This);")
cpp_quote("      HRESULT (WINAPI *SetSecuritySite)(IInternetSecurityManagerEx *This,IInternetSecurityMgrSite *pSite);")
cpp_quote("      HRESULT (WINAPI *GetSecuritySite)(IInternetSecurityManagerEx *This,IInternetSecurityMgrSite **ppSite);")
cpp_quote("      HRESULT (WINAPI *MapUrlToZone)(IInternetSecurityManagerEx *This,LPCWSTR pwszUrl,DWORD *pdwZone,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *GetSecurityId)(IInternetSecurityManagerEx *This,LPCWSTR pwszUrl,BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved);")
cpp_quote("      HRESULT (WINAPI *ProcessUrlAction)(IInternetSecurityManagerEx *This,LPCWSTR pwszUrl,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *QueryCustomPolicy)(IInternetSecurityManagerEx *This,LPCWSTR pwszUrl,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *SetZoneMapping)(IInternetSecurityManagerEx *This,DWORD dwZone,LPCWSTR lpszPattern,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *GetZoneMappings)(IInternetSecurityManagerEx *This,DWORD dwZone,IEnumString **ppenumString,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *ProcessUrlActionEx)(IInternetSecurityManagerEx *This,LPCWSTR pwszUrl,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved,DWORD *pdwOutFlags);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetSecurityManagerExVtbl;")
cpp_quote("  struct IInternetSecurityManagerEx {")
cpp_quote("    CONST_VTBL struct IInternetSecurityManagerExVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetSecurityManagerEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetSecurityManagerEx_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetSecurityManagerEx_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetSecurityManagerEx_SetSecuritySite(This,pSite) (This)->lpVtbl->SetSecuritySite(This,pSite)")
cpp_quote("#define IInternetSecurityManagerEx_GetSecuritySite(This,ppSite) (This)->lpVtbl->GetSecuritySite(This,ppSite)")
cpp_quote("#define IInternetSecurityManagerEx_MapUrlToZone(This,pwszUrl,pdwZone,dwFlags) (This)->lpVtbl->MapUrlToZone(This,pwszUrl,pdwZone,dwFlags)")
cpp_quote("#define IInternetSecurityManagerEx_GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved)")
cpp_quote("#define IInternetSecurityManagerEx_ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)")
cpp_quote("#define IInternetSecurityManagerEx_QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)")
cpp_quote("#define IInternetSecurityManagerEx_SetZoneMapping(This,dwZone,lpszPattern,dwFlags) (This)->lpVtbl->SetZoneMapping(This,dwZone,lpszPattern,dwFlags)")
cpp_quote("#define IInternetSecurityManagerEx_GetZoneMappings(This,dwZone,ppenumString,dwFlags) (This)->lpVtbl->GetZoneMappings(This,dwZone,ppenumString,dwFlags)")
cpp_quote("#define IInternetSecurityManagerEx_ProcessUrlActionEx(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved,pdwOutFlags) (This)->lpVtbl->ProcessUrlActionEx(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved,pdwOutFlags)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetSecurityManagerEx_ProcessUrlActionEx_Proxy(IInternetSecurityManagerEx *This,LPCWSTR pwszUrl,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved,DWORD *pdwOutFlags);")
cpp_quote("  void __RPC_STUB IInternetSecurityManagerEx_ProcessUrlActionEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPINTERNETSECURITYMANANGER_DEFINED")
cpp_quote("#define _LPINTERNETSECURITYMANANGER_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0205_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0205_v0_0_s_ifspec;")
cpp_quote("#ifndef __IZoneIdentifier_INTERFACE_DEFINED__")
cpp_quote("#define __IZoneIdentifier_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IZoneIdentifier;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IZoneIdentifier : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetId(DWORD *pdwZone) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetId(DWORD dwZone) = 0;")
cpp_quote("    virtual HRESULT WINAPI Remove(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IZoneIdentifierVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IZoneIdentifier *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IZoneIdentifier *This);")
cpp_quote("      ULONG (WINAPI *Release)(IZoneIdentifier *This);")
cpp_quote("      HRESULT (WINAPI *GetId)(IZoneIdentifier *This,DWORD *pdwZone);")
cpp_quote("      HRESULT (WINAPI *SetId)(IZoneIdentifier *This,DWORD dwZone);")
cpp_quote("      HRESULT (WINAPI *Remove)(IZoneIdentifier *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IZoneIdentifierVtbl;")
cpp_quote("  struct IZoneIdentifier {")
cpp_quote("    CONST_VTBL struct IZoneIdentifierVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IZoneIdentifier_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IZoneIdentifier_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IZoneIdentifier_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IZoneIdentifier_GetId(This,pdwZone) (This)->lpVtbl->GetId(This,pdwZone)")
cpp_quote("#define IZoneIdentifier_SetId(This,dwZone) (This)->lpVtbl->SetId(This,dwZone)")
cpp_quote("#define IZoneIdentifier_Remove(This) (This)->lpVtbl->Remove(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IZoneIdentifier_GetId_Proxy(IZoneIdentifier *This,DWORD *pdwZone);")
cpp_quote("  void __RPC_STUB IZoneIdentifier_GetId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IZoneIdentifier_SetId_Proxy(IZoneIdentifier *This,DWORD dwZone);")
cpp_quote("  void __RPC_STUB IZoneIdentifier_SetId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IZoneIdentifier_Remove_Proxy(IZoneIdentifier *This);")
cpp_quote("  void __RPC_STUB IZoneIdentifier_Remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPINTERNETHOSTSECURITYMANANGER_DEFINED")
cpp_quote("#define _LPINTERNETHOSTSECURITYMANANGER_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0207_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0207_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetHostSecurityManager_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetHostSecurityManager_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IInternetHostSecurityManager;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetHostSecurityManager : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetSecurityId(BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI ProcessUrlAction(DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI QueryCustomPolicy(REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetHostSecurityManagerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetHostSecurityManager *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetHostSecurityManager *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetHostSecurityManager *This);")
cpp_quote("      HRESULT (WINAPI *GetSecurityId)(IInternetHostSecurityManager *This,BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved);")
cpp_quote("      HRESULT (WINAPI *ProcessUrlAction)(IInternetHostSecurityManager *This,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *QueryCustomPolicy)(IInternetHostSecurityManager *This,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetHostSecurityManagerVtbl;")
cpp_quote("  struct IInternetHostSecurityManager {")
cpp_quote("    CONST_VTBL struct IInternetHostSecurityManagerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetHostSecurityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetHostSecurityManager_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetHostSecurityManager_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetHostSecurityManager_GetSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved)")
cpp_quote("#define IInternetHostSecurityManager_ProcessUrlAction(This,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)")
cpp_quote("#define IInternetHostSecurityManager_QueryCustomPolicy(This,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetHostSecurityManager_GetSecurityId_Proxy(IInternetHostSecurityManager *This,BYTE *pbSecurityId,DWORD *pcbSecurityId,DWORD_PTR dwReserved);")
cpp_quote("  void __RPC_STUB IInternetHostSecurityManager_GetSecurityId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetHostSecurityManager_ProcessUrlAction_Proxy(IInternetHostSecurityManager *This,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwFlags,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetHostSecurityManager_ProcessUrlAction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetHostSecurityManager_QueryCustomPolicy_Proxy(IInternetHostSecurityManager *This,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,BYTE *pContext,DWORD cbContext,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetHostSecurityManager_QueryCustomPolicy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#define URLACTION_MIN 0x00001000")
cpp_quote("#define URLACTION_DOWNLOAD_MIN 0x00001000")
cpp_quote("#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX 0x00001001")
cpp_quote("#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX 0x00001004")
cpp_quote("#define URLACTION_DOWNLOAD_CURR_MAX 0x00001004")
cpp_quote("#define URLACTION_DOWNLOAD_MAX 0x000011FF")
cpp_quote("")
cpp_quote("#define URLACTION_ACTIVEX_MIN 0x00001200")
cpp_quote("#define URLACTION_ACTIVEX_RUN 0x00001200")
cpp_quote("#define URLPOLICY_ACTIVEX_CHECK_LIST 0x00010000")
cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY 0x00001201")
cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY 0x00001202")
cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY 0x00001203")
cpp_quote("#define URLACTION_SCRIPT_OVERRIDE_SAFETY 0x00001401")
cpp_quote("#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY 0x00001204")
cpp_quote("#define URLACTION_ACTIVEX_TREATASUNTRUSTED 0x00001205")
cpp_quote("#define URLACTION_ACTIVEX_NO_WEBOC_SCRIPT 0x00001206")
cpp_quote("#define URLACTION_ACTIVEX_CURR_MAX 0x00001206")
cpp_quote("#define URLACTION_ACTIVEX_MAX 0x000013ff")
cpp_quote("")
cpp_quote("#define URLACTION_SCRIPT_MIN 0x00001400")
cpp_quote("#define URLACTION_SCRIPT_RUN 0x00001400")
cpp_quote("#define URLACTION_SCRIPT_JAVA_USE 0x00001402")
cpp_quote("#define URLACTION_SCRIPT_SAFE_ACTIVEX 0x00001405")
cpp_quote("#define URLACTION_CROSS_DOMAIN_DATA 0x00001406")
cpp_quote("#define URLACTION_SCRIPT_PASTE 0x00001407")
cpp_quote("#define URLACTION_SCRIPT_CURR_MAX 0x00001407")
cpp_quote("#define URLACTION_SCRIPT_MAX 0x000015ff")
cpp_quote("")
cpp_quote("#define URLACTION_HTML_MIN 0x00001600")
cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS 0x00001601")
cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_FROM 0x00001602")
cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_TO 0x00001603")
cpp_quote("#define URLACTION_HTML_FONT_DOWNLOAD 0x00001604")
cpp_quote("#define URLACTION_HTML_JAVA_RUN 0x00001605")
cpp_quote("#define URLACTION_HTML_USERDATA_SAVE 0x00001606")
cpp_quote("#define URLACTION_HTML_SUBFRAME_NAVIGATE 0x00001607")
cpp_quote("#define URLACTION_HTML_META_REFRESH 0x00001608")
cpp_quote("#define URLACTION_HTML_MIXED_CONTENT 0x00001609")
cpp_quote("#define URLACTION_HTML_MAX 0x000017ff")
cpp_quote("")
cpp_quote("#define URLACTION_SHELL_MIN 0x00001800")
cpp_quote("#define URLACTION_SHELL_INSTALL_DTITEMS 0x00001800")
cpp_quote("#define URLACTION_SHELL_MOVE_OR_COPY 0x00001802")
cpp_quote("#define URLACTION_SHELL_FILE_DOWNLOAD 0x00001803")
cpp_quote("#define URLACTION_SHELL_VERB 0x00001804")
cpp_quote("#define URLACTION_SHELL_WEBVIEW_VERB 0x00001805")
cpp_quote("#define URLACTION_SHELL_SHELLEXECUTE 0x00001806")
cpp_quote("#define URLACTION_SHELL_EXECUTE_HIGHRISK 0x00001806")
cpp_quote("#define URLACTION_SHELL_EXECUTE_MODRISK 0x00001807")
cpp_quote("#define URLACTION_SHELL_EXECUTE_LOWRISK 0x00001808")
cpp_quote("#define URLACTION_SHELL_POPUPMGR 0x00001809")
cpp_quote("#define URLACTION_SHELL_RTF_OBJECTS_LOAD 0x0000180A")
cpp_quote("#define URLACTION_SHELL_ENHANCED_DRAGDROP_SECURITY 0x0000180B")
cpp_quote("#define URLACTION_SHELL_CURR_MAX 0x0000180B")
cpp_quote("#define URLACTION_SHELL_MAX 0x000019ff")
cpp_quote("")
cpp_quote("#define URLACTION_NETWORK_MIN 0x00001A00")
cpp_quote("")
cpp_quote("#define URLACTION_CREDENTIALS_USE 0x00001A00")
cpp_quote("#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK 0x00000000")
cpp_quote("#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER 0x00010000")
cpp_quote("#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT 0x00020000")
cpp_quote("#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY 0x00030000")
cpp_quote("")
cpp_quote("#define URLACTION_AUTHENTICATE_CLIENT 0x00001A01")
cpp_quote("#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK 0x00000000")
cpp_quote("#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE 0x00010000")
cpp_quote("#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY 0x00030000")
cpp_quote("")
cpp_quote("#define URLACTION_COOKIES 0x00001A02")
cpp_quote("#define URLACTION_COOKIES_SESSION 0x00001A03")
cpp_quote("")
cpp_quote("#define URLACTION_CLIENT_CERT_PROMPT 0x00001A04")
cpp_quote("")
cpp_quote("#define URLACTION_COOKIES_THIRD_PARTY 0x00001A05")
cpp_quote("#define URLACTION_COOKIES_SESSION_THIRD_PARTY 0x00001A06")
cpp_quote("")
cpp_quote("#define URLACTION_COOKIES_ENABLED 0x00001A10")
cpp_quote("")
cpp_quote("#define URLACTION_NETWORK_CURR_MAX 0x00001A10")
cpp_quote("#define URLACTION_NETWORK_MAX 0x00001Bff")
cpp_quote("")
cpp_quote("#define URLACTION_JAVA_MIN 0x00001C00")
cpp_quote("#define URLACTION_JAVA_PERMISSIONS 0x00001C00")
cpp_quote("#define URLPOLICY_JAVA_PROHIBIT 0x00000000")
cpp_quote("#define URLPOLICY_JAVA_HIGH 0x00010000")
cpp_quote("#define URLPOLICY_JAVA_MEDIUM 0x00020000")
cpp_quote("#define URLPOLICY_JAVA_LOW 0x00030000")
cpp_quote("#define URLPOLICY_JAVA_CUSTOM 0x00800000")
cpp_quote("#define URLACTION_JAVA_CURR_MAX 0x00001C00")
cpp_quote("#define URLACTION_JAVA_MAX 0x00001Cff")
cpp_quote("")
cpp_quote("#define URLACTION_INFODELIVERY_MIN 0x00001D00")
cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS 0x00001D00")
cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS 0x00001D01")
cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS 0x00001D02")
cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS 0x00001D03")
cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS 0x00001D04")
cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS 0x00001D05")
cpp_quote("#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING 0x00001D06")
cpp_quote("#define URLACTION_INFODELIVERY_CURR_MAX 0x00001D06")
cpp_quote("#define URLACTION_INFODELIVERY_MAX 0x00001Dff")
cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MIN 0x00001E00")
cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS 0x00001E05")
cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT 0x00010000")
cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE 0x00020000")
cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL 0x00030000")
cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MAX 0x00001Eff")
cpp_quote("#define URLACTION_BEHAVIOR_MIN 0x00002000")
cpp_quote("#define URLACTION_BEHAVIOR_RUN 0x00002000")
cpp_quote("#define URLPOLICY_BEHAVIOR_CHECK_LIST 0x00010000")
cpp_quote("")
cpp_quote("#define URLACTION_FEATURE_MIN 0x00002100")
cpp_quote("#define URLACTION_FEATURE_MIME_SNIFFING 0x00002100")
cpp_quote("#define URLACTION_FEATURE_ZONE_ELEVATION 0x00002101")
cpp_quote("#define URLACTION_FEATURE_WINDOW_RESTRICTIONS 0x00002102")
cpp_quote("")
cpp_quote("#define URLACTION_AUTOMATIC_DOWNLOAD_UI_MIN 0x00002200")
cpp_quote("#define URLACTION_AUTOMATIC_DOWNLOAD_UI 0x00002200")
cpp_quote("#define URLACTION_AUTOMATIC_ACTIVEX_UI 0x00002201")
cpp_quote("")
cpp_quote("#define URLACTION_ALLOW_RESTRICTEDPROTOCOLS 0x00002300")
cpp_quote("")
cpp_quote("#define URLPOLICY_ALLOW 0x00")
cpp_quote("#define URLPOLICY_QUERY 0x01")
cpp_quote("#define URLPOLICY_DISALLOW 0x03")
cpp_quote("")
cpp_quote("#define URLPOLICY_NOTIFY_ON_ALLOW 0x10")
cpp_quote("#define URLPOLICY_NOTIFY_ON_DISALLOW 0x20")
cpp_quote("")
cpp_quote("#define URLPOLICY_LOG_ON_ALLOW 0x40")
cpp_quote("#define URLPOLICY_LOG_ON_DISALLOW 0x80")
cpp_quote("")
cpp_quote("#define URLPOLICY_MASK_PERMISSIONS 0x0f")
cpp_quote("#define GetUrlPolicyPermissions(dw) (dw & URLPOLICY_MASK_PERMISSIONS)")
cpp_quote("#define SetUrlPolicyPermissions(dw,dw2) ((dw) = ((dw) & ~(URLPOLICY_MASK_PERMISSIONS)) | (dw2))")
cpp_quote("")
cpp_quote("#define URLPOLICY_DONTCHECKDLGBOX 0x100")
cpp_quote("")
cpp_quote("  EXTERN_C const GUID GUID_CUSTOM_LOCALMACHINEZONEUNLOCKED;")
cpp_quote("#ifndef _LPINTERNETZONEMANAGER_DEFINED")
cpp_quote("#define _LPINTERNETZONEMANAGER_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0208_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0208_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetZoneManager_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetZoneManager_INTERFACE_DEFINED__")
cpp_quote("")
cpp_quote("  typedef IInternetZoneManager *LPURLZONEMANAGER;")
cpp_quote("")
cpp_quote("  typedef enum tagURLZONE {")
cpp_quote("    URLZONE_PREDEFINED_MIN = 0,URLZONE_LOCAL_MACHINE = 0,")
cpp_quote("    URLZONE_INTRANET,URLZONE_TRUSTED,URLZONE_INTERNET,URLZONE_UNTRUSTED,")
cpp_quote("    URLZONE_PREDEFINED_MAX = 999,URLZONE_USER_MIN = 1000,")
cpp_quote("    URLZONE_USER_MAX = 10000")
cpp_quote("  } URLZONE;")
cpp_quote("")
cpp_quote("#define URLZONE_ESC_FLAG 0x100")
cpp_quote("")
cpp_quote("  typedef enum tagURLTEMPLATE {")
cpp_quote("    URLTEMPLATE_CUSTOM = 0,")
cpp_quote("    URLTEMPLATE_PREDEFINED_MIN = 0x10000,")
cpp_quote("    URLTEMPLATE_LOW = 0x10000,")
cpp_quote("    URLTEMPLATE_MEDLOW = 0x10500,")
cpp_quote("    URLTEMPLATE_MEDIUM = 0x11000,")
cpp_quote("    URLTEMPLATE_HIGH = 0x12000,")
cpp_quote("    URLTEMPLATE_PREDEFINED_MAX = 0x20000")
cpp_quote("  } URLTEMPLATE;")
cpp_quote("")
cpp_quote("  enum __MIDL_IInternetZoneManager_0001 {")
cpp_quote("    MAX_ZONE_PATH = 260,MAX_ZONE_DESCRIPTION = 200")
cpp_quote("  };")
cpp_quote("  typedef enum __MIDL_IInternetZoneManager_0002 {")
cpp_quote("    ZAFLAGS_CUSTOM_EDIT = 0x1,ZAFLAGS_ADD_SITES = 0x2,ZAFLAGS_REQUIRE_VERIFICATION = 0x4,ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x8,")
cpp_quote("    ZAFLAGS_INCLUDE_INTRANET_SITES = 0x10,ZAFLAGS_NO_UI = 0x20,ZAFLAGS_SUPPORTS_VERIFICATION = 0x40,ZAFLAGS_UNC_AS_INTRANET = 0x80,")
cpp_quote("    ZAFLAGS_USE_LOCKED_ZONES = 0x10000")
cpp_quote("  } ZAFLAGS;")
cpp_quote("")
cpp_quote("  typedef struct _ZONEATTRIBUTES {")
cpp_quote("    ULONG cbSize;")
cpp_quote("    WCHAR szDisplayName[260 ];")
cpp_quote("    WCHAR szDescription[200 ];")
cpp_quote("    WCHAR szIconPath[260 ];")
cpp_quote("    DWORD dwTemplateMinLevel;")
cpp_quote("    DWORD dwTemplateRecommended;")
cpp_quote("    DWORD dwTemplateCurrentLevel;")
cpp_quote("    DWORD dwFlags;")
cpp_quote("  } ZONEATTRIBUTES;")
cpp_quote("")
cpp_quote("  typedef struct _ZONEATTRIBUTES *LPZONEATTRIBUTES;")
cpp_quote("")
cpp_quote("  typedef enum _URLZONEREG {")
cpp_quote("    URLZONEREG_DEFAULT = 0,")
cpp_quote("    URLZONEREG_HKLM,URLZONEREG_HKCU")
cpp_quote("  } URLZONEREG;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInternetZoneManager;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetZoneManager : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetZoneAttributes(DWORD dwZone,ZONEATTRIBUTES *pZoneAttributes) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetZoneAttributes(DWORD dwZone,ZONEATTRIBUTES *pZoneAttributes) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetZoneCustomPolicy(DWORD dwZone,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,URLZONEREG urlZoneReg) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetZoneCustomPolicy(DWORD dwZone,REFGUID guidKey,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetZoneActionPolicy(DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetZoneActionPolicy(DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg) = 0;")
cpp_quote("    virtual HRESULT WINAPI PromptAction(DWORD dwAction,HWND hwndParent,LPCWSTR pwszUrl,LPCWSTR pwszText,DWORD dwPromptFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI LogAction(DWORD dwAction,LPCWSTR pwszUrl,LPCWSTR pwszText,DWORD dwLogFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI CreateZoneEnumerator(DWORD *pdwEnum,DWORD *pdwCount,DWORD dwFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetZoneAt(DWORD dwEnum,DWORD dwIndex,DWORD *pdwZone) = 0;")
cpp_quote("    virtual HRESULT WINAPI DestroyZoneEnumerator(DWORD dwEnum) = 0;")
cpp_quote("    virtual HRESULT WINAPI CopyTemplatePoliciesToZone(DWORD dwTemplate,DWORD dwZone,DWORD dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetZoneManagerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetZoneManager *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetZoneManager *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetZoneManager *This);")
cpp_quote("      HRESULT (WINAPI *GetZoneAttributes)(IInternetZoneManager *This,DWORD dwZone,ZONEATTRIBUTES *pZoneAttributes);")
cpp_quote("      HRESULT (WINAPI *SetZoneAttributes)(IInternetZoneManager *This,DWORD dwZone,ZONEATTRIBUTES *pZoneAttributes);")
cpp_quote("      HRESULT (WINAPI *GetZoneCustomPolicy)(IInternetZoneManager *This,DWORD dwZone,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("      HRESULT (WINAPI *SetZoneCustomPolicy)(IInternetZoneManager *This,DWORD dwZone,REFGUID guidKey,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("      HRESULT (WINAPI *GetZoneActionPolicy)(IInternetZoneManager *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("      HRESULT (WINAPI *SetZoneActionPolicy)(IInternetZoneManager *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("      HRESULT (WINAPI *PromptAction)(IInternetZoneManager *This,DWORD dwAction,HWND hwndParent,LPCWSTR pwszUrl,LPCWSTR pwszText,DWORD dwPromptFlags);")
cpp_quote("      HRESULT (WINAPI *LogAction)(IInternetZoneManager *This,DWORD dwAction,LPCWSTR pwszUrl,LPCWSTR pwszText,DWORD dwLogFlags);")
cpp_quote("      HRESULT (WINAPI *CreateZoneEnumerator)(IInternetZoneManager *This,DWORD *pdwEnum,DWORD *pdwCount,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *GetZoneAt)(IInternetZoneManager *This,DWORD dwEnum,DWORD dwIndex,DWORD *pdwZone);")
cpp_quote("      HRESULT (WINAPI *DestroyZoneEnumerator)(IInternetZoneManager *This,DWORD dwEnum);")
cpp_quote("      HRESULT (WINAPI *CopyTemplatePoliciesToZone)(IInternetZoneManager *This,DWORD dwTemplate,DWORD dwZone,DWORD dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetZoneManagerVtbl;")
cpp_quote("  struct IInternetZoneManager {")
cpp_quote("    CONST_VTBL struct IInternetZoneManagerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetZoneManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetZoneManager_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetZoneManager_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetZoneManager_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)")
cpp_quote("#define IInternetZoneManager_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)")
cpp_quote("#define IInternetZoneManager_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,urlZoneReg)")
cpp_quote("#define IInternetZoneManager_SetZoneCustomPolicy(This,dwZone,guidKey,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,pPolicy,cbPolicy,urlZoneReg)")
cpp_quote("#define IInternetZoneManager_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)")
cpp_quote("#define IInternetZoneManager_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)")
cpp_quote("#define IInternetZoneManager_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)")
cpp_quote("#define IInternetZoneManager_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)")
cpp_quote("#define IInternetZoneManager_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)")
cpp_quote("#define IInternetZoneManager_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)")
cpp_quote("#define IInternetZoneManager_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)")
cpp_quote("#define IInternetZoneManager_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_GetZoneAttributes_Proxy(IInternetZoneManager *This,DWORD dwZone,ZONEATTRIBUTES *pZoneAttributes);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_GetZoneAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_SetZoneAttributes_Proxy(IInternetZoneManager *This,DWORD dwZone,ZONEATTRIBUTES *pZoneAttributes);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_SetZoneAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_GetZoneCustomPolicy_Proxy(IInternetZoneManager *This,DWORD dwZone,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_GetZoneCustomPolicy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_SetZoneCustomPolicy_Proxy(IInternetZoneManager *This,DWORD dwZone,REFGUID guidKey,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_SetZoneCustomPolicy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_GetZoneActionPolicy_Proxy(IInternetZoneManager *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_GetZoneActionPolicy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_SetZoneActionPolicy_Proxy(IInternetZoneManager *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_SetZoneActionPolicy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_PromptAction_Proxy(IInternetZoneManager *This,DWORD dwAction,HWND hwndParent,LPCWSTR pwszUrl,LPCWSTR pwszText,DWORD dwPromptFlags);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_PromptAction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_LogAction_Proxy(IInternetZoneManager *This,DWORD dwAction,LPCWSTR pwszUrl,LPCWSTR pwszText,DWORD dwLogFlags);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_LogAction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_CreateZoneEnumerator_Proxy(IInternetZoneManager *This,DWORD *pdwEnum,DWORD *pdwCount,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_CreateZoneEnumerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_GetZoneAt_Proxy(IInternetZoneManager *This,DWORD dwEnum,DWORD dwIndex,DWORD *pdwZone);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_GetZoneAt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_DestroyZoneEnumerator_Proxy(IInternetZoneManager *This,DWORD dwEnum);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_DestroyZoneEnumerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManager_CopyTemplatePoliciesToZone_Proxy(IInternetZoneManager *This,DWORD dwTemplate,DWORD dwZone,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IInternetZoneManager_CopyTemplatePoliciesToZone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPINTERNETZONEMANAGEREX_DEFINED")
cpp_quote("#define _LPINTERNETZONEMANAGEREX_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0209_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0209_v0_0_s_ifspec;")
cpp_quote("#ifndef __IInternetZoneManagerEx_INTERFACE_DEFINED__")
cpp_quote("#define __IInternetZoneManagerEx_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IInternetZoneManagerEx;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternetZoneManagerEx : public IInternetZoneManager {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetZoneActionPolicyEx(DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg,DWORD dwFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetZoneActionPolicyEx(DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg,DWORD dwFlags) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternetZoneManagerExVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternetZoneManagerEx *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternetZoneManagerEx *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternetZoneManagerEx *This);")
cpp_quote("      HRESULT (WINAPI *GetZoneAttributes)(IInternetZoneManagerEx *This,DWORD dwZone,ZONEATTRIBUTES *pZoneAttributes);")
cpp_quote("      HRESULT (WINAPI *SetZoneAttributes)(IInternetZoneManagerEx *This,DWORD dwZone,ZONEATTRIBUTES *pZoneAttributes);")
cpp_quote("      HRESULT (WINAPI *GetZoneCustomPolicy)(IInternetZoneManagerEx *This,DWORD dwZone,REFGUID guidKey,BYTE **ppPolicy,DWORD *pcbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("      HRESULT (WINAPI *SetZoneCustomPolicy)(IInternetZoneManagerEx *This,DWORD dwZone,REFGUID guidKey,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("      HRESULT (WINAPI *GetZoneActionPolicy)(IInternetZoneManagerEx *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("      HRESULT (WINAPI *SetZoneActionPolicy)(IInternetZoneManagerEx *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg);")
cpp_quote("      HRESULT (WINAPI *PromptAction)(IInternetZoneManagerEx *This,DWORD dwAction,HWND hwndParent,LPCWSTR pwszUrl,LPCWSTR pwszText,DWORD dwPromptFlags);")
cpp_quote("      HRESULT (WINAPI *LogAction)(IInternetZoneManagerEx *This,DWORD dwAction,LPCWSTR pwszUrl,LPCWSTR pwszText,DWORD dwLogFlags);")
cpp_quote("      HRESULT (WINAPI *CreateZoneEnumerator)(IInternetZoneManagerEx *This,DWORD *pdwEnum,DWORD *pdwCount,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *GetZoneAt)(IInternetZoneManagerEx *This,DWORD dwEnum,DWORD dwIndex,DWORD *pdwZone);")
cpp_quote("      HRESULT (WINAPI *DestroyZoneEnumerator)(IInternetZoneManagerEx *This,DWORD dwEnum);")
cpp_quote("      HRESULT (WINAPI *CopyTemplatePoliciesToZone)(IInternetZoneManagerEx *This,DWORD dwTemplate,DWORD dwZone,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *GetZoneActionPolicyEx)(IInternetZoneManagerEx *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *SetZoneActionPolicyEx)(IInternetZoneManagerEx *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg,DWORD dwFlags);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternetZoneManagerExVtbl;")
cpp_quote("  struct IInternetZoneManagerEx {")
cpp_quote("    CONST_VTBL struct IInternetZoneManagerExVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternetZoneManagerEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternetZoneManagerEx_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternetZoneManagerEx_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternetZoneManagerEx_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)")
cpp_quote("#define IInternetZoneManagerEx_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)")
cpp_quote("#define IInternetZoneManagerEx_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,urlZoneReg)")
cpp_quote("#define IInternetZoneManagerEx_SetZoneCustomPolicy(This,dwZone,guidKey,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,pPolicy,cbPolicy,urlZoneReg)")
cpp_quote("#define IInternetZoneManagerEx_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)")
cpp_quote("#define IInternetZoneManagerEx_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)")
cpp_quote("#define IInternetZoneManagerEx_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)")
cpp_quote("#define IInternetZoneManagerEx_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)")
cpp_quote("#define IInternetZoneManagerEx_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)")
cpp_quote("#define IInternetZoneManagerEx_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)")
cpp_quote("#define IInternetZoneManagerEx_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)")
cpp_quote("#define IInternetZoneManagerEx_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)")
cpp_quote("#define IInternetZoneManagerEx_GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)")
cpp_quote("#define IInternetZoneManagerEx_SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternetZoneManagerEx_GetZoneActionPolicyEx_Proxy(IInternetZoneManagerEx *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IInternetZoneManagerEx_GetZoneActionPolicyEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInternetZoneManagerEx_SetZoneActionPolicyEx_Proxy(IInternetZoneManagerEx *This,DWORD dwZone,DWORD dwAction,BYTE *pPolicy,DWORD cbPolicy,URLZONEREG urlZoneReg,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IInternetZoneManagerEx_SetZoneActionPolicyEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  EXTERN_C const IID CLSID_SoftDistExt;")
cpp_quote("")
cpp_quote("#ifndef _LPSOFTDISTEXT_DEFINED")
cpp_quote("#define _LPSOFTDISTEXT_DEFINED")
cpp_quote("")
cpp_quote("#define SOFTDIST_FLAG_USAGE_EMAIL 0x00000001")
cpp_quote("#define SOFTDIST_FLAG_USAGE_PRECACHE 0x00000002")
cpp_quote("#define SOFTDIST_FLAG_USAGE_AUTOINSTALL 0x00000004")
cpp_quote("#define SOFTDIST_FLAG_DELETE_SUBSCRIPTION 0x00000008")
cpp_quote("")
cpp_quote("#define SOFTDIST_ADSTATE_NONE 0x00000000")
cpp_quote("#define SOFTDIST_ADSTATE_AVAILABLE 0x00000001")
cpp_quote("#define SOFTDIST_ADSTATE_DOWNLOADED 0x00000002")
cpp_quote("#define SOFTDIST_ADSTATE_INSTALLED 0x00000003")
cpp_quote("")
cpp_quote("  typedef struct _tagCODEBASEHOLD {")
cpp_quote("    ULONG cbSize;")
cpp_quote("    LPWSTR szDistUnit;")
cpp_quote("    LPWSTR szCodeBase;")
cpp_quote("    DWORD dwVersionMS;")
cpp_quote("    DWORD dwVersionLS;")
cpp_quote("    DWORD dwStyle;")
cpp_quote("  } CODEBASEHOLD;")
cpp_quote("")
cpp_quote("  typedef struct _tagCODEBASEHOLD *LPCODEBASEHOLD;")
cpp_quote("")
cpp_quote("  typedef struct _tagSOFTDISTINFO {")
cpp_quote("    ULONG cbSize;")
cpp_quote("    DWORD dwFlags;")
cpp_quote("    DWORD dwAdState;")
cpp_quote("    LPWSTR szTitle;")
cpp_quote("    LPWSTR szAbstract;")
cpp_quote("    LPWSTR szHREF;")
cpp_quote("    DWORD dwInstalledVersionMS;")
cpp_quote("    DWORD dwInstalledVersionLS;")
cpp_quote("    DWORD dwUpdateVersionMS;")
cpp_quote("    DWORD dwUpdateVersionLS;")
cpp_quote("    DWORD dwAdvertisedVersionMS;")
cpp_quote("    DWORD dwAdvertisedVersionLS;")
cpp_quote("    DWORD dwReserved;")
cpp_quote("  } SOFTDISTINFO;")
cpp_quote("")
cpp_quote("  typedef struct _tagSOFTDISTINFO *LPSOFTDISTINFO;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0210_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0210_v0_0_s_ifspec;")
cpp_quote("#ifndef __ISoftDistExt_INTERFACE_DEFINED__")
cpp_quote("#define __ISoftDistExt_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ISoftDistExt;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISoftDistExt : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ProcessSoftDist(LPCWSTR szCDFURL,IXMLElement *pSoftDistElement,LPSOFTDISTINFO lpsdi) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetFirstCodeBase(LPWSTR *szCodeBase,LPDWORD dwMaxSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetNextCodeBase(LPWSTR *szCodeBase,LPDWORD dwMaxSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI AsyncInstallDistributionUnit(IBindCtx *pbc,LPVOID pvReserved,DWORD flags,LPCODEBASEHOLD lpcbh) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISoftDistExtVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISoftDistExt *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISoftDistExt *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISoftDistExt *This);")
cpp_quote("      HRESULT (WINAPI *ProcessSoftDist)(ISoftDistExt *This,LPCWSTR szCDFURL,IXMLElement *pSoftDistElement,LPSOFTDISTINFO lpsdi);")
cpp_quote("      HRESULT (WINAPI *GetFirstCodeBase)(ISoftDistExt *This,LPWSTR *szCodeBase,LPDWORD dwMaxSize);")
cpp_quote("      HRESULT (WINAPI *GetNextCodeBase)(ISoftDistExt *This,LPWSTR *szCodeBase,LPDWORD dwMaxSize);")
cpp_quote("      HRESULT (WINAPI *AsyncInstallDistributionUnit)(ISoftDistExt *This,IBindCtx *pbc,LPVOID pvReserved,DWORD flags,LPCODEBASEHOLD lpcbh);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISoftDistExtVtbl;")
cpp_quote("  struct ISoftDistExt {")
cpp_quote("    CONST_VTBL struct ISoftDistExtVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISoftDistExt_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISoftDistExt_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISoftDistExt_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISoftDistExt_ProcessSoftDist(This,szCDFURL,pSoftDistElement,lpsdi) (This)->lpVtbl->ProcessSoftDist(This,szCDFURL,pSoftDistElement,lpsdi)")
cpp_quote("#define ISoftDistExt_GetFirstCodeBase(This,szCodeBase,dwMaxSize) (This)->lpVtbl->GetFirstCodeBase(This,szCodeBase,dwMaxSize)")
cpp_quote("#define ISoftDistExt_GetNextCodeBase(This,szCodeBase,dwMaxSize) (This)->lpVtbl->GetNextCodeBase(This,szCodeBase,dwMaxSize)")
cpp_quote("#define ISoftDistExt_AsyncInstallDistributionUnit(This,pbc,pvReserved,flags,lpcbh) (This)->lpVtbl->AsyncInstallDistributionUnit(This,pbc,pvReserved,flags,lpcbh)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISoftDistExt_ProcessSoftDist_Proxy(ISoftDistExt *This,LPCWSTR szCDFURL,IXMLElement *pSoftDistElement,LPSOFTDISTINFO lpsdi);")
cpp_quote("  void __RPC_STUB ISoftDistExt_ProcessSoftDist_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISoftDistExt_GetFirstCodeBase_Proxy(ISoftDistExt *This,LPWSTR *szCodeBase,LPDWORD dwMaxSize);")
cpp_quote("  void __RPC_STUB ISoftDistExt_GetFirstCodeBase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISoftDistExt_GetNextCodeBase_Proxy(ISoftDistExt *This,LPWSTR *szCodeBase,LPDWORD dwMaxSize);")
cpp_quote("  void __RPC_STUB ISoftDistExt_GetNextCodeBase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISoftDistExt_AsyncInstallDistributionUnit_Proxy(ISoftDistExt *This,IBindCtx *pbc,LPVOID pvReserved,DWORD flags,LPCODEBASEHOLD lpcbh);")
cpp_quote("  void __RPC_STUB ISoftDistExt_AsyncInstallDistributionUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  STDAPI GetSoftwareUpdateInfo(LPCWSTR szDistUnit,LPSOFTDISTINFO psdi);")
cpp_quote("  STDAPI SetSoftwareUpdateAdvertisementState(LPCWSTR szDistUnit,DWORD dwAdState,DWORD dwAdvertisedVersionMS,DWORD dwAdvertisedVersionLS);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPCATALOGFILEINFO_DEFINED")
cpp_quote("#define _LPCATALOGFILEINFO_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0211_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0211_v0_0_s_ifspec;")
cpp_quote("#ifndef __ICatalogFileInfo_INTERFACE_DEFINED__")
cpp_quote("#define __ICatalogFileInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef ICatalogFileInfo *LPCATALOGFILEINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ICatalogFileInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICatalogFileInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetCatalogFile(LPSTR *ppszCatalogFile) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetJavaTrust(void **ppJavaTrust) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICatalogFileInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICatalogFileInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICatalogFileInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICatalogFileInfo *This);")
cpp_quote("      HRESULT (WINAPI *GetCatalogFile)(ICatalogFileInfo *This,LPSTR *ppszCatalogFile);")
cpp_quote("      HRESULT (WINAPI *GetJavaTrust)(ICatalogFileInfo *This,void **ppJavaTrust);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICatalogFileInfoVtbl;")
cpp_quote("  struct ICatalogFileInfo {")
cpp_quote("    CONST_VTBL struct ICatalogFileInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICatalogFileInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICatalogFileInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICatalogFileInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICatalogFileInfo_GetCatalogFile(This,ppszCatalogFile) (This)->lpVtbl->GetCatalogFile(This,ppszCatalogFile)")
cpp_quote("#define ICatalogFileInfo_GetJavaTrust(This,ppJavaTrust) (This)->lpVtbl->GetJavaTrust(This,ppJavaTrust)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICatalogFileInfo_GetCatalogFile_Proxy(ICatalogFileInfo *This,LPSTR *ppszCatalogFile);")
cpp_quote("  void __RPC_STUB ICatalogFileInfo_GetCatalogFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICatalogFileInfo_GetJavaTrust_Proxy(ICatalogFileInfo *This,void **ppJavaTrust);")
cpp_quote("  void __RPC_STUB ICatalogFileInfo_GetJavaTrust_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPDATAFILTER_DEFINED")
cpp_quote("#define _LPDATAFILTER_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0212_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0212_v0_0_s_ifspec;")
cpp_quote("#ifndef __IDataFilter_INTERFACE_DEFINED__")
cpp_quote("#define __IDataFilter_INTERFACE_DEFINED__")
cpp_quote("  typedef IDataFilter *LPDATAFILTER;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IDataFilter;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IDataFilter : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI DoEncode(DWORD dwFlags,LONG lInBufferSize,BYTE *pbInBuffer,LONG lOutBufferSize,BYTE *pbOutBuffer,LONG lInBytesAvailable,LONG *plInBytesRead,LONG *plOutBytesWritten,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI DoDecode(DWORD dwFlags,LONG lInBufferSize,BYTE *pbInBuffer,LONG lOutBufferSize,BYTE *pbOutBuffer,LONG lInBytesAvailable,LONG *plInBytesRead,LONG *plOutBytesWritten,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetEncodingLevel(DWORD dwEncLevel) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IDataFilterVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IDataFilter *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IDataFilter *This);")
cpp_quote("      ULONG (WINAPI *Release)(IDataFilter *This);")
cpp_quote("      HRESULT (WINAPI *DoEncode)(IDataFilter *This,DWORD dwFlags,LONG lInBufferSize,BYTE *pbInBuffer,LONG lOutBufferSize,BYTE *pbOutBuffer,LONG lInBytesAvailable,LONG *plInBytesRead,LONG *plOutBytesWritten,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *DoDecode)(IDataFilter *This,DWORD dwFlags,LONG lInBufferSize,BYTE *pbInBuffer,LONG lOutBufferSize,BYTE *pbOutBuffer,LONG lInBytesAvailable,LONG *plInBytesRead,LONG *plOutBytesWritten,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *SetEncodingLevel)(IDataFilter *This,DWORD dwEncLevel);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IDataFilterVtbl;")
cpp_quote("  struct IDataFilter {")
cpp_quote("    CONST_VTBL struct IDataFilterVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IDataFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IDataFilter_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IDataFilter_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IDataFilter_DoEncode(This,dwFlags,lInBufferSize,pbInBuffer,lOutBufferSize,pbOutBuffer,lInBytesAvailable,plInBytesRead,plOutBytesWritten,dwReserved) (This)->lpVtbl->DoEncode(This,dwFlags,lInBufferSize,pbInBuffer,lOutBufferSize,pbOutBuffer,lInBytesAvailable,plInBytesRead,plOutBytesWritten,dwReserved)")
cpp_quote("#define IDataFilter_DoDecode(This,dwFlags,lInBufferSize,pbInBuffer,lOutBufferSize,pbOutBuffer,lInBytesAvailable,plInBytesRead,plOutBytesWritten,dwReserved) (This)->lpVtbl->DoDecode(This,dwFlags,lInBufferSize,pbInBuffer,lOutBufferSize,pbOutBuffer,lInBytesAvailable,plInBytesRead,plOutBytesWritten,dwReserved)")
cpp_quote("#define IDataFilter_SetEncodingLevel(This,dwEncLevel) (This)->lpVtbl->SetEncodingLevel(This,dwEncLevel)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IDataFilter_DoEncode_Proxy(IDataFilter *This,DWORD dwFlags,LONG lInBufferSize,BYTE *pbInBuffer,LONG lOutBufferSize,BYTE *pbOutBuffer,LONG lInBytesAvailable,LONG *plInBytesRead,LONG *plOutBytesWritten,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IDataFilter_DoEncode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDataFilter_DoDecode_Proxy(IDataFilter *This,DWORD dwFlags,LONG lInBufferSize,BYTE *pbInBuffer,LONG lOutBufferSize,BYTE *pbOutBuffer,LONG lInBytesAvailable,LONG *plInBytesRead,LONG *plOutBytesWritten,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IDataFilter_DoDecode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDataFilter_SetEncodingLevel_Proxy(IDataFilter *This,DWORD dwEncLevel);")
cpp_quote("  void __RPC_STUB IDataFilter_SetEncodingLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPENCODINGFILTERFACTORY_DEFINED")
cpp_quote("#define _LPENCODINGFILTERFACTORY_DEFINED")
cpp_quote("  typedef struct _tagPROTOCOLFILTERDATA {")
cpp_quote("    DWORD cbSize;")
cpp_quote("    IInternetProtocolSink *pProtocolSink;")
cpp_quote("    IInternetProtocol *pProtocol;")
cpp_quote("    IUnknown *pUnk;")
cpp_quote("    DWORD dwFilterFlags;")
cpp_quote("  } PROTOCOLFILTERDATA;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0213_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0213_v0_0_s_ifspec;")
cpp_quote("#ifndef __IEncodingFilterFactory_INTERFACE_DEFINED__")
cpp_quote("#define __IEncodingFilterFactory_INTERFACE_DEFINED__")
cpp_quote("  typedef IEncodingFilterFactory *LPENCODINGFILTERFACTORY;")
cpp_quote("")
cpp_quote("  typedef struct _tagDATAINFO {")
cpp_quote("    ULONG ulTotalSize;")
cpp_quote("    ULONG ulavrPacketSize;")
cpp_quote("    ULONG ulConnectSpeed;")
cpp_quote("    ULONG ulProcessorSpeed;")
cpp_quote("  } DATAINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IEncodingFilterFactory;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEncodingFilterFactory : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI FindBestFilter(LPCWSTR pwzCodeIn,LPCWSTR pwzCodeOut,DATAINFO info,IDataFilter **ppDF) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDefaultFilter(LPCWSTR pwzCodeIn,LPCWSTR pwzCodeOut,IDataFilter **ppDF) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEncodingFilterFactoryVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEncodingFilterFactory *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEncodingFilterFactory *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEncodingFilterFactory *This);")
cpp_quote("      HRESULT (WINAPI *FindBestFilter)(IEncodingFilterFactory *This,LPCWSTR pwzCodeIn,LPCWSTR pwzCodeOut,DATAINFO info,IDataFilter **ppDF);")
cpp_quote("      HRESULT (WINAPI *GetDefaultFilter)(IEncodingFilterFactory *This,LPCWSTR pwzCodeIn,LPCWSTR pwzCodeOut,IDataFilter **ppDF);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEncodingFilterFactoryVtbl;")
cpp_quote("  struct IEncodingFilterFactory {")
cpp_quote("    CONST_VTBL struct IEncodingFilterFactoryVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEncodingFilterFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEncodingFilterFactory_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEncodingFilterFactory_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEncodingFilterFactory_FindBestFilter(This,pwzCodeIn,pwzCodeOut,info,ppDF) (This)->lpVtbl->FindBestFilter(This,pwzCodeIn,pwzCodeOut,info,ppDF)")
cpp_quote("#define IEncodingFilterFactory_GetDefaultFilter(This,pwzCodeIn,pwzCodeOut,ppDF) (This)->lpVtbl->GetDefaultFilter(This,pwzCodeIn,pwzCodeOut,ppDF)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEncodingFilterFactory_FindBestFilter_Proxy(IEncodingFilterFactory *This,LPCWSTR pwzCodeIn,LPCWSTR pwzCodeOut,DATAINFO info,IDataFilter **ppDF);")
cpp_quote("  void __RPC_STUB IEncodingFilterFactory_FindBestFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEncodingFilterFactory_GetDefaultFilter_Proxy(IEncodingFilterFactory *This,LPCWSTR pwzCodeIn,LPCWSTR pwzCodeOut,IDataFilter **ppDF);")
cpp_quote("  void __RPC_STUB IEncodingFilterFactory_GetDefaultFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _HITLOGGING_DEFINED")
cpp_quote("#define _HITLOGGING_DEFINED")
cpp_quote("  WINBOOL WINAPI IsLoggingEnabledA(LPCSTR pszUrl);")
cpp_quote("  WINBOOL WINAPI IsLoggingEnabledW(LPCWSTR pwszUrl);")
cpp_quote("")
cpp_quote("#define IsLoggingEnabled __MINGW_NAME_AW(IsLoggingEnabled)")
cpp_quote("")
cpp_quote("  typedef struct _tagHIT_LOGGING_INFO {")
cpp_quote("    DWORD dwStructSize;")
cpp_quote("    LPSTR lpszLoggedUrlName;")
cpp_quote("    SYSTEMTIME StartTime;")
cpp_quote("    SYSTEMTIME EndTime;")
cpp_quote("    LPSTR lpszExtendedInfo;")
cpp_quote("  } HIT_LOGGING_INFO;")
cpp_quote("")
cpp_quote("  typedef struct _tagHIT_LOGGING_INFO *LPHIT_LOGGING_INFO;")
cpp_quote("")
cpp_quote("  WINBOOL WINAPI WriteHitLogging(LPHIT_LOGGING_INFO lpLogginginfo);")
cpp_quote("#define CONFIRMSAFETYACTION_LOADOBJECT 0x00000001")
cpp_quote("")
cpp_quote("  struct CONFIRMSAFETY {")
cpp_quote("    CLSID clsid;")
cpp_quote("    IUnknown *pUnk;")
cpp_quote("    DWORD dwFlags;")
cpp_quote("  };")
cpp_quote("  EXTERN_C const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPIWRAPPEDPROTOCOL_DEFINED")
cpp_quote("#define _LPIWRAPPEDPROTOCOL_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0214_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0214_v0_0_s_ifspec;")
cpp_quote("#ifndef __IWrappedProtocol_INTERFACE_DEFINED__")
cpp_quote("#define __IWrappedProtocol_INTERFACE_DEFINED__")
cpp_quote("  typedef IWrappedProtocol *LPIWRAPPEDPROTOCOL;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IWrappedProtocol;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IWrappedProtocol : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetWrapperCode(LONG *pnCode,DWORD_PTR dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IWrappedProtocolVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IWrappedProtocol *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IWrappedProtocol *This);")
cpp_quote("      ULONG (WINAPI *Release)(IWrappedProtocol *This);")
cpp_quote("      HRESULT (WINAPI *GetWrapperCode)(IWrappedProtocol *This,LONG *pnCode,DWORD_PTR dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IWrappedProtocolVtbl;")
cpp_quote("  struct IWrappedProtocol {")
cpp_quote("    CONST_VTBL struct IWrappedProtocolVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IWrappedProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IWrappedProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IWrappedProtocol_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IWrappedProtocol_GetWrapperCode(This,pnCode,dwReserved) (This)->lpVtbl->GetWrapperCode(This,pnCode,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IWrappedProtocol_GetWrapperCode_Proxy(IWrappedProtocol *This,LONG *pnCode,DWORD_PTR dwReserved);")
cpp_quote("  void __RPC_STUB IWrappedProtocol_GetWrapperCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0215_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_urlmon_0215_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("  unsigned long __RPC_API HWND_UserSize(unsigned long *,unsigned long,HWND *);")
cpp_quote("  unsigned char *__RPC_API HWND_UserMarshal(unsigned long *,unsigned char *,HWND *);")
cpp_quote("  unsigned char *__RPC_API HWND_UserUnmarshal(unsigned long *,unsigned char *,HWND *);")
cpp_quote("  void __RPC_API HWND_UserFree(unsigned long *,HWND *);")
cpp_quote("")
cpp_quote("  HRESULT WINAPI IWinInetInfo_QueryOption_Proxy(IWinInetInfo *This,DWORD dwOption,LPVOID pBuffer,DWORD *pcbBuf);")
cpp_quote("  HRESULT WINAPI IWinInetInfo_QueryOption_Stub(IWinInetInfo *This,DWORD dwOption,BYTE *pBuffer,DWORD *pcbBuf);")
cpp_quote("  HRESULT WINAPI IWinInetHttpInfo_QueryInfo_Proxy(IWinInetHttpInfo *This,DWORD dwOption,LPVOID pBuffer,DWORD *pcbBuf,DWORD *pdwFlags,DWORD *pdwReserved);")
cpp_quote("  HRESULT WINAPI IWinInetHttpInfo_QueryInfo_Stub(IWinInetHttpInfo *This,DWORD dwOption,BYTE *pBuffer,DWORD *pcbBuf,DWORD *pdwFlags,DWORD *pdwReserved);")
cpp_quote("  HRESULT WINAPI IBindHost_MonikerBindToStorage_Proxy(IBindHost *This,IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,void **ppvObj);")
cpp_quote("  HRESULT WINAPI IBindHost_MonikerBindToStorage_Stub(IBindHost *This,IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,IUnknown **ppvObj);")
cpp_quote("  HRESULT WINAPI IBindHost_MonikerBindToObject_Proxy(IBindHost *This,IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,void **ppvObj);")
cpp_quote("  HRESULT WINAPI IBindHost_MonikerBindToObject_Stub(IBindHost *This,IMoniker *pMk,IBindCtx *pBC,IBindStatusCallback *pBSC,REFIID riid,IUnknown **ppvObj);")
