shell32: Implement ASSOCSTR_SHELLEXTENSION.

Hans Leidekker hans at codeweavers.com
Thu May 9 09:42:07 CDT 2013


---
 dlls/shell32/assoc.c |   26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/dlls/shell32/assoc.c b/dlls/shell32/assoc.c
index e565591..6681a63 100644
--- a/dlls/shell32/assoc.c
+++ b/dlls/shell32/assoc.c
@@ -429,7 +429,7 @@ static HRESULT WINAPI IQueryAssociations_fnGetString(
   HRESULT hr;
   WCHAR path[MAX_PATH];
 
-  TRACE("(%p,0x%8x,0x%8x,%s,%p,%p)\n", This, cfFlags, str,
+  TRACE("(%p,0x%08x,%u,%s,%p,%p)\n", This, cfFlags, str,
         debugstr_w(pszExtra), pszOut, pcchOut);
 
   if (cfFlags & cfUnimplemented)
@@ -616,6 +616,30 @@ get_friendly_name_fail:
       HeapFree(GetProcessHeap(), 0, pszFileType);
       return hr;
     }
+    case ASSOCSTR_SHELLEXTENSION:
+    {
+        static const WCHAR shellexW[] = {'S','h','e','l','l','E','x','\\',0};
+        WCHAR keypath[sizeof(shellexW) / sizeof(shellexW[0]) + 39], guid[39];
+        CLSID clsid;
+        HKEY hkey;
+        DWORD size;
+        LONG ret;
+
+        hr = CLSIDFromString(pszExtra, &clsid);
+        if (FAILED(hr)) return hr;
+
+        strcpyW(keypath, shellexW);
+        strcatW(keypath, pszExtra);
+        ret = RegOpenKeyExW(This->hkeySource, keypath, 0, KEY_READ, &hkey);
+        if (ret) return HRESULT_FROM_WIN32(ret);
+
+        size = sizeof(guid);
+        ret = RegGetValueW(hkey, NULL, NULL, RRF_RT_REG_SZ, NULL, guid, &size);
+        RegCloseKey(hkey);
+        if (ret) return HRESULT_FROM_WIN32(ret);
+
+        return ASSOC_ReturnString(pszOut, pcchOut, guid, size / sizeof(WCHAR));
+    }
 
     default:
       FIXME("assocstr %d unimplemented!\n", str);
-- 
1.7.10.4






More information about the wine-patches mailing list