/*********************************************************************** * AsyncInstallDistributionUnit (URLMON.@) */ HRESULT WINAPI AsyncInstallDistributionUnit(const WCHAR *szDistUnit, const WCHAR *szTYPE, const WCHAR *szExt, DWORD dwFileVersionMS, DWORD dwFileVersionLS, const WCHAR *szURL, IBindCtx *pbc, void *pvReserved, DWORD flags) { install_ctx_t *ctx; HRESULT hres; TRACE("(%s %s %s %x %x %s %p %p %x)\n", debugstr_w(szDistUnit), debugstr_w(szTYPE), debugstr_w(szExt), dwFileVersionMS, dwFileVersionLS, debugstr_w(szURL), pbc, pvReserved, flags); if(szDistUnit || szTYPE || szExt) FIXME("Unsupported arguments\n"); ctx = heap_alloc_zero(sizeof(*ctx)); if(!ctx) return E_OUTOFMEMORY; hres = CreateUri(szURL, 0, 0, &ctx->uri); if(FAILED(hres)) { heap_free(ctx); return E_OUTOFMEMORY; } ctx->callback = bsc_from_bctx(pbc); hres = download_to_cache(ctx->uri, distunit_on_stop, ctx, ctx->callback); if(hres == MK_S_ASYNCHRONOUS) ctx->release_on_stop = TRUE; else release_install_ctx(ctx); return hres; }
/*********************************************************************** * RevokeBindStatusCallback (URLMON.@) * * Unregister a bind status callback. * * pbc [I] Binding context * pbsc [I] Callback to unregister * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if any argument is invalid */ HRESULT WINAPI RevokeBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc) { IBindStatusCallback *callback; TRACE("(%p %p)\n", pbc, pbsc); if (!pbc || !pbsc) return E_INVALIDARG; callback = bsc_from_bctx(pbc); if(!callback) return S_OK; if(callback == pbsc) IBindCtx_RevokeObjectParam(pbc, bscb_holderW); IBindStatusCallback_Release(callback); return S_OK; }