Convert some registry helper functions to use unicode versions of
CLSID & registry functions (untested).
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index 75926e9..0b3b14a 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -2168,28 +2168,27 @@
*/
HRESULT WINAPI OleGetAutoConvert(REFCLSID clsidOld, LPCLSID pClsidNew)
{
- HKEY hkey = 0;
- char buf[200];
- WCHAR wbuf[200];
+ static const WCHAR wszAutoConvertTo[] = {'A','u','t','o','C','o','n','v','e','r','t','T','o',0};
+ HKEY hkey = NULL;
+ WCHAR buf[CHARS_IN_GUID];
DWORD len;
HRESULT res = S_OK;
- sprintf(buf,"CLSID\\");WINE_StringFromCLSID(clsidOld,&buf[6]);
- if (RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&hkey))
+ if (ERROR_SUCCESS != COM_OpenKeyForCLSID(clsidOld, KEY_READ, &hkey))
{
res = REGDB_E_CLASSNOTREG;
- goto done;
+ goto done;
}
- len = 200;
+
+ len = sizeof(buf);
/* we can just query for the default value of AutoConvertTo key like that,
without opening the AutoConvertTo key and querying for NULL (default) */
- if (RegQueryValueA(hkey,"AutoConvertTo",buf,&len))
+ if (RegQueryValueW(hkey, wszAutoConvertTo, buf, &len))
{
res = REGDB_E_KEYMISSING;
- goto done;
+ goto done;
}
- MultiByteToWideChar( CP_ACP, 0, buf, -1, wbuf, sizeof(wbuf)/sizeof(WCHAR) );
- CLSIDFromString(wbuf,pClsidNew);
+ res = CLSIDFromString(buf, pClsidNew);
done:
if (hkey) RegCloseKey(hkey);
return res;
@@ -2213,27 +2212,26 @@
*/
HRESULT WINAPI CoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew)
{
- HKEY hkey = 0;
- char buf[47];
- char szClsidNew[39];
+ static const WCHAR wszAutoTreatAs[] = {'A','u','t','o','T','r','e','a','t','A','s',0};
+ static const WCHAR wszTreatAs[] = {'T','r','e','a','t','A','s',0};
+ HKEY hkey = NULL;
+ WCHAR szClsidNew[CHARS_IN_GUID];
HRESULT res = S_OK;
- char auto_treat_as[39];
+ WCHAR auto_treat_as[CHARS_IN_GUID];
LONG auto_treat_as_size = sizeof(auto_treat_as);
CLSID id;
- sprintf(buf,"CLSID\\");WINE_StringFromCLSID(clsidOld,&buf[6]);
- WINE_StringFromCLSID(clsidNew, szClsidNew);
- if (RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&hkey))
+ if (ERROR_SUCCESS != COM_OpenKeyForCLSID(clsidOld, KEY_READ | KEY_WRITE, &hkey))
{
res = REGDB_E_CLASSNOTREG;
goto done;
}
if (!memcmp( clsidOld, clsidNew, sizeof(*clsidOld) ))
{
- if (!RegQueryValueA(hkey, "AutoTreatAs", auto_treat_as, &auto_treat_as_size) &&
- !__CLSIDFromStringA(auto_treat_as, &id))
+ if (!RegQueryValueW(hkey, wszAutoTreatAs, auto_treat_as, &auto_treat_as_size) &&
+ !CLSIDFromString(auto_treat_as, &id))
{
- if (RegSetValueA(hkey, "TreatAs", REG_SZ, auto_treat_as, strlen(auto_treat_as)+1))
+ if (RegSetValueW(hkey, wszTreatAs, REG_SZ, auto_treat_as, sizeof(auto_treat_as)))
{
res = REGDB_E_WRITEREGDB;
goto done;
@@ -2241,13 +2239,14 @@
}
else
{
- RegDeleteKeyA(hkey, "TreatAs");
+ RegDeleteKeyW(hkey, wszTreatAs);
goto done;
}
}
- else if (RegSetValueA(hkey, "TreatAs", REG_SZ, szClsidNew, strlen(szClsidNew)+1))
+ else if (!StringFromGUID2(clsidNew, szClsidNew, ARRAYSIZE(szClsidNew)) &&
+ !RegSetValueW(hkey, wszTreatAs, REG_SZ, szClsidNew, sizeof(szClsidNew)))
{
- res = REGDB_E_WRITEREGDB;
+ res = REGDB_E_WRITEREGDB;
goto done;
}
@@ -2274,32 +2273,31 @@
*/
HRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID clsidNew)
{
- HKEY hkey = 0;
- char buf[200], szClsidNew[200];
+ static const WCHAR wszTreatAs[] = {'T','r','e','a','t','A','s',0};
+ HKEY hkey = NULL;
+ WCHAR szClsidNew[CHARS_IN_GUID];
HRESULT res = S_OK;
LONG len = sizeof(szClsidNew);
FIXME("(%s,%p)\n", debugstr_guid(clsidOld), clsidNew);
- sprintf(buf,"CLSID\\");WINE_StringFromCLSID(clsidOld,&buf[6]);
memcpy(clsidNew,clsidOld,sizeof(CLSID)); /* copy over old value */
- if (RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&hkey))
+ if (COM_OpenKeyForCLSID(clsidOld, KEY_READ, &hkey))
{
res = REGDB_E_CLASSNOTREG;
goto done;
}
- if (RegQueryValueA(hkey, "TreatAs", szClsidNew, &len))
+ if (RegQueryValueW(hkey, wszTreatAs, szClsidNew, &len))
{
res = S_FALSE;
goto done;
}
- res = __CLSIDFromStringA(szClsidNew,clsidNew);
+ res = CLSIDFromString(szClsidNew,clsidNew);
if (FAILED(res))
- FIXME("Failed CLSIDFromStringA(%s), hres %lx?\n",szClsidNew,res);
+ ERR("Failed CLSIDFromStringA(%s), hres 0x%08lx\n", debugstr_w(szClsidNew), res);
done:
if (hkey) RegCloseKey(hkey);
return res;
-
}
/******************************************************************************
diff --git a/dlls/ole32/ole16.c b/dlls/ole32/ole16.c
index 5f7ee63..57f24c8 100644
--- a/dlls/ole32/ole16.c
+++ b/dlls/ole32/ole16.c
@@ -356,23 +356,22 @@
REFCLSID clsid, /* [in] class id as found in registry */
LPOLESTR16 *lplpszProgID/* [out] associated Prog ID */
) {
- char strCLSID[50], *buf, *buf2;
- DWORD buf2len;
+ static const WCHAR wszProgID[] = {'P','r','o','g','I','D',0};
HKEY xhkey;
+ HKEY hkey;
HRESULT ret = S_OK;
- WINE_StringFromCLSID(clsid, strCLSID);
-
- buf = HeapAlloc(GetProcessHeap(), 0, strlen(strCLSID)+14);
- sprintf(buf,"CLSID\\%s\\ProgID", strCLSID);
- if (RegOpenKeyA(HKEY_CLASSES_ROOT, buf, &xhkey))
+ if (COM_OpenKeyForCLSID(clsid, KEY_READ, &hkey))
ret = REGDB_E_CLASSNOTREG;
-
- HeapFree(GetProcessHeap(), 0, buf);
+
+ if ((ret == S_OK) &&
+ RegOpenKeyW(hkey, wszProgID, &xhkey))
+ ret = REGDB_E_CLASSNOTREG;
if (ret == S_OK)
{
- buf2 = HeapAlloc(GetProcessHeap(), 0, 255);
+ DWORD buf2len;
+ char *buf2 = HeapAlloc(GetProcessHeap(), 0, 255);
buf2len = 255;
if (RegQueryValueA(xhkey, NULL, buf2, &buf2len))
ret = REGDB_E_CLASSNOTREG;
@@ -429,12 +428,8 @@
DWORD flags, /* [in] REGCLS flags indicating how connections are made */
LPDWORD lpdwRegister
) {
- char buf[80];
-
- WINE_StringFromCLSID(rclsid,buf);
-
FIXME("(%s,%p,0x%08lx,0x%08lx,%p),stub\n",
- buf,pUnk,dwClsContext,flags,lpdwRegister
+ debugstr_guid(rclsid),pUnk,dwClsContext,flags,lpdwRegister
);
return 0;
}
diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c
index 339ccd2..bca4b9a 100644
--- a/dlls/ole32/ole2.c
+++ b/dlls/ole32/ole2.c
@@ -46,6 +46,7 @@
#include "ole2ver.h"
#include "wownt32.h"
+#include "wine/unicode.h"
#include "wine/winbase16.h"
#include "wine/wingdi16.h"
#include "wine/winuser16.h"
@@ -2294,20 +2295,20 @@
*/
HRESULT WINAPI OleSetAutoConvert(REFCLSID clsidOld, REFCLSID clsidNew)
{
- HKEY hkey = 0;
- char buf[200], szClsidNew[200];
+ static const WCHAR wszAutoConvertTo[] = {'A','u','t','o','C','o','n','v','e','r','t','T','o',0};
+ HKEY hkey = NULL;
+ WCHAR szClsidNew[CHARS_IN_GUID];
HRESULT res = S_OK;
- /* FIXME: convert to Unicode */
TRACE("(%s,%s)\n", debugstr_guid(clsidOld), debugstr_guid(clsidNew));
- sprintf(buf,"CLSID\\");WINE_StringFromCLSID(clsidOld,&buf[6]);
- WINE_StringFromCLSID(clsidNew, szClsidNew);
- if (RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&hkey))
+
+ if (COM_OpenKeyForCLSID(clsidOld, KEY_READ | KEY_WRITE, &hkey))
{
res = REGDB_E_CLASSNOTREG;
goto done;
}
- if (RegSetValueA(hkey, "AutoConvertTo", REG_SZ, szClsidNew, strlen(szClsidNew)+1))
+ StringFromGUID2(clsidNew, szClsidNew, CHARS_IN_GUID);
+ if (RegSetValueW(hkey, wszAutoConvertTo, REG_SZ, szClsidNew, (strlenW(szClsidNew)+1) * sizeof(WCHAR)))
{
res = REGDB_E_WRITEREGDB;
goto done;