Piotr Caban : shell32: Handle ASSOCDATA_EDITFLAGS in IQueryAssociations: GetData function.

Alexandre Julliard julliard at winehq.org
Tue Mar 27 12:48:05 CDT 2012


Module: wine
Branch: master
Commit: 924538f22a7a42434845015e17288bf19e5e8c82
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=924538f22a7a42434845015e17288bf19e5e8c82

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Mar 27 12:05:38 2012 +0200

shell32: Handle ASSOCDATA_EDITFLAGS in IQueryAssociations:GetData function.

---

 dlls/shell32/assoc.c |   42 +++++++++++++++++++++++++++++++-----------
 1 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/dlls/shell32/assoc.c b/dlls/shell32/assoc.c
index 8364e9f..0131da7 100644
--- a/dlls/shell32/assoc.c
+++ b/dlls/shell32/assoc.c
@@ -670,19 +670,39 @@ static HRESULT WINAPI IQueryAssociations_fnGetKey(
  *  Success: S_OK. pszOut contains the data, pcbOut contains its length.
  *  Failure: An HRESULT error code indicating the error.
  */
-static HRESULT WINAPI IQueryAssociations_fnGetData(
-  IQueryAssociations *iface,
-  ASSOCF cfFlags,
-  ASSOCDATA assocdata,
-  LPCWSTR pszExtra,
-  LPVOID pvOut,
-  DWORD *pcbOut)
+static HRESULT WINAPI IQueryAssociations_fnGetData(IQueryAssociations *iface,
+        ASSOCF cfFlags, ASSOCDATA assocdata, LPCWSTR pszExtra, LPVOID pvOut,
+        DWORD *pcbOut)
 {
-  IQueryAssociationsImpl *This = impl_from_IQueryAssociations(iface);
+    static const WCHAR edit_flags[] = {'E','d','i','t','F','l','a','g','s',0};
 
-  FIXME("(%p,0x%8x,0x%8x,%s,%p,%p)-stub!\n", This, cfFlags, assocdata,
-        debugstr_w(pszExtra), pvOut, pcbOut);
-  return E_NOTIMPL;
+    IQueryAssociationsImpl *This = impl_from_IQueryAssociations(iface);
+    void *data;
+    DWORD size;
+    HRESULT hres;
+
+    TRACE("(%p,0x%8x,0x%8x,%s,%p,%p)\n", This, cfFlags, assocdata,
+            debugstr_w(pszExtra), pvOut, pcbOut);
+
+    if(cfFlags)
+        FIXME("Unsupported flags: %x\n", cfFlags);
+
+    switch(assocdata) {
+    case ASSOCDATA_EDITFLAGS:
+        if(!This->hkeyProgID)
+            return HRESULT_FROM_WIN32(ERROR_NO_ASSOCIATION);
+
+        hres = ASSOC_GetValue(This->hkeyProgID, edit_flags, &data, &size);
+        if(FAILED(hres) || !pcbOut)
+            return hres;
+
+        hres = ASSOC_ReturnData(pvOut, pcbOut, data, size);
+        HeapFree(GetProcessHeap(), 0, data);
+        return hres;
+    default:
+        FIXME("Unsupported ASSOCDATA value: %d\n", assocdata);
+        return E_NOTIMPL;
+    }
 }
 
 /**************************************************************************




More information about the wine-cvs mailing list