mmdevapi: Implement IMMDeviceEnumerator::GetDevice.
authorMaarten Lankhorst <m.b.lankhorst@gmail.com>
Sun, 21 Feb 2010 13:26:43 +0000 (14:26 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 15 Mar 2010 16:46:54 +0000 (17:46 +0100)
dlls/mmdevapi/devenum.c

index cbe4ab084509cec7e769dd1affa0169903842a38..f39fe971b2bef55782122f42fa4a468148f583f4 100644 (file)
@@ -809,9 +809,31 @@ static HRESULT WINAPI MMDevEnum_GetDefaultAudioEndpoint(IMMDeviceEnumerator *ifa
 static HRESULT WINAPI MMDevEnum_GetDevice(IMMDeviceEnumerator *iface, const WCHAR *name, IMMDevice **device)
 {
     MMDevEnumImpl *This = (MMDevEnumImpl*)iface;
+    DWORD i=0;
+    IMMDevice *dev = NULL;
+
     TRACE("(%p)->(%s,%p)\n", This, debugstr_w(name), device);
-    FIXME("stub\n");
-    return E_NOTIMPL;
+    for (i = 0; i < MMDevice_count; ++i)
+    {
+        WCHAR *str;
+        dev = (IMMDevice*)MMDevice_head[i];
+        IMMDevice_GetId(dev, &str);
+
+        if (str && !lstrcmpW(str, name))
+        {
+            CoTaskMemFree(str);
+            break;
+        }
+        CoTaskMemFree(str);
+    }
+    if (dev)
+    {
+        IUnknown_AddRef(dev);
+        *device = dev;
+        return S_OK;
+    }
+    WARN("Could not find device %s\n", debugstr_w(name));
+    return E_NOTFOUND;
 }
 
 static HRESULT WINAPI MMDevEnum_RegisterEndpointNotificationCallback(IMMDeviceEnumerator *iface, IMMNotificationClient *client)