19#define NONAMELESSUNION
29static WCHAR cbinding_contextW[] = {
'C',
'B',
'i',
'n',
'd',
'i',
'n',
'g',
' ',
'C',
'o',
'n',
't',
'e',
'x',
't',0};
30static WCHAR bscb_holderW[] = {
'_',
'B',
'S',
'C',
'B',
'_',
'H',
'o',
'l',
'd',
'e',
'r',
'_',0 };
63#define BINDING_LOCKED 0x0001
64#define BINDING_STOPPED 0x0002
65#define BINDING_OBJAVAIL 0x0004
66#define BINDING_ABORTED 0x0008
119 static const char *
const BINDINFOF_str[] = {
121 "BINDINFOF_URLENCODESTGMEDDATA",
122 "BINDINFOF_URLENCODEDEXTRAINFO"
125 static const char *
const BINDVERB_str[] = {
139 " %d, %08x, %d, %d\n"
146 bi->stgmedData.tymed, bi->stgmedData.u.hGlobal, bi->stgmedData.pUnkForRelease,
147 bi->grfBindInfoF > BINDINFOF_URLENCODEDEXTRAINFO
148 ?
"unknown" : BINDINFOF_str[bi->grfBindInfoF],
149 bi->dwBindVerb > BINDVERB_CUSTOM
150 ?
"unknown" : BINDVERB_str[bi->dwBindVerb],
152 bi->cbstgmedData, bi->dwOptions, bi->dwOptionsFlags, bi->dwCodePage,
153 bi->securityAttributes.nLength,
154 bi->securityAttributes.lpSecurityDescriptor,
155 bi->securityAttributes.bInheritHandle,
157 bi->pUnk, bi->dwReserved
166 if(!
This->mime || !
This->report_mime)
169 IBindStatusCallback_OnProgress(
This->callback, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE,
This->mime);
178 binding->
state &= ~BINDING_LOCKED;
197 static const WCHAR mime_keyW[] =
198 {
'M',
'I',
'M',
'E',
'\\',
'D',
'a',
't',
'a',
'b',
'a',
's',
'e',
'\\',
199 'C',
'o',
'n',
't',
'e',
'n',
't',
' ',
'T',
'y',
'p',
'e',
'\\'};
200 static const WCHAR clsidW[] = {
'C',
'L',
'S',
'I',
'D',0};
210 WARN(
"Could not open MIME key: %x\n",
res);
219 WARN(
"Could not get CLSID: %08x\n",
res);
226 WARN(
"Could not parse CLSID: %08x\n",
hres);
241 WARN(
"CreateAsyncBindCtxEx failed: %08x\n",
hres);
250 IBindCtx_Release(bctx);
261 &binding->
iid, (
void**)&binding->
obj);
263 WARN(
"CoCreateInstance failed: %08x\n",
hres);
264 return INET_E_CANNOT_INSTANTIATE_OBJECT;
269 hres = IUnknown_QueryInterface(binding->
obj, &IID_IPersistMoniker, (
void**)&persist);
273 hres = IPersistMoniker_QueryInterface(persist, &IID_IMonikerProp, (
void**)&prop);
275 IMonikerProp_PutProperty(prop, MIMETYPEPROP, binding->
mime);
276 IMonikerProp_PutProperty(prop, CLASSIDPROP, clsid_str);
277 IMonikerProp_Release(prop);
282 IPersistMoniker_Release(persist);
284 FIXME(
"Could not get IPersistMoniker: %08x\n",
hres);
288 IBindStatusCallback_OnObjectAvailable(binding->
callback, &binding->
iid, binding->
obj);
300 FIXME(
"MIME not available\n");
305 IBindStatusCallback_OnProgress(binding->
callback, 0, 0, BINDSTATUS_CLASSIDAVAILABLE, clsid_str);
307 IBindStatusCallback_OnProgress(binding->
callback, 0, 0, BINDSTATUS_BEGINSYNCOPERATION,
NULL);
317 IBindStatusCallback_OnProgress(binding->
callback, 0, 0, BINDSTATUS_ENDSYNCOPERATION,
NULL);
330 if(
This->use_cache_file) {
353 IUnknown_AddRef(&
This->IUnknown_iface);
381 IInternetProtocolEx_Release(
This->protocol);
407 IInternetProtocolEx_AddRef(
protocol);
448 IStream_AddRef(&
This->IStream_iface);
474 IUnknown_Release(&
This->buf->IUnknown_iface);
490 TRACE(
"(%p)->(%p %d %p)\n",
This, pv,
cb, pcbRead);
514 TRACE(
"(%p)->(%p %d %p)\n",
This, pv,
cb, pcbWritten);
526 TRACE(
"(%p)->(%d %08x %p)\n",
This, dlibMove.
u.LowPart, dwOrigin, plibNewPosition);
530 FIXME(
"no cache file, not supported\n");
535 case STREAM_SEEK_SET:
538 case STREAM_SEEK_CUR:
541 case STREAM_SEEK_END:
545 WARN(
"Invalid origin %x\n", dwOrigin);
562 FIXME(
"(%p)->(%d)\n",
This, libNewSize.
u.LowPart);
570 FIXME(
"(%p)->(%p %d %p %p)\n",
This, pstm,
cb.u.LowPart, pcbRead, pcbWritten);
578 TRACE(
"(%p)->(%08x)\n",
This, grfCommitFlags);
596 FIXME(
"(%p)->(%d %d %d)\n",
This, libOffset.
u.LowPart,
cb.u.LowPart, dwLockType);
604 FIXME(
"(%p)->(%d %d %d)\n",
This, libOffset.
u.LowPart,
cb.u.LowPart, dwLockType);
612 TRACE(
"(%p)->(%p %08x)\n",
This, pstatstg, dwStatFlag);
617 memset(pstatstg, 0,
sizeof(STATSTG));
619 if(!(dwStatFlag&STATFLAG_NONAME) &&
This->buf->cache_file) {
621 if(!pstatstg->pwcsName)
627 pstatstg->type = STGTY_STREAM;
630 GetFileTime(
This->buf->file, &pstatstg->ctime, &pstatstg->atime, &pstatstg->mtime);
631 if(pstatstg->cbSize.QuadPart)
672 stgmed->tymed = TYMED_ISTREAM;
674 stgmed->pUnkForRelease = &
stream->buf->IUnknown_iface;
685 return INET_E_DATA_NOT_AVAILABLE;
711 IUnknown_AddRef(&
buf->IUnknown_iface);
716 return &
ret->stgmed_obj;
732 WARN(
"cache_file not set\n");
733 return INET_E_DATA_NOT_AVAILABLE;
738 stgmed->tymed = TYMED_FILE;
747 return bindf & BINDF_ASYNCHRONOUS ? MK_S_ASYNCHRONOUS :
S_OK;
762 IUnknown_AddRef(&
buf->IUnknown_iface);
765 return &
ret->stgmed_obj;
786 TRACE(
"(%p)->(IID_IInternetProtocolSink %p)\n",
This,
ppv);
787 *
ppv = &
This->IInternetProtocolSink_iface;
790 *
ppv = &
This->IInternetBindInfo_iface;
793 *
ppv = &
This->IServiceProvider_iface;
801 hres = IInternetProtocolEx_QueryInterface(&
This->protocol->IInternetProtocolEx_iface,
802 &IID_IWinInetInfo, (
void**)&wininet_info);
804 IWinInetInfo_Release(wininet_info);
805 *
ppv = &
This->IWinInetHttpInfo_iface;
814 hres = IInternetProtocolEx_QueryInterface(&
This->protocol->IInternetProtocolEx_iface,
815 &IID_IWinInetHttpInfo, (
void**)&http_info);
817 IWinInetHttpInfo_Release(http_info);
818 *
ppv = &
This->IWinInetHttpInfo_iface;
823 IBinding_AddRef(&
This->IBinding_iface);
852 IMoniker_Release(
This->mon);
854 IBindStatusCallback_Release(
This->callback);
856 IInternetProtocolEx_Release(&
This->protocol->IInternetProtocolEx_iface);
857 if(
This->service_provider)
858 IServiceProvider_Release(
This->service_provider);
860 IUnknown_Release(&
This->stgmed_buf->IUnknown_iface);
862 This->stgmed_obj->vtbl->release(
This->stgmed_obj);
864 IUnknown_Release(
This->obj);
866 IBindCtx_Release(
This->bctx);
869 This->section.DebugInfo->Spare[0] = 0;
892 hres = IInternetProtocolEx_Abort(&
This->protocol->IInternetProtocolEx_iface,
E_ABORT,
974 hres = IUnknown_QueryInterface(unk, &IID_IBinding, (
void**)&binding);
975 IUnknown_Release(unk);
993 return IBinding_QueryInterface(&
This->IBinding_iface,
riid,
ppv);
999 return IBinding_AddRef(&
This->IBinding_iface);
1005 return IBinding_Release(&
This->IBinding_iface);
1009 PROTOCOLDATA *pProtocolData)
1013 WARN(
"(%p)->(%p)\n",
This, pProtocolData);
1021 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1032 switch(ulStatusCode) {
1033 case BINDSTATUS_FINDINGRESOURCE:
1036 case BINDSTATUS_CONNECTING:
1039 case BINDSTATUS_REDIRECTING:
1044 case BINDSTATUS_BEGINDOWNLOADDATA:
1046 case BINDSTATUS_SENDINGREQUEST:
1049 case BINDSTATUS_PROTOCOLCLASSID:
1052 case BINDSTATUS_MIMETYPEAVAILABLE:
1053 case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
1056 case BINDSTATUS_CACHEFILENAMEAVAILABLE:
1059 case BINDSTATUS_DECODING:
1060 IBindStatusCallback_OnProgress(
This->callback, 0, 0, BINDSTATUS_DECODING, szStatusText);
1062 case BINDSTATUS_LOADINGMIMEHANDLER:
1065 case BINDSTATUS_DIRECTBIND:
1068 case BINDSTATUS_ACCEPTRANGES:
1071 FIXME(
"Unhandled status code %d\n", ulStatusCode);
1080 FORMATETC formatetc = {0,
NULL, 1, -1, TYMED_ISTREAM};
1098 sent_begindownloaddata =
TRUE;
1099 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1100 BINDSTATUS_BEGINDOWNLOADDATA,
This->url);
1102 if(
This->stgmed_buf->cache_file)
1103 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1104 BINDSTATUS_CACHEFILENAMEAVAILABLE,
This->stgmed_buf->cache_file);
1107 if(
This->stgmed_buf->hres ==
S_FALSE || (bscf & BSCF_LASTDATANOTIFICATION)) {
1109 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1110 BINDSTATUS_ENDDOWNLOADDATA,
This->url);
1111 }
else if(!sent_begindownloaddata) {
1112 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1113 BINDSTATUS_DOWNLOADINGDATA,
This->url);
1119 if(
This->to_object) {
1121 IBinding_AddRef(&
This->IBinding_iface);
1123 IBinding_Release(&
This->IBinding_iface);
1131 &
This->protocol->IInternetProtocolEx_iface, 0);
1136 hres =
This->stgmed_obj->vtbl->fill_stgmed(
This->stgmed_obj, &stgmed);
1142 formatetc.tymed = stgmed.tymed;
1143 formatetc.cfFormat =
This->clipboard_format;
1146 &formatetc, &stgmed);
1150 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1151 BINDSTATUS_ENDDOWNLOADDATA,
This->url);
1154 WARN(
"OnDataAvailable returned %x\n",
hres);
1169 TRACE(
"(%p)->(%d %u %u)\n",
This, grfBSCF, ulProgress, ulProgressMax);
1184 IInternetProtocolEx_Terminate(&
This->protocol->IInternetProtocolEx_iface, 0);
1207 return IBinding_QueryInterface(&
This->IBinding_iface,
riid,
ppv);
1213 return IBinding_AddRef(&
This->IBinding_iface);
1219 return IBinding_Release(&
This->IBinding_iface);
1223 DWORD *grfBINDF, BINDINFO *pbindinfo)
1227 TRACE(
"(%p)->(%p %p)\n",
This, grfBINDF, pbindinfo);
1229 *grfBINDF =
This->bindf;
1238 TRACE(
"(%p)->(%d %p %d %p)\n",
This, ulStringType, ppwzStr, cEl, pcElFetched);
1240 switch(ulStringType) {
1241 case BINDSTRING_ACCEPT_MIMES: {
1242 static const WCHAR wszMimes[] = {
'*',
'/',
'*',0};
1244 if(!ppwzStr || !pcElFetched)
1248 memcpy(ppwzStr[0], wszMimes,
sizeof(wszMimes));
1252 case BINDSTRING_USER_AGENT: {
1256 hres = IBindStatusCallback_QueryInterface(
This->callback, &IID_IInternetBindInfo,
1261 hres = IInternetBindInfo_GetBindString(bindinfo, ulStringType, ppwzStr,
1263 IInternetBindInfo_Release(bindinfo);
1267 case BINDSTRING_URL: {
1270 if(!ppwzStr || !pcElFetched)
1280 FIXME(
"not supported string type %d\n", ulStringType);
1300 return IBinding_QueryInterface(&
This->IBinding_iface,
riid,
ppv);
1306 return IBinding_AddRef(&
This->IBinding_iface);
1312 return IBinding_Release(&
This->IBinding_iface);
1324 hres = IInternetProtocolEx_QueryInterface(&
This->protocol->IInternetProtocolEx_iface,
1325 &IID_IWinInetInfo, (
void**)&wininet_info);
1329 hres = IWinInetInfo_QueryOption(wininet_info, dwOption,
pBuffer, pcbBuffer);
1330 IWinInetInfo_Release(wininet_info);
1343 hres = IInternetProtocolEx_QueryInterface(&
This->protocol->IInternetProtocolEx_iface,
1344 &IID_IWinInetHttpInfo, (
void**)&http_info);
1349 IWinInetHttpInfo_Release(http_info);
1370 return IBinding_QueryInterface(&
This->IBinding_iface,
riid,
ppv);
1376 return IBinding_AddRef(&
This->IBinding_iface);
1382 return IBinding_Release(&
This->IBinding_iface);
1393 if(
This->service_provider) {
1394 hres = IServiceProvider_QueryService(
This->service_provider, guidService,
1420 hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (
void**)
callback);
1421 IUnknown_Release(unk);
1465 ret->to_object = to_obj;
1468 ret->report_mime = !binding_ctx;
1472 IBindCtx_AddRef(pbc);
1477 IMoniker_AddRef(mon);
1481 ret->bindinfo.cbSize =
sizeof(BINDINFO);
1484 ret->section.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": Binding.section");
1488 WARN(
"Could not get IBindStatusCallback\n");
1489 IBinding_Release(&
ret->IBinding_iface);
1493 IBindStatusCallback_QueryInterface(
ret->callback, &IID_IServiceProvider,
1494 (
void**)&
ret->service_provider);
1498 IInternetProtocolEx_AddRef(&
ret->protocol->IInternetProtocolEx_iface);
1502 WARN(
"Could not get protocol handler\n");
1503 IBinding_Release(&
ret->IBinding_iface);
1508 hres = IBindStatusCallback_GetBindInfo(
ret->callback, &
ret->bindf, &
ret->bindinfo);
1510 WARN(
"GetBindInfo failed: %08x\n",
hres);
1511 IBinding_Release(&
ret->IBinding_iface);
1518 ret->bindf |= BINDF_FROMURLMON;
1520 ret->bindinfo.dwOptions |= 0x100000;
1522 if(!(
ret->bindf & BINDF_ASYNCHRONOUS) || !(
ret->bindf & BINDF_PULLDATA)) {
1523 ret->bindf |= BINDF_NEEDFILE;
1526 ret->bindf |= BINDF_NEEDFILE;
1531 IBinding_Release(&
ret->IBinding_iface);
1537 IUnknown_AddRef(&
ret->stgmed_buf->IUnknown_iface);
1548 ret->bindf |= BINDF_NEEDFILE;
1552 IBinding_Release(&
ret->IBinding_iface);
1573 WARN(
"OnStartBinding failed: %08x\n",
hres);
1575 hres = INET_E_DOWNLOAD_FAILURE;
1586 IBindStatusCallback_OnProgress(binding->
callback, 0, 0, BINDSTATUS_REDIRECTING, binding_ctx->
redirect_url);
1592 PI_APARTMENTTHREADED|PI_MIMEVERIFICATION, 0);
1604 while(!(binding->
bindf & BINDF_ASYNCHRONOUS) &&
1626 IBinding_Release(&binding_ctx->IBinding_iface);
1635 }
else if(binding->
bindf & BINDF_ASYNCHRONOUS) {
1636 hres = MK_S_ASYNCHRONOUS;
1659 }
else if(binding->
bindf & BINDF_ASYNCHRONOUS) {
1660 hres = MK_S_ASYNCHRONOUS;
1663 IUnknown_AddRef(binding->
obj);
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
static void stgmed_stream_release(stgmed_obj_t *obj)
static HRESULT WINAPI InternetBindInfo_GetBindString(IInternetBindInfo *iface, ULONG ulStringType, LPOLESTR *ppwzStr, ULONG cEl, ULONG *pcElFetched)
static Binding * impl_from_IInternetBindInfo(IInternetBindInfo *iface)
static HRESULT create_mime_object(Binding *binding, const CLSID *clsid, LPCWSTR clsid_str)
static Binding * impl_from_IWinInetHttpInfo(IWinInetHttpInfo *iface)
static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink *iface, ULONG ulStatusCode, LPCWSTR szStatusText)
static HRESULT WINAPI ProtocolStream_Stat(IStream *iface, STATSTG *pstatstg, DWORD dwStatFlag)
static HRESULT WINAPI WinInetHttpInfo_QueryInterface(IWinInetHttpInfo *iface, REFIID riid, void **ppv)
static stgmed_obj_t * create_stgmed_stream(stgmed_buf_t *buf)
static HRESULT WINAPI ProtocolStream_Revert(IStream *iface)
static HRESULT stgmed_file_fill_stgmed(stgmed_obj_t *obj, STGMEDIUM *stgmed)
static const IWinInetHttpInfoVtbl WinInetHttpInfoVtbl
static const IInternetBindInfoVtbl InternetBindInfoVtbl
HRESULT bind_to_storage(IUri *uri, IBindCtx *pbc, REFIID riid, void **ppv)
static ULONG WINAPI InternetBindInfo_Release(IInternetBindInfo *iface)
static void load_doc_mon(Binding *binding, IPersistMoniker *persist)
static void stgmed_file_release(stgmed_obj_t *obj)
static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
static const stgmed_obj_vtbl stgmed_file_vtbl
static ULONG WINAPI WinInetHttpInfo_AddRef(IWinInetHttpInfo *iface)
static HRESULT WINAPI ProtocolStream_Clone(IStream *iface, IStream **ppstm)
static ULONG WINAPI InternetProtocolSink_Release(IInternetProtocolSink *iface)
static HRESULT get_callback(IBindCtx *pbc, IBindStatusCallback **callback)
static void cache_file_available(Binding *This, const WCHAR *file_name)
static void dump_BINDINFO(BINDINFO *bi)
static ULONG WINAPI StgMedUnk_AddRef(IUnknown *iface)
static HRESULT WINAPI Binding_SetPriority(IBinding *iface, LONG nPriority)
static WCHAR cbinding_contextW[]
static ULONG WINAPI InternetBindInfo_AddRef(IInternetBindInfo *iface)
static HRESULT WINAPI WinInetHttpInfo_QueryInfo(IWinInetHttpInfo *iface, DWORD dwOption, void *pBuffer, DWORD *pcbBuffer, DWORD *pdwFlags, DWORD *pdwReserved)
static Binding * impl_from_IServiceProvider(IServiceProvider *iface)
static HRESULT WINAPI WinInetHttpInfo_QueryOption(IWinInetHttpInfo *iface, DWORD dwOption, void *pBuffer, DWORD *pcbBuffer)
static HRESULT WINAPI Binding_Suspend(IBinding *iface)
static HRESULT WINAPI InternetProtocolSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv)
static void stop_binding(Binding *binding, HRESULT hres, LPCWSTR str)
static Binding * get_bctx_binding(IBindCtx *bctx)
static void report_data(Binding *This, DWORD bscf, ULONG progress, ULONG progress_max)
static ProtocolStream * impl_from_IStream(IStream *iface)
static const IInternetProtocolSinkVtbl InternetProtocolSinkVtbl
static HRESULT Binding_Create(IMoniker *mon, Binding *binding_ctx, IUri *uri, IBindCtx *pbc, BOOL to_obj, REFIID riid, Binding **binding)
static HRESULT WINAPI Binding_Abort(IBinding *iface)
static HRESULT stgmed_file_get_result(stgmed_obj_t *obj, DWORD bindf, void **result)
static HRESULT WINAPI Binding_GetPriority(IBinding *iface, LONG *pnPriority)
static stgmed_buf_t * impl_from_IUnknown(IUnknown *iface)
static HRESULT WINAPI InternetBindInfo_QueryInterface(IInternetBindInfo *iface, REFIID riid, void **ppv)
static HRESULT stgmed_stream_fill_stgmed(stgmed_obj_t *obj, STGMEDIUM *stgmed)
static WCHAR bscb_holderW[]
static stgmed_obj_t * create_stgmed_file(stgmed_buf_t *buf)
static const IBindingVtbl BindingVtbl
static const stgmed_obj_vtbl stgmed_stream_vtbl
static ULONG WINAPI InternetProtocolSink_AddRef(IInternetProtocolSink *iface)
static void create_object(Binding *binding)
static HRESULT WINAPI ProtocolStream_Write(IStream *iface, const void *pv, ULONG cb, ULONG *pcbWritten)
static ULONG WINAPI Binding_Release(IBinding *iface)
static BOOL is_urlmon_protocol(IUri *uri)
static ULONG WINAPI Binding_AddRef(IBinding *iface)
static ULONG WINAPI ProtocolStream_AddRef(IStream *iface)
static HRESULT WINAPI Binding_GetBindResult(IBinding *iface, CLSID *pclsidProtocol, DWORD *pdwResult, LPOLESTR *pszResult, DWORD *pdwReserved)
static HRESULT WINAPI ProtocolStream_UnlockRegion(IStream *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
static HRESULT WINAPI ProtocolStream_CopyTo(IStream *iface, IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten)
static Binding * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
static void on_progress(Binding *This, ULONG progress, ULONG progress_max, ULONG status_code, LPCWSTR status_text)
static HRESULT WINAPI InternetProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData)
static void mime_available(Binding *This, LPCWSTR mime)
static ULONG WINAPI StgMedUnk_Release(IUnknown *iface)
static HRESULT WINAPI Binding_QueryInterface(IBinding *iface, REFIID riid, void **ppv)
static HRESULT WINAPI ProtocolStream_LockRegion(IStream *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
static HRESULT WINAPI ProtocolStream_SetSize(IStream *iface, ULARGE_INTEGER libNewSize)
static void read_protocol_data(stgmed_buf_t *stgmed_buf)
static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
static const IUnknownVtbl StgMedUnkVtbl
static const IServiceProviderVtbl ServiceProviderVtbl
static Binding * impl_from_IBinding(IBinding *iface)
static HRESULT start_binding(IMoniker *mon, Binding *binding_ctx, IUri *uri, IBindCtx *pbc, BOOL to_obj, REFIID riid, Binding **ret)
static HRESULT WINAPI ProtocolStream_QueryInterface(IStream *iface, REFIID riid, void **ppv)
static stgmed_buf_t * create_stgmed_buf(IInternetProtocolEx *protocol)
static HRESULT stgmed_stream_get_result(stgmed_obj_t *obj, DWORD bindf, void **result)
static HRESULT WINAPI InternetProtocolSink_ReportData(IInternetProtocolSink *iface, DWORD grfBSCF, ULONG ulProgress, ULONG ulProgressMax)
static const IStreamVtbl ProtocolStreamVtbl
static HRESULT WINAPI StgMedUnk_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
static HRESULT WINAPI Binding_Resume(IBinding *iface)
static HRESULT WINAPI ProtocolStream_Seek(IStream *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
static HRESULT WINAPI ProtocolStream_Read(IStream *iface, void *pv, ULONG cb, ULONG *pcbRead)
static HRESULT WINAPI InternetProtocolSink_ReportResult(IInternetProtocolSink *iface, HRESULT hrResult, DWORD dwError, LPCWSTR szResult)
static LPWSTR get_mime_clsid(LPCWSTR mime, CLSID *clsid)
static ULONG WINAPI ProtocolStream_Release(IStream *iface)
static ULONG WINAPI WinInetHttpInfo_Release(IWinInetHttpInfo *iface)
static HRESULT WINAPI InternetBindInfo_GetBindInfo(IInternetBindInfo *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
static HRESULT WINAPI ProtocolStream_Commit(IStream *iface, DWORD grfCommitFlags)
HRESULT create_binding_protocol(BindProtocol **protocol)
void set_binding_sink(BindProtocol *This, IInternetProtocolSink *sink, IInternetBindInfo *bind_info)
void release_notif_hwnd(HWND hwnd)
HWND get_notif_hwnd(void)
#define RegCloseKey(hKey)
static const WCHAR clsidW[]
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
static WCHAR * heap_strdupW(const WCHAR *str)
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
#define FILE_ATTRIBUTE_NORMAL
BOOL WINAPI GetFileTime(IN HANDLE hFile, OUT LPFILETIME lpCreationTime OPTIONAL, OUT LPFILETIME lpLastAccessTime OPTIONAL, OUT LPFILETIME lpLastWriteTime OPTIONAL)
BOOL WINAPI SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
GLuint GLuint GLsizei GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define memcpy(s1, s2, n)
static IPrintDialogCallback callback
static HMODULE MODULEINFO DWORD cb
static BOOL bind_to_object
_In_ UINT _In_ DWORD _Out_ DWORD * pdwResult
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define IsEqualGUID(rguid1, rguid2)
IInternetProtocolEx IInternetProtocolEx_iface
IServiceProvider * service_provider
IBindStatusCallback * callback
IInternetBindInfo IInternetBindInfo_iface
stgmed_buf_t * stgmed_buf
IServiceProvider IServiceProvider_iface
IWinInetHttpInfo IWinInetHttpInfo_iface
download_state_t download_state
IInternetProtocolSink IInternetProtocolSink_iface
stgmed_obj_t * stgmed_obj
struct _ULARGE_INTEGER::@4177 u
const stgmed_obj_vtbl * vtbl
IInternetProtocolEx * protocol
HRESULT(* get_result)(stgmed_obj_t *, DWORD, void **)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define CONTAINING_RECORD(address, type, field)
struct _LARGE_INTEGER::@2306 u
HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx *ibind, DWORD options, IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx **pbind, DWORD reserved)
void WINAPI ReleaseBindInfo(BINDINFO *pbindinfo)
HRESULT WINAPI CopyBindInfo(const BINDINFO *pcbiSrc, BINDINFO *pcbiDest)
const char * debugstr_bindstatus(ULONG status)
static void URLMON_LockModule(void)
static void URLMON_UnlockModule(void)
HRESULT create_default_callback(IBindStatusCallback **ret)
DWORD WINAPI GetLastError(void)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_Reserved_ DWORD * pdwReserved
#define REGDB_E_CLASSNOTREG
#define STG_E_ACCESSDENIED
#define STG_E_INSUFFICIENTMEMORY
#define HKEY_CLASSES_ROOT
BOOL WINAPI TranslateMessage(_In_ const MSG *)
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)