mmdevapi: Implement MMDeviceCollection methods.
This commit is contained in:
parent
9371fd5f95
commit
d53dc08ec5
@ -468,20 +468,45 @@ static ULONG WINAPI MMDevCol_Release(IMMDeviceCollection *iface)
|
|||||||
static HRESULT WINAPI MMDevCol_GetCount(IMMDeviceCollection *iface, UINT *numdevs)
|
static HRESULT WINAPI MMDevCol_GetCount(IMMDeviceCollection *iface, UINT *numdevs)
|
||||||
{
|
{
|
||||||
MMDevColImpl *This = (MMDevColImpl*)iface;
|
MMDevColImpl *This = (MMDevColImpl*)iface;
|
||||||
|
DWORD i;
|
||||||
|
|
||||||
TRACE("(%p)->(%p)\n", This, numdevs);
|
TRACE("(%p)->(%p)\n", This, numdevs);
|
||||||
if (!numdevs)
|
if (!numdevs)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
||||||
*numdevs = 0;
|
*numdevs = 0;
|
||||||
|
for (i = 0; i < MMDevice_count; ++i)
|
||||||
|
{
|
||||||
|
MMDevice *cur = MMDevice_head[i];
|
||||||
|
if ((cur->flow == This->flow || This->flow == eAll)
|
||||||
|
&& (cur->state & This->state))
|
||||||
|
++(*numdevs);
|
||||||
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MMDevCol_Item(IMMDeviceCollection *iface, UINT i, IMMDevice **dev)
|
static HRESULT WINAPI MMDevCol_Item(IMMDeviceCollection *iface, UINT n, IMMDevice **dev)
|
||||||
{
|
{
|
||||||
MMDevColImpl *This = (MMDevColImpl*)iface;
|
MMDevColImpl *This = (MMDevColImpl*)iface;
|
||||||
TRACE("(%p)->(%u, %p)\n", This, i, dev);
|
DWORD i = 0, j = 0;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%u, %p)\n", This, n, dev);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
||||||
|
for (j = 0; j < MMDevice_count; ++j)
|
||||||
|
{
|
||||||
|
MMDevice *cur = MMDevice_head[j];
|
||||||
|
if ((cur->flow == This->flow || This->flow == eAll)
|
||||||
|
&& (cur->state & This->state)
|
||||||
|
&& i++ == n)
|
||||||
|
{
|
||||||
|
*dev = (IMMDevice *)cur;
|
||||||
|
IMMDevice_AddRef(*dev);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
WARN("Could not obtain item %u\n", n);
|
||||||
*dev = NULL;
|
*dev = NULL;
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user