Module: wine Branch: master Commit: 924538f22a7a42434845015e17288bf19e5e8c82 URL: http://source.winehq.org/git/wine.git/?a=commit;h=924538f22a7a42434845015e17...
Author: Piotr Caban piotr@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; + } }
/**************************************************************************