/********************************************************************** * DEVENUM_ICreateDevEnum_CreateClassEnumerator */ static HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator( ICreateDevEnum * iface, REFCLSID clsidDeviceClass, IEnumMoniker **ppEnumMoniker, DWORD dwFlags) { WCHAR wszRegKey[MAX_PATH]; HKEY hkey; HKEY hbasekey; HRESULT hr; TRACE("(%p)->(%s, %p, %x)\n", iface, debugstr_guid(clsidDeviceClass), ppEnumMoniker, dwFlags); if (!ppEnumMoniker) return E_POINTER; *ppEnumMoniker = NULL; if (IsEqualGUID(clsidDeviceClass, &CLSID_LegacyAmFilterCategory)) { DEVENUM_RegisterLegacyAmFilters(); } hr = DEVENUM_GetCategoryKey(clsidDeviceClass, &hbasekey, wszRegKey, MAX_PATH); if (FAILED(hr)) return hr; if (IsEqualGUID(clsidDeviceClass, &CLSID_AudioRendererCategory) || IsEqualGUID(clsidDeviceClass, &CLSID_AudioInputDeviceCategory) || IsEqualGUID(clsidDeviceClass, &CLSID_VideoInputDeviceCategory) || IsEqualGUID(clsidDeviceClass, &CLSID_MidiRendererCategory)) { hr = DEVENUM_CreateSpecialCategories(); if (FAILED(hr)) return hr; if (RegOpenKeyW(hbasekey, wszRegKey, &hkey) != ERROR_SUCCESS) { ERR("Couldn't open registry key for special device: %s\n", debugstr_guid(clsidDeviceClass)); return S_FALSE; } } else if (RegOpenKeyW(hbasekey, wszRegKey, &hkey) != ERROR_SUCCESS) { FIXME("Category %s not found\n", debugstr_guid(clsidDeviceClass)); return S_FALSE; } return DEVENUM_IEnumMoniker_Construct(hkey, ppEnumMoniker); }
/********************************************************************** * DEVENUM_ICreateDevEnum_CreateClassEnumerator */ static HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator( ICreateDevEnum * iface, REFCLSID clsidDeviceClass, IEnumMoniker **ppEnumMoniker, DWORD dwFlags) { HKEY hkey, special_hkey = NULL; HRESULT hr; TRACE("(%p)->(%s, %p, %x)\n", iface, debugstr_guid(clsidDeviceClass), ppEnumMoniker, dwFlags); if (!ppEnumMoniker) return E_POINTER; *ppEnumMoniker = NULL; if (IsEqualGUID(clsidDeviceClass, &CLSID_LegacyAmFilterCategory)) { DEVENUM_RegisterLegacyAmFilters(); } if (IsSpecialCategory(clsidDeviceClass)) { hr = DEVENUM_CreateSpecialCategories(); if (FAILED(hr)) return hr; special_hkey = open_special_category_key(clsidDeviceClass, FALSE); if (!special_hkey) { ERR("Couldn't open registry key for special device: %s\n", debugstr_guid(clsidDeviceClass)); return S_FALSE; } } hkey = open_category_key(clsidDeviceClass); if (!hkey && !special_hkey) { FIXME("Category %s not found\n", debugstr_guid(clsidDeviceClass)); return S_FALSE; } return DEVENUM_IEnumMoniker_Construct(hkey, special_hkey, ppEnumMoniker); }