Author: dchapyshev
Date: Sat Sep 26 12:48:07 2009
New Revision: 43163
URL:
http://svn.reactos.org/svn/reactos?rev=43163&view=rev
Log:
- Sync shlwapi, msxml3 and windowscodecs with Wine 1.1.30
Modified:
trunk/reactos/dll/win32/msxml3/element.c
trunk/reactos/dll/win32/shlwapi/assoc.c
trunk/reactos/dll/win32/shlwapi/ordinal.c
trunk/reactos/dll/win32/shlwapi/shlwapi.spec
trunk/reactos/dll/win32/shlwapi/string.c
trunk/reactos/dll/win32/shlwapi/url.c
trunk/reactos/dll/win32/windowscodecs/info.c
trunk/reactos/dll/win32/windowscodecs/stream.c
Modified: trunk/reactos/dll/win32/msxml3/element.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msxml3/element.c…
==============================================================================
--- trunk/reactos/dll/win32/msxml3/element.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msxml3/element.c [iso-8859-1] Sat Sep 26 12:48:07 2009
@@ -73,6 +73,10 @@
else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) )
{
*ppvObject = IXMLDOMNode_from_impl(This->node);
+ }
+ else if(dispex_query_interface(&This->node->dispex, riid, ppvObject))
+ {
+ return *ppvObject ? S_OK : E_NOINTERFACE;
}
else
{
@@ -751,6 +755,18 @@
domelem_normalize,
};
+static const tid_t domelem_iface_tids[] = {
+ IXMLDOMElement_tid,
+ 0
+};
+
+static dispex_static_data_t domelem_dispex = {
+ NULL,
+ IXMLDOMElement_tid,
+ NULL,
+ domelem_iface_tids
+};
+
IUnknown* create_element( xmlNodePtr element )
{
domelem *This;
@@ -762,7 +778,7 @@
This->lpVtbl = &domelem_vtbl;
This->ref = 1;
- This->node = create_basic_node( element, (IUnknown*)&This->lpVtbl, NULL );
+ This->node = create_basic_node( element, (IUnknown*)&This->lpVtbl,
&domelem_dispex );
if(!This->node)
{
HeapFree(GetProcessHeap(), 0, This);
Modified: trunk/reactos/dll/win32/shlwapi/assoc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shlwapi/assoc.c?…
==============================================================================
--- trunk/reactos/dll/win32/shlwapi/assoc.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shlwapi/assoc.c [iso-8859-1] Sat Sep 26 12:48:07 2009
@@ -1,5 +1,5 @@
/*
- * IQueryAssociations object and helper functions
+ * IQueryAssociations helper functions
*
* Copyright 2002 Jon Griffiths
*
@@ -26,67 +26,16 @@
#include "winreg.h"
#include "objbase.h"
#include "shlguid.h"
+#include "shlobj.h"
#include "shlwapi.h"
-#include "winver.h"
#include "wine/unicode.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-
-/**************************************************************************
- * IQueryAssociations {SHLWAPI}
- *
- * DESCRIPTION
- * This object provides a layer of abstraction over the system registry in
- * order to simplify the process of parsing associations between files.
- * Associations in this context means the registry entries that link (for
- * example) the extension of a file with its description, list of
- * applications to open the file with, and actions that can be performed on it
- * (the shell displays such information in the context menu of explorer
- * when you right-click on a file).
- *
- * HELPERS
- * You can use this object transparently by calling the helper functions
- * AssocQueryKeyA(), AssocQueryStringA() and AssocQueryStringByKeyA(). These
- * create an IQueryAssociations object, perform the requested actions
- * and then dispose of the object. Alternatively, you can create an instance
- * of the object using AssocCreate() and call the following methods on it:
- *
- * METHODS
- */
/* Default IQueryAssociations::Init() flags */
#define SHLWAPI_DEF_ASSOCF (ASSOCF_INIT_BYEXENAME|ASSOCF_INIT_DEFAULTTOSTAR| \
ASSOCF_INIT_DEFAULTTOFOLDER)
-
-typedef struct
-{
- const IQueryAssociationsVtbl *lpVtbl;
- LONG ref;
- HKEY hkeySource;
- HKEY hkeyProgID;
-} IQueryAssociationsImpl;
-
-static const IQueryAssociationsVtbl IQueryAssociations_vtbl;
-
-/**************************************************************************
- * IQueryAssociations_Constructor [internal]
- *
- * Construct a new IQueryAssociations object.
- */
-static IQueryAssociations* IQueryAssociations_Constructor(void)
-{
- IQueryAssociationsImpl* iface;
-
- iface = HeapAlloc(GetProcessHeap(),0,sizeof(IQueryAssociationsImpl));
- iface->lpVtbl = &IQueryAssociations_vtbl;
- iface->ref = 1;
- iface->hkeySource = NULL;
- iface->hkeyProgID = NULL;
-
- TRACE("Returning IQueryAssociations* %p\n", iface);
- return (IQueryAssociations*)iface;
-}
/*************************************************************************
* SHLWAPI_ParamAToW
@@ -139,52 +88,36 @@
*/
HRESULT WINAPI AssocCreate(CLSID clsid, REFIID refiid, void **lpInterface)
{
+ TRACE("(%s,%s,%p)\n", debugstr_guid(&clsid), debugstr_guid(refiid),
+ lpInterface);
+
+ if (!lpInterface)
+ return E_INVALIDARG;
+
+ *(DWORD*)lpInterface = 0;
+
+ if (!IsEqualGUID(&clsid, &CLSID_QueryAssociations))
+ return CLASS_E_CLASSNOTAVAILABLE;
+
+ return SHCoCreateInstance( NULL, &clsid, NULL, refiid, lpInterface );
+}
+
+/*************************************************************************
+ * AssocQueryKeyW [SHLWAPI.@]
+ *
+ * See AssocQueryKeyA.
+ */
+HRESULT WINAPI AssocQueryKeyW(ASSOCF cfFlags, ASSOCKEY assockey, LPCWSTR pszAssoc,
+ LPCWSTR pszExtra, HKEY *phkeyOut)
+{
HRESULT hRet;
IQueryAssociations* lpAssoc;
- TRACE("(%s,%s,%p)\n", debugstr_guid(&clsid), debugstr_guid(refiid),
- lpInterface);
-
- if (!lpInterface)
- return E_INVALIDARG;
-
- *(DWORD*)lpInterface = 0;
-
- if (!IsEqualGUID(&clsid, &CLSID_QueryAssociations))
- return CLASS_E_CLASSNOTAVAILABLE;
-
- lpAssoc = IQueryAssociations_Constructor();
-
- if (!lpAssoc)
- return E_OUTOFMEMORY;
-
- hRet = IQueryAssociations_QueryInterface(lpAssoc, refiid, lpInterface);
- IQueryAssociations_Release(lpAssoc);
-
- if(hRet == E_NOINTERFACE)
- return CLASS_E_CLASSNOTAVAILABLE;
-
- return hRet;
-}
-
-/*************************************************************************
- * AssocQueryKeyW [SHLWAPI.@]
- *
- * See AssocQueryKeyA.
- */
-HRESULT WINAPI AssocQueryKeyW(ASSOCF cfFlags, ASSOCKEY assockey, LPCWSTR pszAssoc,
- LPCWSTR pszExtra, HKEY *phkeyOut)
-{
- HRESULT hRet;
- IQueryAssociations* lpAssoc;
-
TRACE("(0x%8x,0x%8x,%s,%s,%p)\n", cfFlags, assockey, debugstr_w(pszAssoc),
debugstr_w(pszExtra), phkeyOut);
- lpAssoc = IQueryAssociations_Constructor();
-
- if (!lpAssoc)
- return E_OUTOFMEMORY;
+ hRet = AssocCreate( CLSID_QueryAssociations, &IID_IQueryAssociations, (void
**)&lpAssoc );
+ if (FAILED(hRet)) return hRet;
cfFlags &= SHLWAPI_DEF_ASSOCF;
hRet = IQueryAssociations_Init(lpAssoc, cfFlags, pszAssoc, NULL, NULL);
@@ -254,10 +187,8 @@
if (!pcchOut)
return E_UNEXPECTED;
- lpAssoc = IQueryAssociations_Constructor();
-
- if (!lpAssoc)
- return E_OUTOFMEMORY;
+ hRet = AssocCreate( CLSID_QueryAssociations, &IID_IQueryAssociations, (void
**)&lpAssoc );
+ if (FAILED(hRet)) return hRet;
hRet = IQueryAssociations_Init(lpAssoc, cfFlags & SHLWAPI_DEF_ASSOCF,
pszAssoc, NULL, NULL);
@@ -350,10 +281,8 @@
TRACE("(0x%8x,0x%8x,%p,%s,%p,%p)\n", cfFlags, str, hkAssoc,
debugstr_w(pszExtra), pszOut, pcchOut);
- lpAssoc = IQueryAssociations_Constructor();
-
- if (!lpAssoc)
- return E_OUTOFMEMORY;
+ hRet = AssocCreate( CLSID_QueryAssociations, &IID_IQueryAssociations, (void
**)&lpAssoc );
+ if (FAILED(hRet)) return hRet;
cfFlags &= SHLWAPI_DEF_ASSOCF;
hRet = IQueryAssociations_Init(lpAssoc, cfFlags, 0, hkAssoc, NULL);
@@ -440,627 +369,3 @@
FIXME("%s\n", debugstr_w(lpszAssoc));
return FALSE;
}
-
-/**************************************************************************
- * IQueryAssociations_QueryInterface {SHLWAPI}
- *
- * See IUnknown_QueryInterface.
- */
-static HRESULT WINAPI IQueryAssociations_fnQueryInterface(
- IQueryAssociations* iface,
- REFIID riid,
- LPVOID *ppvObj)
-{
- IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
-
- TRACE("(%p,%s,%p)\n",This, debugstr_guid(riid), ppvObj);
-
- *ppvObj = NULL;
-
- if (IsEqualIID(riid, &IID_IUnknown) ||
- IsEqualIID(riid, &IID_IQueryAssociations))
- {
- *ppvObj = This;
-
- IQueryAssociations_AddRef((IQueryAssociations*)*ppvObj);
- TRACE("Returning IQueryAssociations (%p)\n", *ppvObj);
- return S_OK;
- }
- TRACE("Returning E_NOINTERFACE\n");
- return E_NOINTERFACE;
-}
-
-/**************************************************************************
- * IQueryAssociations_AddRef {SHLWAPI}
- *
- * See IUnknown_AddRef.
- */
-static ULONG WINAPI IQueryAssociations_fnAddRef(IQueryAssociations *iface)
-{
- IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
- ULONG refCount = InterlockedIncrement(&This->ref);
-
- TRACE("(%p)->(ref before=%u)\n",This, refCount - 1);
-
- return refCount;
-}
-
-/**************************************************************************
- * IQueryAssociations_Release {SHLWAPI}
- *
- * See IUnknown_Release.
- */
-static ULONG WINAPI IQueryAssociations_fnRelease(IQueryAssociations *iface)
-{
- IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
- ULONG refCount = InterlockedDecrement(&This->ref);
-
- TRACE("(%p)->(ref before=%u)\n",This, refCount + 1);
-
- if (!refCount)
- {
- TRACE("Destroying IQueryAssociations (%p)\n", This);
- RegCloseKey(This->hkeySource);
- RegCloseKey(This->hkeyProgID);
- HeapFree(GetProcessHeap(), 0, This);
- }
-
- return refCount;
-}
-
-/**************************************************************************
- * IQueryAssociations_Init {SHLWAPI}
- *
- * Initialise an IQueryAssociations object.
- *
- * PARAMS
- * iface [I] IQueryAssociations interface to initialise
- * cfFlags [I] ASSOCF_ flags from "shlwapi.h"
- * pszAssoc [I] String for the root key name, or NULL if hkeyProgid is given
- * hkeyProgid [I] Handle for the root key, or NULL if pszAssoc is given
- * hWnd [I] Reserved, must be NULL.
- *
- * RETURNS
- * Success: S_OK. iface is initialised with the parameters given.
- * Failure: An HRESULT error code indicating the error.
- */
-static HRESULT WINAPI IQueryAssociations_fnInit(
- IQueryAssociations *iface,
- ASSOCF cfFlags,
- LPCWSTR pszAssoc,
- HKEY hkeyProgid,
- HWND hWnd)
-{
- static const WCHAR szProgID[] =
{'P','r','o','g','I','D',0};
- IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
- LONG ret;
-
- TRACE("(%p)->(%d,%s,%p,%p)\n", iface,
- cfFlags,
- debugstr_w(pszAssoc),
- hkeyProgid,
- hWnd);
- if (hWnd != NULL)
- FIXME("hwnd != NULL not supported\n");
- if (cfFlags != 0)
- FIXME("unsupported flags: %x\n", cfFlags);
- if (pszAssoc != NULL)
- {
- ret = RegOpenKeyExW(HKEY_CLASSES_ROOT,
- pszAssoc,
- 0,
- KEY_READ,
- &This->hkeySource);
- if (ret != ERROR_SUCCESS)
- return E_FAIL;
- /* if this is not a prog id */
- if ((*pszAssoc == '.') || (*pszAssoc == '{'))
- {
- RegOpenKeyExW(This->hkeySource,
- szProgID,
- 0,
- KEY_READ,
- &This->hkeyProgID);
- }
- else
- This->hkeyProgID = This->hkeySource;
- return S_OK;
- }
- else if (hkeyProgid != NULL)
- {
- This->hkeyProgID = hkeyProgid;
- return S_OK;
- }
- else
- return E_INVALIDARG;
-}
-
-static HRESULT ASSOC_GetValue(HKEY hkey, WCHAR ** pszText)
-{
- DWORD len;
- LONG ret;
-
- assert(pszText);
- ret = RegQueryValueExW(hkey, NULL, 0, NULL, NULL, &len);
- if (ret != ERROR_SUCCESS)
- return HRESULT_FROM_WIN32(ret);
- if (!len)
- return E_FAIL;
- *pszText = HeapAlloc(GetProcessHeap(), 0, len);
- if (!*pszText)
- return E_OUTOFMEMORY;
- ret = RegQueryValueExW(hkey, NULL, 0, NULL, (LPBYTE)*pszText,
- &len);
- if (ret != ERROR_SUCCESS)
- {
- HeapFree(GetProcessHeap(), 0, *pszText);
- return HRESULT_FROM_WIN32(ret);
- }
- return S_OK;
-}
-
-static HRESULT ASSOC_GetCommand(IQueryAssociationsImpl *This,
- LPCWSTR pszExtra, WCHAR **ppszCommand)
-{
- HKEY hkeyCommand;
- HKEY hkeyFile;
- HKEY hkeyShell;
- HKEY hkeyVerb;
- HRESULT hr;
- LONG ret;
- WCHAR * pszExtraFromReg = NULL;
- WCHAR * pszFileType;
- static const WCHAR commandW[] = {
'c','o','m','m','a','n','d',0 };
- static const WCHAR shellW[] = {
's','h','e','l','l',0 };
-
- hr = ASSOC_GetValue(This->hkeySource, &pszFileType);
- if (FAILED(hr))
- return hr;
- ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, pszFileType, 0, KEY_READ, &hkeyFile);
- HeapFree(GetProcessHeap(), 0, pszFileType);
- if (ret != ERROR_SUCCESS)
- return HRESULT_FROM_WIN32(ret);
-
- ret = RegOpenKeyExW(hkeyFile, shellW, 0, KEY_READ, &hkeyShell);
- RegCloseKey(hkeyFile);
- if (ret != ERROR_SUCCESS)
- return HRESULT_FROM_WIN32(ret);
-
- if (!pszExtra)
- {
- hr = ASSOC_GetValue(hkeyShell, &pszExtraFromReg);
- /* if no default action */
- if (hr == E_FAIL || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
- {
- DWORD rlen;
- ret = RegQueryInfoKeyW(hkeyShell, 0, 0, 0, 0, &rlen, 0, 0, 0, 0, 0, 0);
- if (ret != ERROR_SUCCESS)
- {
- RegCloseKey(hkeyShell);
- return HRESULT_FROM_WIN32(ret);
- }
- rlen++;
- pszExtraFromReg = HeapAlloc(GetProcessHeap(), 0, rlen * sizeof(WCHAR));
- if (!pszExtraFromReg)
- {
- RegCloseKey(hkeyShell);
- return E_OUTOFMEMORY;
- }
- ret = RegEnumKeyExW(hkeyShell, 0, pszExtraFromReg, &rlen, 0, NULL, NULL,
NULL);
- if (ret != ERROR_SUCCESS)
- {
- RegCloseKey(hkeyShell);
- return HRESULT_FROM_WIN32(ret);
- }
- }
- else if (FAILED(hr))
- {
- RegCloseKey(hkeyShell);
- return hr;
- }
- }
-
- ret = RegOpenKeyExW(hkeyShell, pszExtra ? pszExtra : pszExtraFromReg, 0,
- KEY_READ, &hkeyVerb);
- HeapFree(GetProcessHeap(), 0, pszExtraFromReg);
- RegCloseKey(hkeyShell);
- if (ret != ERROR_SUCCESS)
- return HRESULT_FROM_WIN32(ret);
-
- ret = RegOpenKeyExW(hkeyVerb, commandW, 0, KEY_READ, &hkeyCommand);
- RegCloseKey(hkeyVerb);
- if (ret != ERROR_SUCCESS)
- return HRESULT_FROM_WIN32(ret);
- hr = ASSOC_GetValue(hkeyCommand, ppszCommand);
- RegCloseKey(hkeyCommand);
- return hr;
-}
-
-static HRESULT ASSOC_GetExecutable(IQueryAssociationsImpl *This,
- LPCWSTR pszExtra, LPWSTR path,
- DWORD pathlen, DWORD *len)
-{
- WCHAR *pszCommand;
- WCHAR *pszStart;
- WCHAR *pszEnd;
- HRESULT hr;
-
- assert(len);
-
- hr = ASSOC_GetCommand(This, pszExtra, &pszCommand);
- if (FAILED(hr))
- return hr;
-
- /* cleanup pszCommand */
- if (pszCommand[0] == '"')
- {
- pszStart = pszCommand + 1;
- pszEnd = strchrW(pszStart, '"');
- }
- else
- {
- pszStart = pszCommand;
- pszEnd = strchrW(pszStart, ' ');
- }
- if (pszEnd)
- *pszEnd = 0;
-
- *len = SearchPathW(NULL, pszStart, NULL, pathlen, path, NULL);
- HeapFree(GetProcessHeap(), 0, pszCommand);
- if (!*len)
- return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
- return S_OK;
-}
-
-static HRESULT ASSOC_ReturnData(LPWSTR out, DWORD *outlen, LPCWSTR data,
- DWORD datalen)
-{
- assert(outlen);
-
- if (out)
- {
- if (*outlen < datalen)
- {
- *outlen = datalen;
- return E_POINTER;
- }
- *outlen = datalen;
- lstrcpynW(out, data, datalen);
- return S_OK;
- }
- else
- {
- *outlen = datalen;
- return S_FALSE;
- }
-}
-
-/**************************************************************************
- * IQueryAssociations_GetString {SHLWAPI}
- *
- * Get a file association string from the registry.
- *
- * PARAMS
- * iface [I] IQueryAssociations interface to query
- * cfFlags [I] ASSOCF_ flags from "shlwapi.h"
- * str [I] Type of string to get (ASSOCSTR enum from "shlwapi.h")
- * pszExtra [I] Extra information about the string location
- * pszOut [O] Destination for the association string
- * pcchOut [I/O] Length of pszOut
- *
- * RETURNS
- * Success: S_OK. pszOut contains the string, pcchOut contains its length.
- * Failure: An HRESULT error code indicating the error.
- */
-static HRESULT WINAPI IQueryAssociations_fnGetString(
- IQueryAssociations *iface,
- ASSOCF cfFlags,
- ASSOCSTR str,
- LPCWSTR pszExtra,
- LPWSTR pszOut,
- DWORD *pcchOut)
-{
- IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
- const ASSOCF cfUnimplemented = ~(0);
- DWORD len = 0;
- HRESULT hr;
- WCHAR path[MAX_PATH];
-
- TRACE("(%p,0x%8x,0x%8x,%s,%p,%p)\n", This, cfFlags, str,
- debugstr_w(pszExtra), pszOut, pcchOut);
-
- if (cfFlags & cfUnimplemented)
- FIXME("%08x: unimplemented flags!\n", cfFlags & cfUnimplemented);
-
- if (!pcchOut)
- return E_UNEXPECTED;
-
- switch (str)
- {
- case ASSOCSTR_COMMAND:
- {
- WCHAR *command;
- hr = ASSOC_GetCommand(This, pszExtra, &command);
- if (SUCCEEDED(hr))
- {
- hr = ASSOC_ReturnData(pszOut, pcchOut, command, strlenW(command) + 1);
- HeapFree(GetProcessHeap(), 0, command);
- }
- return hr;
- }
-
- case ASSOCSTR_EXECUTABLE:
- {
- hr = ASSOC_GetExecutable(This, pszExtra, path, MAX_PATH, &len);
- if (FAILED(hr))
- return hr;
- len++;
- return ASSOC_ReturnData(pszOut, pcchOut, path, len);
- }
-
- case ASSOCSTR_FRIENDLYDOCNAME:
- {
- WCHAR *pszFileType;
- DWORD ret;
- DWORD size;
-
- hr = ASSOC_GetValue(This->hkeySource, &pszFileType);
- if (FAILED(hr))
- return hr;
- size = 0;
- ret = RegGetValueW(HKEY_CLASSES_ROOT, pszFileType, NULL, RRF_RT_REG_SZ, NULL, NULL,
&size);
- if (ret == ERROR_SUCCESS)
- {
- WCHAR *docName = HeapAlloc(GetProcessHeap(), 0, size);
- if (docName)
- {
- ret = RegGetValueW(HKEY_CLASSES_ROOT, pszFileType, NULL, RRF_RT_REG_SZ, NULL,
docName, &size);
- if (ret == ERROR_SUCCESS)
- hr = ASSOC_ReturnData(pszOut, pcchOut, docName, strlenW(docName) + 1);
- else
- hr = HRESULT_FROM_WIN32(ret);
- HeapFree(GetProcessHeap(), 0, docName);
- }
- else
- hr = E_OUTOFMEMORY;
- }
- else
- hr = HRESULT_FROM_WIN32(ret);
- HeapFree(GetProcessHeap(), 0, pszFileType);
- return hr;
- }
-
- case ASSOCSTR_FRIENDLYAPPNAME:
- {
- PVOID verinfoW = NULL;
- DWORD size, retval = 0;
- UINT flen;
- WCHAR *bufW;
- static const WCHAR translationW[] = {
-
'\\','V','a','r','F','i','l','e','I','n','f','o',
-
'\\','T','r','a','n','s','l','a','t','i','o','n',0
- };
- static const WCHAR fileDescFmtW[] = {
-
'\\','S','t','r','i','n','g','F','i','l','e','I','n','f','o',
-
'\\','%','0','4','x','%','0','4','x',
-
'\\','F','i','l','e','D','e','s','c','r','i','p','t','i','o','n',0
- };
- WCHAR fileDescW[41];
-
- hr = ASSOC_GetExecutable(This, pszExtra, path, MAX_PATH, &len);
- if (FAILED(hr))
- return hr;
-
- retval = GetFileVersionInfoSizeW(path, &size);
- if (!retval)
- goto get_friendly_name_fail;
- verinfoW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, retval);
- if (!verinfoW)
- return E_OUTOFMEMORY;
- if (!GetFileVersionInfoW(path, 0, retval, verinfoW))
- goto get_friendly_name_fail;
- if (VerQueryValueW(verinfoW, translationW, (LPVOID *)&bufW, &flen))
- {
- UINT i;
- DWORD *langCodeDesc = (DWORD *)bufW;
- for (i = 0; i < flen / sizeof(DWORD); i++)
- {
- sprintfW(fileDescW, fileDescFmtW, LOWORD(langCodeDesc[i]),
- HIWORD(langCodeDesc[i]));
- if (VerQueryValueW(verinfoW, fileDescW, (LPVOID *)&bufW, &flen))
- {
- /* Does strlenW(bufW) == 0 mean we use the filename? */
- len = strlenW(bufW) + 1;
- TRACE("found FileDescription: %s\n", debugstr_w(bufW));
- return ASSOC_ReturnData(pszOut, pcchOut, bufW, len);
- }
- }
- }
-get_friendly_name_fail:
- PathRemoveExtensionW(path);
- PathStripPathW(path);
- TRACE("using filename: %s\n", debugstr_w(path));
- return ASSOC_ReturnData(pszOut, pcchOut, path, strlenW(path) + 1);
- }
-
- case ASSOCSTR_CONTENTTYPE:
- {
- static const WCHAR Content_TypeW[] =
{'C','o','n','t','e','n','t','
','T','y','p','e',0};
- WCHAR *contentType;
- DWORD ret;
- DWORD size;
-
- size = 0;
- ret = RegGetValueW(This->hkeySource, NULL, Content_TypeW, RRF_RT_REG_SZ, NULL,
NULL, &size);
- if (ret != ERROR_SUCCESS)
- return HRESULT_FROM_WIN32(ret);
- contentType = HeapAlloc(GetProcessHeap(), 0, size);
- if (contentType != NULL)
- {
- ret = RegGetValueW(This->hkeySource, NULL, Content_TypeW, RRF_RT_REG_SZ, NULL,
contentType, &size);
- if (ret == ERROR_SUCCESS)
- hr = ASSOC_ReturnData(pszOut, pcchOut, contentType, strlenW(contentType) + 1);
- else
- hr = HRESULT_FROM_WIN32(ret);
- HeapFree(GetProcessHeap(), 0, contentType);
- }
- else
- hr = E_OUTOFMEMORY;
- return hr;
- }
-
- case ASSOCSTR_DEFAULTICON:
- {
- static const WCHAR DefaultIconW[] =
{'D','e','f','a','u','l','t','I','c','o','n',0};
- WCHAR *pszFileType;
- DWORD ret;
- DWORD size;
- HKEY hkeyFile;
-
- hr = ASSOC_GetValue(This->hkeySource, &pszFileType);
- if (FAILED(hr))
- return hr;
- ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, pszFileType, 0, KEY_READ, &hkeyFile);
- if (ret == ERROR_SUCCESS)
- {
- size = 0;
- ret = RegGetValueW(hkeyFile, DefaultIconW, NULL, RRF_RT_REG_SZ, NULL, NULL,
&size);
- if (ret == ERROR_SUCCESS)
- {
- WCHAR *icon = HeapAlloc(GetProcessHeap(), 0, size);
- if (icon)
- {
- ret = RegGetValueW(hkeyFile, DefaultIconW, NULL, RRF_RT_REG_SZ, NULL, icon,
&size);
- if (ret == ERROR_SUCCESS)
- hr = ASSOC_ReturnData(pszOut, pcchOut, icon, strlenW(icon) + 1);
- else
- hr = HRESULT_FROM_WIN32(ret);
- HeapFree(GetProcessHeap(), 0, icon);
- }
- else
- hr = E_OUTOFMEMORY;
- }
- else
- hr = HRESULT_FROM_WIN32(ret);
- RegCloseKey(hkeyFile);
- }
- else
- hr = HRESULT_FROM_WIN32(ret);
- HeapFree(GetProcessHeap(), 0, pszFileType);
- return hr;
- }
-
- default:
- FIXME("assocstr %d unimplemented!\n", str);
- return E_NOTIMPL;
- }
-}
-
-/**************************************************************************
- * IQueryAssociations_GetKey {SHLWAPI}
- *
- * Get a file association key from the registry.
- *
- * PARAMS
- * iface [I] IQueryAssociations interface to query
- * cfFlags [I] ASSOCF_ flags from "shlwapi.h"
- * assockey [I] Type of key to get (ASSOCKEY enum from "shlwapi.h")
- * pszExtra [I] Extra information about the key location
- * phkeyOut [O] Destination for the association key
- *
- * RETURNS
- * Success: S_OK. phkeyOut contains a handle to the key.
- * Failure: An HRESULT error code indicating the error.
- */
-static HRESULT WINAPI IQueryAssociations_fnGetKey(
- IQueryAssociations *iface,
- ASSOCF cfFlags,
- ASSOCKEY assockey,
- LPCWSTR pszExtra,
- HKEY *phkeyOut)
-{
- IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
-
- FIXME("(%p,0x%8x,0x%8x,%s,%p)-stub!\n", This, cfFlags, assockey,
- debugstr_w(pszExtra), phkeyOut);
- return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IQueryAssociations_GetData {SHLWAPI}
- *
- * Get the data for a file association key from the registry.
- *
- * PARAMS
- * iface [I] IQueryAssociations interface to query
- * cfFlags [I] ASSOCF_ flags from "shlwapi.h"
- * assocdata [I] Type of data to get (ASSOCDATA enum from "shlwapi.h")
- * pszExtra [I] Extra information about the data location
- * pvOut [O] Destination for the association key
- * pcbOut [I/O] Size of pvOut
- *
- * RETURNS
- * 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)
-{
- IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
-
- FIXME("(%p,0x%8x,0x%8x,%s,%p,%p)-stub!\n", This, cfFlags, assocdata,
- debugstr_w(pszExtra), pvOut, pcbOut);
- return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IQueryAssociations_GetEnum {SHLWAPI}
- *
- * Not yet implemented in native Win32.
- *
- * PARAMS
- * iface [I] IQueryAssociations interface to query
- * cfFlags [I] ASSOCF_ flags from "shlwapi.h"
- * assocenum [I] Type of enum to get (ASSOCENUM enum from "shlwapi.h")
- * pszExtra [I] Extra information about the enum location
- * riid [I] REFIID to look for
- * ppvOut [O] Destination for the interface.
- *
- * RETURNS
- * Success: S_OK.
- * Failure: An HRESULT error code indicating the error.
- *
- * NOTES
- * Presumably this function returns an enumerator object.
- */
-static HRESULT WINAPI IQueryAssociations_fnGetEnum(
- IQueryAssociations *iface,
- ASSOCF cfFlags,
- ASSOCENUM assocenum,
- LPCWSTR pszExtra,
- REFIID riid,
- LPVOID *ppvOut)
-{
- IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
-
- FIXME("(%p,0x%8x,0x%8x,%s,%s,%p)-stub!\n", This, cfFlags, assocenum,
- debugstr_w(pszExtra), debugstr_guid(riid), ppvOut);
- return E_NOTIMPL;
-}
-
-static const IQueryAssociationsVtbl IQueryAssociations_vtbl =
-{
- IQueryAssociations_fnQueryInterface,
- IQueryAssociations_fnAddRef,
- IQueryAssociations_fnRelease,
- IQueryAssociations_fnInit,
- IQueryAssociations_fnGetString,
- IQueryAssociations_fnGetKey,
- IQueryAssociations_fnGetData,
- IQueryAssociations_fnGetEnum
-};
Modified: trunk/reactos/dll/win32/shlwapi/ordinal.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shlwapi/ordinal.…
==============================================================================
--- trunk/reactos/dll/win32/shlwapi/ordinal.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shlwapi/ordinal.c [iso-8859-1] Sat Sep 26 12:48:07 2009
@@ -1472,6 +1472,43 @@
IUnknown_Release(pService);
}
return hRet;
+}
+
+/*************************************************************************
+ * @ [SHLWAPI.479]
+ *
+ * Call an object's UIActivateIO method.
+ *
+ * PARAMS
+ * unknown [I] Object to call the UIActivateIO method on
+ * activate [I] Parameter for UIActivateIO call
+ * msg [I] Parameter for UIActivateIO call
+ *
+ * RETURNS
+ * Success: Value of UI_ActivateIO call
+ * Failure: An HRESULT error code
+ *
+ * NOTES
+ * unknown is expected to support the IInputObject interface.
+ */
+HRESULT WINAPI IUnknown_UIActivateIO(IUnknown *unknown, BOOL activate, LPMSG msg)
+{
+ IInputObject* object = NULL;
+ HRESULT ret;
+
+ if (!unknown)
+ return E_FAIL;
+
+ /* Get an IInputObject interface from the object */
+ ret = IUnknown_QueryInterface(unknown, &IID_IInputObject, (LPVOID*)
&object);
+
+ if (ret == S_OK)
+ {
+ ret = IInputObject_UIActivateIO(object, activate, msg);
+ IUnknown_Release(object);
+ }
+
+ return ret;
}
/*************************************************************************
@@ -4532,3 +4569,131 @@
return psd;
}
+
+/***********************************************************************
+ * SHCreatePropertyBagOnRegKey [SHLWAPI.471]
+ *
+ * Creates a property bag from a registry key
+ *
+ * PARAMS
+ * hKey [I] Handle to the desired registry key
+ * subkey [I] Name of desired subkey, or NULL to open hKey directly
+ * grfMode [I] Optional flags
+ * riid [I] IID of requested property bag interface
+ * ppv [O] Address to receive pointer to the new interface
+ *
+ * RETURNS
+ * success: 0
+ * failure: error code
+ *
+ */
+HRESULT WINAPI SHCreatePropertyBagOnRegKey (HKEY hKey, LPCWSTR subkey,
+ DWORD grfMode, REFIID riid, void **ppv)
+{
+ FIXME("%p %s %d %s %p STUB\n", hKey, debugstr_w(subkey), grfMode,
+ debugstr_guid(riid), ppv);
+
+ return E_NOTIMPL;
+}
+
+/***********************************************************************
+ * SHGetViewStatePropertyBag [SHLWAPI.515]
+ *
+ * Retrieves a property bag in which the view state information of a folder
+ * can be stored.
+ *
+ * PARAMS
+ * pidl [I] PIDL of the folder requested
+ * bag_name [I] Name of the property bag requested
+ * flags [I] Optional flags
+ * riid [I] IID of requested property bag interface
+ * ppv [O] Address to receive pointer to the new interface
+ *
+ * RETURNS
+ * success: S_OK
+ * failure: error code
+ *
+ */
+HRESULT WINAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl, LPWSTR bag_name,
+ DWORD flags, REFIID riid, void **ppv)
+{
+ FIXME("%p %s %d %s %p STUB\n", pidl, debugstr_w(bag_name), flags,
+ debugstr_guid(riid), ppv);
+
+ return E_NOTIMPL;
+}
+
+/***********************************************************************
+ * SHFormatDateTimeW [SHLWAPI.354]
+ *
+ * Produces a string representation of a time.
+ *
+ * PARAMS
+ * fileTime [I] Pointer to FILETIME structure specifying the time
+ * flags [I] Flags specifying the desired output
+ * buf [O] Pointer to buffer for output
+ * bufSize [I] Number of characters that can be contained in buffer
+ *
+ * RETURNS
+ * success: number of characters written to the buffer
+ * failure: 0
+ *
+ */
+INT WINAPI SHFormatDateTimeW(const FILETIME UNALIGNED *fileTime, DWORD *flags,
+ LPWSTR buf, UINT bufSize)
+{
+ FIXME("%p %p %s %d STUB\n", fileTime, flags, debugstr_w(buf), bufSize);
+ return 0;
+}
+
+/***********************************************************************
+ * SHFormatDateTimeA [SHLWAPI.353]
+ *
+ * See SHFormatDateTimeW.
+ *
+ */
+INT WINAPI SHFormatDateTimeA(const FILETIME UNALIGNED *fileTime, DWORD *flags,
+ LPCSTR buf, UINT bufSize)
+{
+ WCHAR *bufW;
+ DWORD buflenW, convlen;
+ INT retval;
+
+ if (!buf || !bufSize)
+ return 0;
+
+ buflenW = bufSize;
+ bufW = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR) * buflenW);
+ retval = SHFormatDateTimeW(fileTime, flags, bufW, buflenW);
+
+ if (retval != 0)
+ convlen = WideCharToMultiByte(CP_ACP, 0, bufW, -1, (LPSTR) buf, bufSize, NULL,
NULL);
+
+ HeapFree(GetProcessHeap(), 0, bufW);
+ return retval;
+}
+
+/***********************************************************************
+ * ZoneCheckUrlExW [SHLWAPI.231]
+ *
+ * Checks the details of the security zone for the supplied site. (?)
+ *
+ * PARAMS
+ *
+ * szURL [I] Pointer to the URL to check
+ *
+ * Other parameters currently unknown.
+ *
+ * RETURNS
+ * unknown
+ */
+
+INT WINAPI ZoneCheckUrlExW(LPWSTR szURL, PVOID pUnknown, DWORD dwUnknown2,
+ DWORD dwUnknown3, DWORD dwUnknown4, DWORD dwUnknown5, DWORD dwUnknown6,
+ DWORD dwUnknown7)
+{
+ FIXME("(%s,%p,%x,%x,%x,%x,%x,%x) STUB\n", debugstr_w(szURL), pUnknown,
dwUnknown2,
+ dwUnknown3, dwUnknown4, dwUnknown5, dwUnknown6, dwUnknown7);
+
+ return 0;
+}
Modified: trunk/reactos/dll/win32/shlwapi/shlwapi.spec
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shlwapi/shlwapi.…
==============================================================================
--- trunk/reactos/dll/win32/shlwapi/shlwapi.spec [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shlwapi/shlwapi.spec [iso-8859-1] Sat Sep 26 12:48:07 2009
@@ -228,7 +228,7 @@
228 stub -noname ZoneCheckUrlA
229 stub -noname ZoneCheckUrlW
230 stub -noname ZoneCheckUrlExA
-231 stub -noname ZoneCheckUrlExW
+231 stdcall -noname ZoneCheckUrlExW(wstr ptr long long long long long long)
232 stub -noname ZoneCheckUrlExCacheA
233 stub -noname ZoneCheckUrlExCacheW
234 stub -noname ZoneCheckHost
@@ -350,8 +350,8 @@
350 stdcall -noname GetFileVersionInfoSizeWrapW(wstr ptr)
351 stdcall -noname GetFileVersionInfoWrapW(wstr long long ptr)
352 stdcall -noname VerQueryValueWrapW(ptr wstr ptr ptr)
-353 stub -noname SHFormatDateTimeA
-354 stub -noname SHFormatDateTimeW
+353 stdcall -noname SHFormatDateTimeA(ptr ptr str long)
+354 stdcall -noname SHFormatDateTimeW(ptr ptr wstr long)
355 stdcall -noname IUnknown_EnableModeless(ptr long)
356 stdcall -noname CreateAllAccessSecurityAttributes(ptr ptr long)
357 stdcall -noname SHGetNewLinkInfoWrapW(wstr wstr wstr long long)
@@ -459,7 +459,7 @@
459 stdcall -noname SHExpandEnvironmentStringsA(str ptr long)
kernel32.ExpandEnvironmentStringsA
460 stdcall -noname SHExpandEnvironmentStringsW(wstr ptr long)
kernel32.ExpandEnvironmentStringsW
461 stdcall -noname SHGetAppCompatFlags(long)
-462 stub -noname UrlFixupW
+462 stdcall -noname UrlFixupW(wstr wstr long)
463 stub -noname SHExpandEnvironmentStringsForUserA
464 stub -noname SHExpandEnvironmentStringsForUserW
465 stub -noname PathUnExpandEnvStringsForUserA
@@ -468,7 +468,7 @@
468 stub -noname RunIndirectRegCommand
469 stub -noname RunRegCommand
470 stub -noname IUnknown_ProfferServiceOld
-471 stub -noname SHCreatePropertyBagOnRegKey
+471 stdcall -noname SHCreatePropertyBagOnRegKey(long wstr long ptr ptr)
472 stub -noname SHCreatePropertyBagOnProfileSelection
473 stub -noname SHGetIniStringUTF7W
474 stub -noname SHSetIniStringUTF7W
@@ -476,7 +476,7 @@
476 stub -noname SHGetObjectCompatFlags
477 stub -noname SHCreatePropertyBagOnMemory
478 stdcall -noname IUnknown_TranslateAcceleratorIO(ptr ptr)
-479 stub -noname IUnknown_UIActivateIO
+479 stdcall -noname IUnknown_UIActivateIO(ptr long ptr)
480 stdcall -noname UrlCrackW(wstr long long ptr) wininet.InternetCrackUrlW
481 stdcall -noname IUnknown_HasFocusIO(ptr)
482 stub -noname SHMessageBoxHelpA
@@ -508,7 +508,7 @@
512 stub -noname IStream_ReadPidl
513 stub -noname IStream_WritePidl
514 stdcall -noname IUnknown_ProfferService(ptr ptr ptr ptr)
-515 stub -noname SHGetViewStatePropertyBag
+515 stdcall -noname SHGetViewStatePropertyBag(ptr wstr long ptr ptr)
516 stdcall -noname SKGetValueW(long wstr wstr long long long)
517 stub -noname SKSetValueW
518 stub -noname SKDeleteValueW
@@ -757,6 +757,7 @@
@ stdcall StrChrA (str long)
@ stdcall StrChrIA (str long)
@ stdcall StrChrIW (wstr long)
+@ stdcall StrChrNW(wstr long long)
@ stdcall StrChrW (wstr long)
@ stdcall StrCmpIW (wstr wstr)
@ stdcall StrCmpLogicalW(wstr wstr)
Modified: trunk/reactos/dll/win32/shlwapi/string.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shlwapi/string.c…
==============================================================================
--- trunk/reactos/dll/win32/shlwapi/string.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shlwapi/string.c [iso-8859-1] Sat Sep 26 12:48:07 2009
@@ -316,6 +316,25 @@
lpszStr = NULL;
}
return (LPWSTR)lpszStr;
+}
+
+/*************************************************************************
+ * StrChrNW [SHLWAPI.@]
+ */
+LPWSTR WINAPI StrChrNW(LPCWSTR lpszStr, WCHAR ch, UINT cchMax)
+{
+ TRACE("(%s(%i),%i)\n", debugstr_wn(lpszStr,cchMax), cchMax, ch);
+
+ if (lpszStr)
+ {
+ while (*lpszStr && cchMax-- > 0)
+ {
+ if (*lpszStr == ch)
+ return (LPWSTR)lpszStr;
+ lpszStr++;
+ }
+ }
+ return NULL;
}
/*************************************************************************
Modified: trunk/reactos/dll/win32/shlwapi/url.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shlwapi/url.c?re…
==============================================================================
--- trunk/reactos/dll/win32/shlwapi/url.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shlwapi/url.c [iso-8859-1] Sat Sep 26 12:48:07 2009
@@ -2382,3 +2382,35 @@
}
return hRet;
}
+
+/***********************************************************************
+ * UrlFixupW [SHLWAPI.462]
+ *
+ * Checks the scheme part of a URL and attempts to correct misspellings.
+ *
+ * PARAMS
+ * lpszUrl [I] Pointer to the URL to be corrected
+ * lpszTranslatedUrl [O] Pointer to a buffer to store corrected URL
+ * dwMaxChars [I] Maximum size of corrected URL
+ *
+ * RETURNS
+ * success: S_OK if URL corrected or already correct
+ * failure: S_FALSE if unable to correct / COM error code if other error
+ *
+ */
+HRESULT WINAPI UrlFixupW(LPCWSTR url, LPWSTR translatedUrl, DWORD maxChars)
+{
+ DWORD srcLen;
+
+ FIXME("(%s,%p,%d) STUB\n", debugstr_w(url), translatedUrl, maxChars);
+
+ if (!url)
+ return E_FAIL;
+
+ srcLen = lstrlenW(url);
+
+ /* For now just copy the URL directly */
+ lstrcpynW(translatedUrl, url, (maxChars < srcLen) ? maxChars : srcLen);
+
+ return S_OK;
+}
Modified: trunk/reactos/dll/win32/windowscodecs/info.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/in…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/info.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/info.c [iso-8859-1] Sat Sep 26 12:48:07 2009
@@ -952,7 +952,7 @@
list_add_tail(&This->objects, &item->entry);
}
- if (!SUCCEEDED(hr))
+ if (FAILED(hr))
{
HeapFree(GetProcessHeap(), 0, item);
hr = S_OK;
Modified: trunk/reactos/dll/win32/windowscodecs/stream.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/st…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/stream.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/stream.c [iso-8859-1] Sat Sep 26 12:48:07 2009
@@ -129,13 +129,12 @@
LARGE_INTEGER NewPosition;
TRACE("(%p)\n", This);
- if (dlibMove.QuadPart > 0xFFFFFFFF) return
HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW);
-
if (dwOrigin == STREAM_SEEK_SET) NewPosition.QuadPart = dlibMove.QuadPart;
else if (dwOrigin == STREAM_SEEK_CUR) NewPosition.QuadPart = This->dwCurPos +
dlibMove.QuadPart;
else if (dwOrigin == STREAM_SEEK_END) NewPosition.QuadPart = This->dwMemsize +
dlibMove.QuadPart;
else return E_INVALIDARG;
+ if (NewPosition.u.HighPart) return HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW);
if (NewPosition.QuadPart > This->dwMemsize) return E_INVALIDARG;
if (NewPosition.QuadPart < 0) return E_INVALIDARG;
This->dwCurPos = NewPosition.u.LowPart;