static HRESULT ExtServ_ImplSetAuthenticateData(ExtensionService* This, HWND phwnd, LPCWSTR pwzUsername, LPCWSTR pwzPassword) { heap_free(This->username); heap_free(This->password); This->hwnd = phwnd; This->username = hlink_strdupW(pwzUsername); This->password = hlink_strdupW(pwzPassword); return S_OK; }
static HRESULT WINAPI IHlink_fnSetTargetFrameName(IHlink* iface, LPCWSTR pwzTargetFramename) { HlinkImpl *This = impl_from_IHlink(iface); TRACE("(%p)->(%s)\n", This, debugstr_w(pwzTargetFramename)); heap_free(This->TargetFrameName); This->TargetFrameName = hlink_strdupW( pwzTargetFramename ); return S_OK; }
static HRESULT WINAPI IHlink_fnSetMonikerReference( IHlink* iface, DWORD rfHLSETF, IMoniker *pmkTarget, LPCWSTR pwzLocation) { HlinkImpl *This = impl_from_IHlink(iface); TRACE("(%p)->(%i %p %s)\n", This, rfHLSETF, pmkTarget, debugstr_w(pwzLocation)); if(rfHLSETF == 0) return E_INVALIDARG; if(!(rfHLSETF & (HLINKSETF_TARGET | HLINKSETF_LOCATION))) return rfHLSETF; if(rfHLSETF & HLINKSETF_TARGET){ if (This->Moniker) IMoniker_Release(This->Moniker); This->Moniker = pmkTarget; if (This->Moniker) { IBindCtx *pbc; LPOLESTR display_name; IMoniker_AddRef(This->Moniker); CreateBindCtx( 0, &pbc); IMoniker_GetDisplayName(This->Moniker, pbc, NULL, &display_name); IBindCtx_Release(pbc); This->absolute = display_name && strchrW(display_name, ':'); CoTaskMemFree(display_name); } } if(rfHLSETF & HLINKSETF_LOCATION){ heap_free(This->Location); This->Location = hlink_strdupW( pwzLocation ); } return S_OK; }
static HRESULT ExtServ_ImplSetAdditionalHeaders(ExtensionService* This, LPCWSTR pwzAdditionalHeaders) { int len = 0; heap_free(This->headers); This->headers = NULL; if (!pwzAdditionalHeaders) return S_OK; len = strlenW(pwzAdditionalHeaders); if(len && pwzAdditionalHeaders[len-1] != '\n' && pwzAdditionalHeaders[len-1] != '\r') { static const WCHAR endlW[] = {'\r','\n',0}; This->headers = heap_alloc(len*sizeof(WCHAR) + sizeof(endlW)); memcpy(This->headers, pwzAdditionalHeaders, len*sizeof(WCHAR)); memcpy(This->headers+len, endlW, sizeof(endlW)); } else { This->headers = hlink_strdupW(pwzAdditionalHeaders); } return S_OK; }
static HRESULT WINAPI IHlink_fnSetStringReference(IHlink* iface, DWORD grfHLSETF, LPCWSTR pwzTarget, LPCWSTR pwzLocation) { HlinkImpl *This = impl_from_IHlink(iface); TRACE("(%p)->(%i %s %s)\n", This, grfHLSETF, debugstr_w(pwzTarget), debugstr_w(pwzLocation)); if(grfHLSETF > (HLINKSETF_TARGET | HLINKSETF_LOCATION) && grfHLSETF < -(HLINKSETF_TARGET | HLINKSETF_LOCATION)) return grfHLSETF; if (grfHLSETF & HLINKSETF_TARGET) { if (This->Moniker) { IMoniker_Release(This->Moniker); This->Moniker = NULL; } if (pwzTarget && *pwzTarget) { IMoniker *pMon; IBindCtx *pbc = NULL; ULONG eaten; HRESULT r; r = CreateBindCtx(0, &pbc); if (FAILED(r)) return E_OUTOFMEMORY; r = MkParseDisplayName(pbc, pwzTarget, &eaten, &pMon); IBindCtx_Release(pbc); if (FAILED(r)) { LPCWSTR p = strchrW(pwzTarget, ':'); if (p && (p - pwzTarget > 1)) r = CreateURLMoniker(NULL, pwzTarget, &pMon); else r = CreateFileMoniker(pwzTarget, &pMon); if (FAILED(r)) { ERR("couldn't create moniker for %s, failed with error 0x%08x\n", debugstr_w(pwzTarget), r); return r; } } IHlink_SetMonikerReference(iface, HLINKSETF_TARGET, pMon, NULL); IMoniker_Release(pMon); } } if (grfHLSETF & HLINKSETF_LOCATION) { heap_free(This->Location); This->Location = NULL; if (pwzLocation && *pwzLocation) This->Location = hlink_strdupW( pwzLocation ); } return S_OK; }
/*********************************************************************** * HlinkCreateFromString (HLINK.@) */ HRESULT WINAPI HlinkCreateFromString( LPCWSTR pwzTarget, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName, IHlinkSite* pihlsite, DWORD dwSiteData, IUnknown* piunkOuter, REFIID riid, void** ppvObj) { IHlink *hl = NULL; HRESULT r; WCHAR *hash, *tgt; const WCHAR *loc; TRACE("%s %s %s %p %i %p %s %p\n", debugstr_w(pwzTarget), debugstr_w(pwzLocation), debugstr_w(pwzFriendlyName), pihlsite, dwSiteData, piunkOuter, debugstr_guid(riid), ppvObj); r = CoCreateInstance(&CLSID_StdHlink, piunkOuter, CLSCTX_INPROC_SERVER, riid, (LPVOID*)&hl); if (FAILED(r)) return r; if (pwzTarget) { hash = strchrW(pwzTarget, '#'); if (hash) { if (hash == pwzTarget) tgt = NULL; else { int tgt_len = hash - pwzTarget; tgt = heap_alloc((tgt_len + 1) * sizeof(WCHAR)); if (!tgt) return E_OUTOFMEMORY; memcpy(tgt, pwzTarget, tgt_len * sizeof(WCHAR)); tgt[tgt_len] = 0; } if (!pwzLocation) loc = hash + 1; else loc = pwzLocation; } else { tgt = hlink_strdupW(pwzTarget); if (!tgt) return E_OUTOFMEMORY; loc = pwzLocation; } } else { tgt = NULL; loc = pwzLocation; } IHlink_SetStringReference(hl, HLINKSETF_TARGET | HLINKSETF_LOCATION, tgt, loc); heap_free(tgt); if (pwzFriendlyName) IHlink_SetFriendlyName(hl, pwzFriendlyName); if (pihlsite) IHlink_SetHlinkSite(hl, pihlsite, dwSiteData); TRACE("Returning %i\n",r); *ppvObj = hl; return r; }