[PATCH 2/3] shell32: Implement SHBindToFolderIDListParent.

Mohamad Al-Jaf mohamadaljaf at gmail.com
Tue May 3 21:14:44 CDT 2022


Called by IE11.

Signed-off-by: Mohamad Al-Jaf <mohamadaljaf at gmail.com>
---
 dlls/shell32/pidl.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)

diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c
index a87a8762a26..86dc43d3177 100644
--- a/dlls/shell32/pidl.c
+++ b/dlls/shell32/pidl.c
@@ -1290,8 +1290,48 @@ BOOL WINAPI SHGetPathFromIDListEx(LPCITEMIDLIST pidl, WCHAR *path, DWORD path_si
  */
 HRESULT WINAPI SHBindToFolderIDListParent(IShellFolder *psf, LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
 {
-    FIXME("(%p, %p, %s, %p, %p) - semi-stub\n", psf, pidl, debugstr_guid(riid), ppv, ppidlLast);
-    return SHBindToParent(pidl, riid, ppv, ppidlLast);
+    IShellFolder *psfDesktop = NULL;
+    HRESULT hr;
+
+    TRACE_(shell)("%p,%p,%s\n", psf, pidl, debugstr_guid(riid));
+    pdump(pidl);
+
+    if (!pidl || !ppv)
+        return E_INVALIDARG;
+
+    *ppv = NULL;
+    if (ppidlLast)
+        *ppidlLast = NULL;
+
+    if (!psf)
+    {
+        hr = SHGetDesktopFolder(&psfDesktop);
+        if (FAILED(hr))
+            return hr;
+        psf = psfDesktop;
+    }
+
+    if (_ILIsPidlSimple(pidl))
+    {
+        /* we are on desktop level */
+        hr = IShellFolder_QueryInterface(psf, riid, ppv);
+    }
+    else
+    {
+        LPITEMIDLIST pidlParent = ILClone(pidl);
+        ILRemoveLastID(pidlParent);
+        hr = IShellFolder_BindToObject(psf, pidlParent, NULL, riid, ppv);
+        SHFree (pidlParent);
+    }
+
+    if (psfDesktop)
+        IShellFolder_Release(psfDesktop);
+
+    if (SUCCEEDED(hr) && ppidlLast)
+        *ppidlLast = ILFindLastID(pidl);
+
+    TRACE_(shell)("-- ppv=%p pidl=%p ret=0x%08lx\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
+    return hr;
 }
 
 /*************************************************************************
-- 
2.36.0




More information about the wine-devel mailing list