61#define BINDING_LOCKED 0x0001
62#define BINDING_STOPPED 0x0002
63#define BINDING_OBJAVAIL 0x0004
64#define BINDING_ABORTED 0x0008
117 static const char *
const BINDINFOF_str[] = {
119 "BINDINFOF_URLENCODESTGMEDDATA",
120 "BINDINFOF_URLENCODEDEXTRAINFO"
123 static const char *
const BINDVERB_str[] = {
137 " %ld, %08lx, %ld, %ld\n"
144 bi->stgmedData.tymed, bi->stgmedData.hGlobal, bi->stgmedData.pUnkForRelease,
145 bi->grfBindInfoF > BINDINFOF_URLENCODEDEXTRAINFO
146 ?
"unknown" : BINDINFOF_str[bi->grfBindInfoF],
147 bi->dwBindVerb > BINDVERB_CUSTOM
148 ?
"unknown" : BINDVERB_str[bi->dwBindVerb],
150 bi->cbstgmedData, bi->dwOptions, bi->dwOptionsFlags, bi->dwCodePage,
151 bi->securityAttributes.nLength,
152 bi->securityAttributes.lpSecurityDescriptor,
153 bi->securityAttributes.bInheritHandle,
155 bi->pUnk, bi->dwReserved
164 if(!
This->mime || !
This->report_mime)
167 IBindStatusCallback_OnProgress(
This->callback, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE,
This->mime);
175 IInternetProtocolEx_UnlockRequest(&
binding->protocol->IInternetProtocolEx_iface);
176 binding->state &= ~BINDING_LOCKED;
195 static const WCHAR mime_keyW[] =
196 {
'M',
'I',
'M',
'E',
'\\',
'D',
'a',
't',
'a',
'b',
'a',
's',
'e',
'\\',
197 'C',
'o',
'n',
't',
'e',
'n',
't',
' ',
'T',
'y',
'p',
'e',
'\\'};
207 WARN(
"Could not open MIME key: %lx\n",
res);
216 WARN(
"Could not get CLSID: %08lx\n",
res);
223 WARN(
"Could not parse CLSID: %08lx\n",
hres);
238 WARN(
"CreateAsyncBindCtxEx failed: %08lx\n",
hres);
247 IBindCtx_Release(bctx);
260 WARN(
"CoCreateInstance failed: %08lx\n",
hres);
266 hres = IUnknown_QueryInterface(
binding->obj, &IID_IPersistMoniker, (
void**)&persist);
270 hres = IPersistMoniker_QueryInterface(persist, &IID_IMonikerProp, (
void**)&prop);
272 IMonikerProp_PutProperty(prop, MIMETYPEPROP,
binding->mime);
273 IMonikerProp_PutProperty(prop, CLASSIDPROP, clsid_str);
274 IMonikerProp_Release(prop);
279 IPersistMoniker_Release(persist);
281 FIXME(
"Could not get IPersistMoniker: %08lx\n",
hres);
297 FIXME(
"MIME not available\n");
302 IBindStatusCallback_OnProgress(
binding->callback, 0, 0, BINDSTATUS_CLASSIDAVAILABLE, clsid_str);
304 IBindStatusCallback_OnProgress(
binding->callback, 0, 0, BINDSTATUS_BEGINSYNCOPERATION,
NULL);
314 IBindStatusCallback_OnProgress(
binding->callback, 0, 0, BINDSTATUS_ENDSYNCOPERATION,
NULL);
319 IInternetProtocolEx_Terminate(&
binding->protocol->IInternetProtocolEx_iface, 0);
327 if(
This->use_cache_file) {
350 IUnknown_AddRef(&
This->IUnknown_iface);
378 IInternetProtocolEx_Release(
This->protocol);
404 IInternetProtocolEx_AddRef(
protocol);
445 IStream_AddRef(&
This->IStream_iface);
471 IUnknown_Release(&
This->buf->IUnknown_iface);
487 TRACE(
"(%p)->(%p %ld %p)\n",
This, pv,
cb, pcbRead);
511 TRACE(
"(%p)->(%p %ld %p)\n",
This, pv,
cb, pcbWritten);
523 TRACE(
"(%p)->(%ld %08lx %p)\n",
This, dlibMove.
LowPart, dwOrigin, plibNewPosition);
527 FIXME(
"no cache file, not supported\n");
532 case STREAM_SEEK_SET:
535 case STREAM_SEEK_CUR:
538 case STREAM_SEEK_END:
542 WARN(
"Invalid origin %lx\n", dwOrigin);
567 FIXME(
"(%p)->(%p %ld %p %p)\n",
This, pstm,
cb.LowPart, pcbRead, pcbWritten);
575 TRACE(
"(%p)->(%08lx)\n",
This, grfCommitFlags);
609 TRACE(
"(%p)->(%p %08lx)\n",
This, pstatstg, dwStatFlag);
614 memset(pstatstg, 0,
sizeof(STATSTG));
616 if(!(dwStatFlag&STATFLAG_NONAME) &&
This->buf->cache_file) {
618 if(!pstatstg->pwcsName)
624 pstatstg->type = STGTY_STREAM;
627 GetFileTime(
This->buf->file, &pstatstg->ctime, &pstatstg->atime, &pstatstg->mtime);
628 if(pstatstg->cbSize.QuadPart)
669 stgmed->tymed = TYMED_ISTREAM;
671 stgmed->pUnkForRelease = &
stream->buf->IUnknown_iface;
708 IUnknown_AddRef(&
buf->IUnknown_iface);
713 return &
ret->stgmed_obj;
729 WARN(
"cache_file not set\n");
735 stgmed->tymed = TYMED_FILE;
744 return bindf & BINDF_ASYNCHRONOUS ? MK_S_ASYNCHRONOUS :
S_OK;
759 IUnknown_AddRef(&
buf->IUnknown_iface);
762 return &
ret->stgmed_obj;
783 TRACE(
"(%p)->(IID_IInternetProtocolSink %p)\n",
This,
ppv);
784 *
ppv = &
This->IInternetProtocolSink_iface;
787 *
ppv = &
This->IInternetBindInfo_iface;
790 *
ppv = &
This->IServiceProvider_iface;
798 hres = IInternetProtocolEx_QueryInterface(&
This->protocol->IInternetProtocolEx_iface,
799 &IID_IWinInetInfo, (
void**)&wininet_info);
801 IWinInetInfo_Release(wininet_info);
802 *
ppv = &
This->IWinInetHttpInfo_iface;
811 hres = IInternetProtocolEx_QueryInterface(&
This->protocol->IInternetProtocolEx_iface,
812 &IID_IWinInetHttpInfo, (
void**)&http_info);
814 IWinInetHttpInfo_Release(http_info);
815 *
ppv = &
This->IWinInetHttpInfo_iface;
820 IBinding_AddRef(&
This->IBinding_iface);
849 IMoniker_Release(
This->mon);
851 IBindStatusCallback_Release(
This->callback);
853 IInternetProtocolEx_Release(&
This->protocol->IInternetProtocolEx_iface);
854 if(
This->service_provider)
855 IServiceProvider_Release(
This->service_provider);
857 IUnknown_Release(&
This->stgmed_buf->IUnknown_iface);
859 This->stgmed_obj->vtbl->release(
This->stgmed_obj);
861 IUnknown_Release(
This->obj);
863 IBindCtx_Release(
This->bctx);
866 This->section.DebugInfo->Spare[0] = 0;
889 hres = IInternetProtocolEx_Abort(&
This->protocol->IInternetProtocolEx_iface,
E_ABORT,
931 TRACE(
"(%p)->(%p %p %p %p)\n",
This, pclsidProtocol,
pdwResult, pszResult, pdwReserved);
933 if(!
pdwResult || !pszResult || pdwReserved)
971 hres = IUnknown_QueryInterface(unk, &IID_IBinding, (
void**)&
binding);
972 IUnknown_Release(unk);
990 return IBinding_QueryInterface(&
This->IBinding_iface,
riid,
ppv);
996 return IBinding_AddRef(&
This->IBinding_iface);
1002 return IBinding_Release(&
This->IBinding_iface);
1006 PROTOCOLDATA *pProtocolData)
1010 WARN(
"(%p)->(%p)\n",
This, pProtocolData);
1018 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1029 switch(ulStatusCode) {
1030 case BINDSTATUS_FINDINGRESOURCE:
1033 case BINDSTATUS_CONNECTING:
1036 case BINDSTATUS_REDIRECTING:
1041 case BINDSTATUS_BEGINDOWNLOADDATA:
1043 case BINDSTATUS_SENDINGREQUEST:
1046 case BINDSTATUS_PROTOCOLCLASSID:
1049 case BINDSTATUS_MIMETYPEAVAILABLE:
1050 case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
1053 case BINDSTATUS_CACHEFILENAMEAVAILABLE:
1056 case BINDSTATUS_DECODING:
1057 IBindStatusCallback_OnProgress(
This->callback, 0, 0, BINDSTATUS_DECODING, szStatusText);
1059 case BINDSTATUS_LOADINGMIMEHANDLER:
1062 case BINDSTATUS_DIRECTBIND:
1065 case BINDSTATUS_ACCEPTRANGES:
1068 FIXME(
"Unhandled status code %ld\n", ulStatusCode);
1077 FORMATETC formatetc = {0,
NULL, 1, -1, TYMED_ISTREAM};
1095 sent_begindownloaddata =
TRUE;
1096 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1097 BINDSTATUS_BEGINDOWNLOADDATA,
This->url);
1099 if(
This->stgmed_buf->cache_file)
1100 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1101 BINDSTATUS_CACHEFILENAMEAVAILABLE,
This->stgmed_buf->cache_file);
1104 if(
This->stgmed_buf->hres ==
S_FALSE || (bscf & BSCF_LASTDATANOTIFICATION)) {
1106 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1107 BINDSTATUS_ENDDOWNLOADDATA,
This->url);
1108 }
else if(!sent_begindownloaddata) {
1109 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1110 BINDSTATUS_DOWNLOADINGDATA,
This->url);
1116 if(
This->to_object) {
1118 IBinding_AddRef(&
This->IBinding_iface);
1120 IBinding_Release(&
This->IBinding_iface);
1127 hres = IInternetProtocolEx_LockRequest(&
This->protocol->IInternetProtocolEx_iface, 0);
1132 hres =
This->stgmed_obj->vtbl->fill_stgmed(
This->stgmed_obj, &stgmed);
1138 formatetc.tymed = stgmed.tymed;
1139 formatetc.cfFormat =
This->clipboard_format;
1142 &formatetc, &stgmed);
1146 IBindStatusCallback_OnProgress(
This->callback,
progress, progress_max,
1147 BINDSTATUS_ENDDOWNLOADDATA,
This->url);
1150 WARN(
"OnDataAvailable returned %lx\n",
hres);
1165 TRACE(
"(%p)->(%ld %lu %lu)\n",
This, grfBSCF, ulProgress, ulProgressMax);
1180 IInternetProtocolEx_Terminate(&
This->protocol->IInternetProtocolEx_iface, 0);
1203 return IBinding_QueryInterface(&
This->IBinding_iface,
riid,
ppv);
1209 return IBinding_AddRef(&
This->IBinding_iface);
1215 return IBinding_Release(&
This->IBinding_iface);
1219 DWORD *grfBINDF, BINDINFO *pbindinfo)
1223 TRACE(
"(%p)->(%p %p)\n",
This, grfBINDF, pbindinfo);
1225 *grfBINDF =
This->bindf;
1234 TRACE(
"(%p)->(%ld %p %ld %p)\n",
This, ulStringType, ppwzStr, cEl, pcElFetched);
1236 switch(ulStringType) {
1237 case BINDSTRING_ACCEPT_MIMES: {
1238 if(!ppwzStr || !pcElFetched)
1242 memcpy(ppwzStr[0],
L"*/*",
sizeof(
L"*/*"));
1246 case BINDSTRING_USER_AGENT: {
1250 hres = IBindStatusCallback_QueryInterface(
This->callback, &IID_IInternetBindInfo,
1255 hres = IInternetBindInfo_GetBindString(bindinfo, ulStringType, ppwzStr,
1257 IInternetBindInfo_Release(bindinfo);
1261 case BINDSTRING_URL: {
1264 if(!ppwzStr || !pcElFetched)
1274 FIXME(
"not supported string type %ld\n", ulStringType);
1294 return IBinding_QueryInterface(&
This->IBinding_iface,
riid,
ppv);
1300 return IBinding_AddRef(&
This->IBinding_iface);
1306 return IBinding_Release(&
This->IBinding_iface);
1318 hres = IInternetProtocolEx_QueryInterface(&
This->protocol->IInternetProtocolEx_iface,
1319 &IID_IWinInetInfo, (
void**)&wininet_info);
1323 hres = IWinInetInfo_QueryOption(wininet_info, dwOption,
pBuffer, pcbBuffer);
1324 IWinInetInfo_Release(wininet_info);
1335 TRACE(
"(%p)->(%lx %p %p %p %p)\n",
This, dwOption,
pBuffer, pcbBuffer, pdwFlags, pdwReserved);
1337 hres = IInternetProtocolEx_QueryInterface(&
This->protocol->IInternetProtocolEx_iface,
1338 &IID_IWinInetHttpInfo, (
void**)&http_info);
1342 hres = IWinInetHttpInfo_QueryInfo(http_info, dwOption,
pBuffer, pcbBuffer, pdwFlags, pdwReserved);
1343 IWinInetHttpInfo_Release(http_info);
1364 return IBinding_QueryInterface(&
This->IBinding_iface,
riid,
ppv);
1370 return IBinding_AddRef(&
This->IBinding_iface);
1376 return IBinding_Release(&
This->IBinding_iface);
1387 if(
This->service_provider) {
1388 hres = IServiceProvider_QueryService(
This->service_provider, guidService,
1414 hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (
void**)
callback);
1415 IUnknown_Release(unk);
1459 ret->to_object = to_obj;
1462 ret->report_mime = !binding_ctx;
1466 IBindCtx_AddRef(pbc);
1471 IMoniker_AddRef(mon);
1475 ret->bindinfo.cbSize =
sizeof(BINDINFO);
1478 ret->section.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": Binding.section");
1482 WARN(
"Could not get IBindStatusCallback\n");
1483 IBinding_Release(&
ret->IBinding_iface);
1487 IBindStatusCallback_QueryInterface(
ret->callback, &IID_IServiceProvider,
1488 (
void**)&
ret->service_provider);
1492 IInternetProtocolEx_AddRef(&
ret->protocol->IInternetProtocolEx_iface);
1496 WARN(
"Could not get protocol handler\n");
1497 IBinding_Release(&
ret->IBinding_iface);
1502 hres = IBindStatusCallback_GetBindInfo(
ret->callback, &
ret->bindf, &
ret->bindinfo);
1504 WARN(
"GetBindInfo failed: %08lx\n",
hres);
1505 IBinding_Release(&
ret->IBinding_iface);
1509 TRACE(
"bindf %08lx\n",
ret->bindf);
1512 ret->bindf |= BINDF_FROMURLMON;
1514 ret->bindinfo.dwOptions |= 0x100000;
1516 if(!(
ret->bindf & BINDF_ASYNCHRONOUS) || !(
ret->bindf & BINDF_PULLDATA)) {
1517 ret->bindf |= BINDF_NEEDFILE;
1520 ret->bindf |= BINDF_NEEDFILE;
1525 IBinding_Release(&
ret->IBinding_iface);
1531 IUnknown_AddRef(&
ret->stgmed_buf->IUnknown_iface);
1542 ret->bindf |= BINDF_NEEDFILE;
1546 IBinding_Release(&
ret->IBinding_iface);
1565 hres = IBindStatusCallback_OnStartBinding(
binding->callback, 0, &
binding->IBinding_iface);
1567 WARN(
"OnStartBinding failed: %08lx\n",
hres);
1572 IBinding_Release(&
binding->IBinding_iface);
1578 &
binding->IInternetBindInfo_iface);
1580 IBindStatusCallback_OnProgress(
binding->callback, 0, 0, BINDSTATUS_REDIRECTING, binding_ctx->
redirect_url);
1584 hres = IInternetProtocolEx_StartEx(&
binding->protocol->IInternetProtocolEx_iface,
uri,
1585 &
binding->IInternetProtocolSink_iface, &
binding->IInternetBindInfo_iface,
1586 PI_APARTMENTTHREADED|PI_MIMEVERIFICATION, 0);
1592 IBinding_Release(&
binding->IBinding_iface);
1598 while(!(
binding->bindf & BINDF_ASYNCHRONOUS) &&
1620 IBinding_Release(&binding_ctx->IBinding_iface);
1626 IInternetProtocolEx_UnlockRequest(&
binding->protocol->IInternetProtocolEx_iface);
1629 }
else if(
binding->bindf & BINDF_ASYNCHRONOUS) {
1630 hres = MK_S_ASYNCHRONOUS;
1635 IBinding_Release(&
binding->IBinding_iface);
1653 }
else if(
binding->bindf & BINDF_ASYNCHRONOUS) {
1654 hres = MK_S_ASYNCHRONOUS;
1657 IUnknown_AddRef(
binding->obj);
1661 IBinding_Release(&
binding->IBinding_iface);
#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)
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)
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
#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)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
static wchar_t * wcsdup(const wchar_t *str)
GLuint GLuint GLsizei GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
#define memcpy(s1, s2, n)
static IPrintDialogCallback callback
static RPC_BINDING_HANDLE binding
static BOOL bind_to_object
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define IsEqualGUID(rguid1, rguid2)
_In_ UINT _In_ DWORD _Out_ DWORD * pdwResult
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
const stgmed_obj_vtbl * vtbl
IInternetProtocolEx * protocol
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define CONTAINING_RECORD(address, type, field)
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)
#define REGDB_E_CLASSNOTREG
#define INET_E_DATA_NOT_AVAILABLE
#define STG_E_ACCESSDENIED
#define INET_E_CANNOT_INSTANTIATE_OBJECT
#define STG_E_INSUFFICIENTMEMORY
#define INET_E_DOWNLOAD_FAILURE
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
#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 *)