diff --git a/reactos/dll/win32/hlink/extserv.c b/reactos/dll/win32/hlink/extserv.c index c7a1b779d0f..daedf9eac74 100644 --- a/reactos/dll/win32/hlink/extserv.c +++ b/reactos/dll/win32/hlink/extserv.c @@ -63,7 +63,7 @@ static HRESULT WINAPI ExtServUnk_QueryInterface(IUnknown *iface, REFIID riid, vo } if(*ppv) { - IUnknown_AddRef(EXTSERVUNK(This)); + IUnknown_AddRef((IUnknown*)*ppv); return S_OK; } @@ -209,6 +209,9 @@ static const IHttpNegotiateVtbl HttpNegotiateVtbl = { HttpNegotiate_OnResponse }; +/*********************************************************************** + * HlinkCreateExtensionServices (HLINK.@) + */ HRESULT WINAPI HlinkCreateExtensionServices(LPCWSTR pwzAdditionalHeaders, HWND phwnd, LPCWSTR pszUsername, LPCWSTR pszPassword, IUnknown *punkOuter, REFIID riid, void** ppv) diff --git a/reactos/dll/win32/hlink/hlink.rbuild b/reactos/dll/win32/hlink/hlink.rbuild index db62eac324e..531c3ff8d5b 100644 --- a/reactos/dll/win32/hlink/hlink.rbuild +++ b/reactos/dll/win32/hlink/hlink.rbuild @@ -1,5 +1,6 @@ + @@ -8,6 +9,11 @@ 0x600 0x600 + browse_ctx.c + extserv.c + hlink_main.c + link.c + hlink.spec wine shell32 ole32 @@ -16,9 +22,5 @@ urlmon uuid ntdll - browse_ctx.c - extserv.c - hlink_main.c - link.c - hlink.spec + diff --git a/reactos/dll/win32/hlink/hlink.spec b/reactos/dll/win32/hlink/hlink.spec index 7dac4d90e5c..0cc761fbcb6 100644 --- a/reactos/dll/win32/hlink/hlink.spec +++ b/reactos/dll/win32/hlink/hlink.spec @@ -8,10 +8,10 @@ 10 stdcall HlinkNavigate(ptr ptr long ptr ptr ptr) 11 stdcall HlinkUpdateStackItem(ptr ptr long ptr wstr wstr) 12 stub HlinkOnRenameDocument -14 stub HlinkResolveMonikerForData +14 stdcall HlinkResolveMonikerForData(ptr long ptr long ptr ptr ptr) 15 stub HlinkResolveStringForData 16 stub OleSaveToStreamEx -18 stub HlinkParseDisplayName +18 stdcall HlinkParseDisplayName(ptr wstr long ptr ptr) 20 stdcall HlinkQueryCreateFromData(ptr) 21 stub HlinkSetSpecialReference 22 stdcall HlinkGetSpecialReference(long ptr) diff --git a/reactos/dll/win32/hlink/hlink_main.c b/reactos/dll/win32/hlink/hlink_main.c index 4e321899c39..43e9e7f3b3d 100644 --- a/reactos/dll/win32/hlink/hlink_main.c +++ b/reactos/dll/win32/hlink/hlink_main.c @@ -41,8 +41,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) switch (fdwReason) { - case DLL_WINE_PREATTACH: - return FALSE; /* prefer native version */ case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hinstDLL); break; @@ -52,12 +50,18 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) return TRUE; } +/*********************************************************************** + * DllCanUnloadNow (HLINK.@) + */ HRESULT WINAPI DllCanUnloadNow( void ) { FIXME("\n"); return S_OK; } +/*********************************************************************** + * HlinkCreateFromMoniker (HLINK.@) + */ HRESULT WINAPI HlinkCreateFromMoniker( IMoniker *pimkTrgt, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName, IHlinkSite* pihlsite, DWORD dwSiteData, IUnknown* piunkOuter, REFIID riid, void** ppvObj) @@ -89,6 +93,9 @@ HRESULT WINAPI HlinkCreateFromMoniker( IMoniker *pimkTrgt, LPCWSTR pwzLocation, return r; } +/*********************************************************************** + * HlinkCreateFromString (HLINK.@) + */ HRESULT WINAPI HlinkCreateFromString( LPCWSTR pwzTarget, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName, IHlinkSite* pihlsite, DWORD dwSiteData, IUnknown* piunkOuter, REFIID riid, void** ppvObj) @@ -151,6 +158,9 @@ HRESULT WINAPI HlinkCreateFromString( LPCWSTR pwzTarget, LPCWSTR pwzLocation, } +/*********************************************************************** + * HlinkNavigate (HLINK.@) + */ HRESULT WINAPI HlinkCreateBrowseContext( IUnknown* piunkOuter, REFIID riid, void** ppvObj) { HRESULT r = S_OK; @@ -164,6 +174,9 @@ HRESULT WINAPI HlinkCreateBrowseContext( IUnknown* piunkOuter, REFIID riid, void return r; } +/*********************************************************************** + * HlinkNavigate (HLINK.@) + */ HRESULT WINAPI HlinkNavigate(IHlink *phl, IHlinkFrame *phlFrame, DWORD grfHLNF, LPBC pbc, IBindStatusCallback *pbsc, IHlinkBrowseContext *phlbc) @@ -180,6 +193,9 @@ HRESULT WINAPI HlinkNavigate(IHlink *phl, IHlinkFrame *phlFrame, return r; } +/*********************************************************************** + * HlinkOnNavigate (HLINK.@) + */ HRESULT WINAPI HlinkOnNavigate( IHlinkFrame *phlFrame, IHlinkBrowseContext* phlbc, DWORD grfHLNF, IMoniker *pmkTarget, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName, ULONG* puHLID) @@ -199,6 +215,9 @@ HRESULT WINAPI HlinkOnNavigate( IHlinkFrame *phlFrame, return r; } +/*********************************************************************** + * HlinkCreateFromData (HLINK.@) + */ HRESULT WINAPI HlinkCreateFromData(IDataObject *piDataObj, IHlinkSite *pihlsite, DWORD dwSiteData, IUnknown *piunkOuter, REFIID riid, void **ppvObj) @@ -209,12 +228,18 @@ HRESULT WINAPI HlinkCreateFromData(IDataObject *piDataObj, return E_NOTIMPL; } +/*********************************************************************** + * HlinkQueryCreateFromData (HLINK.@) + */ HRESULT WINAPI HlinkQueryCreateFromData(IDataObject* piDataObj) { FIXME("%p\n", piDataObj); return E_NOTIMPL; } +/*********************************************************************** + * HlinkNavigateToStringReference (HLINK.@) + */ HRESULT WINAPI HlinkNavigateToStringReference( LPCWSTR pwzTarget, LPCWSTR pwzLocation, IHlinkSite *pihlsite, DWORD dwSiteData, IHlinkFrame *pihlframe, DWORD grfHLNF, LPBC pibc, @@ -235,6 +260,9 @@ HRESULT WINAPI HlinkNavigateToStringReference( LPCWSTR pwzTarget, return r; } +/*********************************************************************** + * HlinkIsShortcut (HLINK.@) + */ HRESULT WINAPI HlinkIsShortcut(LPCWSTR pwzFileName) { int len; @@ -253,6 +281,9 @@ HRESULT WINAPI HlinkIsShortcut(LPCWSTR pwzFileName) return strcmpiW(pwzFileName+len, url_ext) ? S_FALSE : S_OK; } +/*********************************************************************** + * HlinkGetSpecialReference (HLINK.@) + */ HRESULT WINAPI HlinkGetSpecialReference(ULONG uReference, LPWSTR *ppwzReference) { DWORD res, type, size = 100; @@ -308,12 +339,18 @@ HRESULT WINAPI HlinkGetSpecialReference(ULONG uReference, LPWSTR *ppwzReference) return S_OK; } +/*********************************************************************** + * HlinkTranslateURL (HLINK.@) + */ HRESULT WINAPI HlinkTranslateURL(LPCWSTR pwzURL, DWORD grfFlags, LPWSTR *ppwzTranslatedURL) { FIXME("(%s %08x %p)\n", debugstr_w(pwzURL), grfFlags, ppwzTranslatedURL); return E_NOTIMPL; } +/*********************************************************************** + * HlinkUpdateStackItem (HLINK.@) + */ HRESULT WINAPI HlinkUpdateStackItem(IHlinkFrame *pihlframe, IHlinkBrowseContext *pihlbc, ULONG uHLID, IMoniker *pimkTrgt, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName) { @@ -322,6 +359,71 @@ HRESULT WINAPI HlinkUpdateStackItem(IHlinkFrame *pihlframe, IHlinkBrowseContext return E_NOTIMPL; } +/*********************************************************************** + * HlinkParseDisplayName (HLINK.@) + */ +HRESULT WINAPI HlinkParseDisplayName(LPBC pibc, LPCWSTR pwzDisplayName, BOOL fNoForceAbs, + ULONG *pcchEaten, IMoniker **ppimk) +{ + HRESULT hres; + + TRACE("(%p %s %x %p %p)\n", pibc, debugstr_w(pwzDisplayName), fNoForceAbs, pcchEaten, ppimk); + + if(fNoForceAbs) + FIXME("Unsupported fNoForceAbs\n"); + + hres = MkParseDisplayNameEx(pibc, pwzDisplayName, pcchEaten, ppimk); + if(SUCCEEDED(hres)) + return hres; + + hres = MkParseDisplayName(pibc, pwzDisplayName, pcchEaten, ppimk); + if(SUCCEEDED(hres)) + return hres; + + hres = CreateFileMoniker(pwzDisplayName, ppimk); + if(SUCCEEDED(hres)) + *pcchEaten = strlenW(pwzDisplayName); + + return hres; +} + +/*********************************************************************** + * HlinkResolveMonikerForData (HLINK.@) + */ +HRESULT WINAPI HlinkResolveMonikerForData(LPMONIKER pimkReference, DWORD reserved, LPBC pibc, + ULONG cFmtetc, FORMATETC *rgFmtetc, IBindStatusCallback *pibsc, LPMONIKER pimkBase) +{ + LPOLESTR name = NULL; + IBindCtx *bctx; + DWORD mksys = 0; + void *obj = NULL; + HRESULT hres; + + TRACE("(%p %x %p %d %p %p %p)\n", pimkReference, reserved, pibc, cFmtetc, rgFmtetc, pibsc, pimkBase); + + if(cFmtetc || rgFmtetc || pimkBase) + FIXME("Unsupported args\n"); + + hres = RegisterBindStatusCallback(pibc, pibsc, NULL /* FIXME */, 0); + if(FAILED(hres)) + return hres; + + hres = IMoniker_IsSystemMoniker(pimkReference, &mksys); + if(SUCCEEDED(hres) && mksys != MKSYS_URLMONIKER) + WARN("sysmk = %x\n", mksys); + + /* FIXME: What is it for? */ + CreateBindCtx(0, &bctx); + hres = IMoniker_GetDisplayName(pimkReference, bctx, NULL, &name); + IBindCtx_Release(bctx); + if(SUCCEEDED(hres)) { + TRACE("got display name %s\n", debugstr_w(name)); + CoTaskMemFree(name); + } + + return IMoniker_BindToStorage(pimkReference, pibc, NULL, &IID_IUnknown, &obj); +} + static HRESULT WINAPI HLinkCF_fnQueryInterface ( LPCLASSFACTORY iface, REFIID riid, LPVOID *ppvObj) { @@ -435,6 +537,9 @@ static HRESULT register_clsid(LPCGUID guid) return S_OK; } +/*********************************************************************** + * DllRegisterServer (HLINK.@) + */ HRESULT WINAPI DllRegisterServer(void) { HRESULT r; diff --git a/reactos/dll/win32/hlink/link.c b/reactos/dll/win32/hlink/link.c index 1720006f5e3..ca9f12ce409 100644 --- a/reactos/dll/win32/hlink/link.c +++ b/reactos/dll/win32/hlink/link.c @@ -602,7 +602,7 @@ static HRESULT WINAPI IPersistStream_fnGetClassID(IPersistStream* iface, { HlinkImpl *This = HlinkImpl_from_IPersistStream(iface); TRACE("(%p)\n", This); - memcpy(pClassID, &CLSID_StdHlink, sizeof(CLSID)); + *pClassID = CLSID_StdHlink; return S_OK; }