Alexander Dorofeyev : devenum: Move locating category key to function, use it ParseDisplayName.
Alexandre Julliard
julliard at winehq.org
Tue Jul 1 08:27:46 CDT 2008
Module: wine
Branch: master
Commit: de70686f17a37151d84ddb2d17335f365115b3aa
URL: http://source.winehq.org/git/wine.git/?a=commit;h=de70686f17a37151d84ddb2d17335f365115b3aa
Author: Alexander Dorofeyev <alexd4 at inbox.lv>
Date: Sun Jun 29 15:07:32 2008 +0300
devenum: Move locating category key to function, use it ParseDisplayName.
---
dlls/devenum/createdevenum.c | 58 +++++++++++++++++++++++----------------
dlls/devenum/devenum_private.h | 5 +++
dlls/devenum/parsedisplayname.c | 18 +++++-------
3 files changed, 47 insertions(+), 34 deletions(-)
diff --git a/dlls/devenum/createdevenum.c b/dlls/devenum/createdevenum.c
index 11efca2..5b9dcbc 100644
--- a/dlls/devenum/createdevenum.c
+++ b/dlls/devenum/createdevenum.c
@@ -96,6 +96,35 @@ static ULONG WINAPI DEVENUM_ICreateDevEnum_Release(ICreateDevEnum * iface)
return 1; /* non-heap based object */
}
+HRESULT DEVENUM_GetCategoryKey(REFCLSID clsidDeviceClass, HKEY *pBaseKey, WCHAR *wszRegKeyName, UINT maxLen)
+{
+ if (IsEqualGUID(clsidDeviceClass, &CLSID_AudioRendererCategory) ||
+ IsEqualGUID(clsidDeviceClass, &CLSID_AudioInputDeviceCategory) ||
+ IsEqualGUID(clsidDeviceClass, &CLSID_VideoInputDeviceCategory) ||
+ IsEqualGUID(clsidDeviceClass, &CLSID_MidiRendererCategory))
+ {
+ *pBaseKey = HKEY_CURRENT_USER;
+ strcpyW(wszRegKeyName, wszActiveMovieKey);
+
+ if (!StringFromGUID2(clsidDeviceClass, wszRegKeyName + strlenW(wszRegKeyName), maxLen - strlenW(wszRegKeyName)))
+ return E_OUTOFMEMORY;
+ }
+ else
+ {
+ *pBaseKey = HKEY_CLASSES_ROOT;
+ strcpyW(wszRegKeyName, clsid_keyname);
+ strcatW(wszRegKeyName, wszRegSeparator);
+
+ if (!StringFromGUID2(clsidDeviceClass, wszRegKeyName + CLSID_STR_LEN, maxLen - CLSID_STR_LEN))
+ return E_OUTOFMEMORY;
+
+ strcatW(wszRegKeyName, wszRegSeparator);
+ strcatW(wszRegKeyName, wszInstanceKeyName);
+ }
+
+ return S_OK;
+}
+
/**********************************************************************
* DEVENUM_ICreateDevEnum_CreateClassEnumerator
*/
@@ -108,6 +137,7 @@ HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
WCHAR wszRegKey[MAX_PATH];
HKEY hkey;
HKEY hbasekey;
+ HRESULT hr;
CreateDevEnumImpl *This = (CreateDevEnumImpl *)iface;
TRACE("(%p)->(%s, %p, %x)\n\tDeviceClass:\t%s\n", This, debugstr_guid(clsidDeviceClass), ppEnumMoniker, dwFlags, debugstr_guid(clsidDeviceClass));
@@ -117,29 +147,9 @@ HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
*ppEnumMoniker = NULL;
- if (IsEqualGUID(clsidDeviceClass, &CLSID_AudioRendererCategory) ||
- IsEqualGUID(clsidDeviceClass, &CLSID_AudioInputDeviceCategory) ||
- IsEqualGUID(clsidDeviceClass, &CLSID_VideoInputDeviceCategory) ||
- IsEqualGUID(clsidDeviceClass, &CLSID_MidiRendererCategory))
- {
- hbasekey = HKEY_CURRENT_USER;
- strcpyW(wszRegKey, wszActiveMovieKey);
-
- if (!StringFromGUID2(clsidDeviceClass, wszRegKey + strlenW(wszRegKey), MAX_PATH - strlenW(wszRegKey)))
- return E_OUTOFMEMORY;
- }
- else
- {
- hbasekey = HKEY_CLASSES_ROOT;
- strcpyW(wszRegKey, clsid_keyname);
- strcatW(wszRegKey, wszRegSeparator);
-
- if (!StringFromGUID2(clsidDeviceClass, wszRegKey + CLSID_STR_LEN, MAX_PATH - CLSID_STR_LEN))
- return E_OUTOFMEMORY;
-
- strcatW(wszRegKey, wszRegSeparator);
- strcatW(wszRegKey, wszInstanceKeyName);
- }
+ hr = DEVENUM_GetCategoryKey(clsidDeviceClass, &hbasekey, wszRegKey, MAX_PATH);
+ if (FAILED(hr))
+ return hr;
if (RegOpenKeyW(hbasekey, wszRegKey, &hkey) != ERROR_SUCCESS)
{
@@ -148,7 +158,7 @@ HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
IsEqualGUID(clsidDeviceClass, &CLSID_VideoInputDeviceCategory) ||
IsEqualGUID(clsidDeviceClass, &CLSID_MidiRendererCategory))
{
- HRESULT hr = DEVENUM_CreateSpecialCategories();
+ hr = DEVENUM_CreateSpecialCategories();
if (FAILED(hr))
return hr;
if (RegOpenKeyW(hbasekey, wszRegKey, &hkey) != ERROR_SUCCESS)
diff --git a/dlls/devenum/devenum_private.h b/dlls/devenum/devenum_private.h
index 061a8f4..b50afb8 100644
--- a/dlls/devenum/devenum_private.h
+++ b/dlls/devenum/devenum_private.h
@@ -93,6 +93,11 @@ extern CreateDevEnumImpl DEVENUM_CreateDevEnum;
extern ParseDisplayNameImpl DEVENUM_ParseDisplayName;
/**********************************************************************
+ * Private helper function to get AM filter category key location
+ */
+HRESULT DEVENUM_GetCategoryKey(REFCLSID clsidDeviceClass, HKEY *pBaseKey, WCHAR *wszRegKeyName, UINT maxLen);
+
+/**********************************************************************
* Global string constant declarations
*/
extern const WCHAR clsid_keyname[6];
diff --git a/dlls/devenum/parsedisplayname.c b/dlls/devenum/parsedisplayname.c
index 0305c98..4025215 100644
--- a/dlls/devenum/parsedisplayname.c
+++ b/dlls/devenum/parsedisplayname.c
@@ -90,11 +90,13 @@ static HRESULT WINAPI DEVENUM_IParseDisplayName_ParseDisplayName(
{
LPOLESTR pszBetween = NULL;
LPOLESTR pszClass = NULL;
- IEnumMoniker * pEm = NULL;
MediaCatMoniker * pMoniker = NULL;
CLSID clsidDevice;
HRESULT res = S_OK;
+ WCHAR wszRegKeyName[MAX_PATH];
+ HKEY hbasekey;
int classlen;
+ static const WCHAR wszRegSeparator[] = {'\\', 0 };
TRACE("(%p, %s, %p, %p)\n", pbc, debugstr_w(pszDisplayName), pchEaten, ppmkOut);
@@ -122,9 +124,7 @@ static HRESULT WINAPI DEVENUM_IParseDisplayName_ParseDisplayName(
if (SUCCEEDED(res))
{
- res = DEVENUM_ICreateDevEnum_CreateClassEnumerator((ICreateDevEnum *)(char*)&DEVENUM_CreateDevEnum, &clsidDevice, &pEm, 0);
- if (res == S_FALSE) /* S_FALSE means no category */
- res = MK_E_NOOBJECT;
+ res = DEVENUM_GetCategoryKey(&clsidDevice, &hbasekey, wszRegKeyName, MAX_PATH);
}
if (SUCCEEDED(res))
@@ -132,9 +132,10 @@ static HRESULT WINAPI DEVENUM_IParseDisplayName_ParseDisplayName(
pMoniker = DEVENUM_IMediaCatMoniker_Construct();
if (pMoniker)
{
- if (RegCreateKeyW(((EnumMonikerImpl *)pEm)->hkey,
- pszBetween,
- &pMoniker->hkey) == ERROR_SUCCESS)
+ strcatW(wszRegKeyName, wszRegSeparator);
+ strcatW(wszRegKeyName, pszBetween);
+
+ if (RegCreateKeyW(hbasekey, wszRegKeyName, &pMoniker->hkey) == ERROR_SUCCESS)
*ppmkOut = (LPMONIKER)pMoniker;
else
{
@@ -144,9 +145,6 @@ static HRESULT WINAPI DEVENUM_IParseDisplayName_ParseDisplayName(
}
}
- if (pEm)
- IEnumMoniker_Release(pEm);
-
CoTaskMemFree(pszClass);
TRACE("-- returning: %x\n", res);
More information about the wine-cvs
mailing list