From f2499d20d4eb6dcce8984d5ef887648112f4f1f5 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov@codeweavers.com>
Date: Mon, 27 Feb 2017 17:19:23 +0300
Subject: [PATCH] shell32: Implement SHGetPropertyStoreFromParsingName() as a
 wrapper over IShellItem2.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
---
 dlls/shell32/shell32_main.c |  9 ---------
 dlls/shell32/shellitem.c    | 18 ++++++++++++++++++
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c
index 7e1c7d565c4..1a22150d861 100644
--- a/dlls/shell32/shell32_main.c
+++ b/dlls/shell32/shell32_main.c
@@ -964,15 +964,6 @@ HRESULT WINAPI SHGetPropertyStoreForWindow(HWND hwnd, REFIID riid, void **ppv)
     return E_NOTIMPL;
 }
 
-/*************************************************************************
- * SHGetPropertyStoreFromParsingName [SHELL32.@]
- */
-HRESULT WINAPI SHGetPropertyStoreFromParsingName(PCWSTR pszPath, IBindCtx *pbc, GETPROPERTYSTOREFLAGS flags, REFIID riid, void **ppv)
-{
-    FIXME("(%s %p %u %p %p) stub!\n", debugstr_w(pszPath), pbc, flags, riid, ppv);
-    return E_NOTIMPL;
-}
-
 /*************************************************************************/
 
 typedef struct
diff --git a/dlls/shell32/shellitem.c b/dlls/shell32/shellitem.c
index 57f5fa6b6ad..1e19f7c72e9 100644
--- a/dlls/shell32/shellitem.c
+++ b/dlls/shell32/shellitem.c
@@ -1331,6 +1331,24 @@ HRESULT WINAPI SHCreateShellItemArrayFromIDLists(UINT cidl,
     return ret;
 }
 
+HRESULT WINAPI SHGetPropertyStoreFromParsingName(const WCHAR *path, IBindCtx *pbc, GETPROPERTYSTOREFLAGS flags,
+    REFIID riid, void **ppv)
+{
+    IShellItem2 *item;
+    HRESULT hr;
+
+    TRACE("(%s %p %#x %p %p)\n", debugstr_w(path), pbc, flags, riid, ppv);
+
+    hr = SHCreateItemFromParsingName(path, pbc, &IID_IShellItem2, (void **)&item);
+    if(SUCCEEDED(hr))
+    {
+        hr = IShellItem2_GetPropertyStore(item, flags, riid, ppv);
+        IShellItem2_Release(item);
+    }
+
+    return hr;
+}
+
 static HRESULT WINAPI CustomDestinationList_QueryInterface(ICustomDestinationList *iface, REFIID riid, void **obj)
 {
     CustomDestinationList *This = impl_from_ICustomDestinationList(iface);
-- 
GitLab