[PATCH 1/7] dsound: Remove support for IKsPropertySet for now

Maarten Lankhorst m.b.lankhorst at gmail.com
Thu Dec 3 03:07:01 CST 2009


--
As I said, I'm confident nobody uses it, since wine never implemented it properly anyway
---
 dlls/dsound/Makefile.in      |    1 -
 dlls/dsound/buffer.c         |   15 -
 dlls/dsound/dsound_main.c    |    6 +
 dlls/dsound/dsound_private.h |   36 -
 dlls/dsound/propset.c        | 1511 ------------------------------------------
 dlls/dsound/tests/propset.c  |    2 +-
 6 files changed, 7 insertions(+), 1564 deletions(-)
 delete mode 100644 dlls/dsound/propset.c

diff --git a/dlls/dsound/Makefile.in b/dlls/dsound/Makefile.in
index bbac7f9..0b370dc 100644
--- a/dlls/dsound/Makefile.in
+++ b/dlls/dsound/Makefile.in
@@ -15,7 +15,6 @@ C_SRCS = \
 	duplex.c \
 	mixer.c \
 	primary.c \
-	propset.c \
 	regsvr.c \
 	sound3d.c
 
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index 2a25d50..98ede9b 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -904,13 +904,6 @@ static HRESULT WINAPI IDirectSoundBufferImpl_QueryInterface(
 	}
 
 	if ( IsEqualGUID( &IID_IKsPropertySet, riid ) ) {
-		if (!This->iks)
-			IKsBufferPropertySetImpl_Create(This, &(This->iks));
-		if (This->iks) {
-			IKsPropertySet_AddRef((LPKSPROPERTYSET)This->iks);
-	    		*ppobj = This->iks;
-			return S_OK;
-		}
 		WARN("IID_IKsPropertySet\n");
 		return E_NOINTERFACE;
 	}
@@ -980,7 +973,6 @@ HRESULT IDirectSoundBufferImpl_Create(
 	dsb->secondary = 0;
 	dsb->device = device;
 	dsb->lpVtbl = &dsbvt;
-	dsb->iks = NULL;
 
 	/* size depends on version */
 	CopyMemory(&dsb->dsbd, dsbd, dsbd->dwSize);
@@ -1139,12 +1131,6 @@ HRESULT IDirectSoundBufferImpl_Destroy(
      * this object until it is ready to be deleted */
     IDirectSoundBufferImpl_AddRef((LPDIRECTSOUNDBUFFER8)pdsb);
 
-    if (pdsb->iks) {
-        WARN("iks not NULL\n");
-        IKsBufferPropertySetImpl_Destroy(pdsb->iks);
-        pdsb->iks = NULL;
-    }
-
     if (pdsb->ds3db) {
         WARN("ds3db not NULL\n");
         IDirectSound3DBufferImpl_Destroy(pdsb->ds3db);
@@ -1213,7 +1199,6 @@ HRESULT IDirectSoundBufferImpl_Duplicate(
     dsb->buf_mixpos = dsb->sec_mixpos = 0;
     dsb->device = device;
     dsb->ds3db = NULL;
-    dsb->iks = NULL; /* FIXME? */
     dsb->secondary = NULL;
     dsb->tmp_buffer = NULL;
     DSOUND_RecalcFormat(dsb);
diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c
index bfb8708..f52a6e9 100644
--- a/dlls/dsound/dsound_main.c
+++ b/dlls/dsound/dsound_main.c
@@ -570,6 +570,12 @@ static const IClassFactoryVtbl DSCF_Vtbl = {
     DSCF_LockServer
 };
 
+HRESULT IKsPrivatePropertySetImpl_Create(REFIID riid, IKsPropertySet **piks)
+{
+    *piks = NULL;
+    return E_NOTIMPL;
+}
+
 static IClassFactoryImpl DSOUND_CF[] = {
     { &DSCF_Vtbl, 1, &CLSID_DirectSound, (FnCreateInstance)DSOUND_Create },
     { &DSCF_Vtbl, 1, &CLSID_DirectSound8, (FnCreateInstance)DSOUND_Create8 },
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
index 1b25ddd..c4e7565 100644
--- a/dlls/dsound/dsound_private.h
+++ b/dlls/dsound/dsound_private.h
@@ -56,8 +56,6 @@ typedef struct IDirectSoundNotifyImpl        IDirectSoundNotifyImpl;
 typedef struct IDirectSoundCaptureNotifyImpl IDirectSoundCaptureNotifyImpl;
 typedef struct IDirectSound3DListenerImpl    IDirectSound3DListenerImpl;
 typedef struct IDirectSound3DBufferImpl      IDirectSound3DBufferImpl;
-typedef struct IKsBufferPropertySetImpl      IKsBufferPropertySetImpl;
-typedef struct IKsPrivatePropertySetImpl     IKsPrivatePropertySetImpl;
 typedef struct PrimaryBufferImpl             PrimaryBufferImpl;
 typedef struct SecondaryBufferImpl           SecondaryBufferImpl;
 typedef struct DirectSoundDevice             DirectSoundDevice;
@@ -195,8 +193,6 @@ struct IDirectSoundBufferImpl
     LONG                        ds3db_lVolume;
     BOOL                        ds3db_need_recalc;
 
-    /* IKsPropertySet fields */
-    IKsBufferPropertySetImpl*   iks;
     bitsconvertfunc convert;
     struct list entry;
 };
@@ -312,38 +308,6 @@ HRESULT IDirectSound3DListenerImpl_Create(
     IDirectSound3DListenerImpl **pdsl);
 
 /*****************************************************************************
- *  IKsBufferPropertySet implementation structure
- */
-struct IKsBufferPropertySetImpl
-{
-    /* IUnknown fields */
-    const IKsPropertySetVtbl   *lpVtbl;
-    LONG 			ref;
-    /* IKsPropertySetImpl fields */
-    IDirectSoundBufferImpl*	dsb;
-};
-
-HRESULT IKsBufferPropertySetImpl_Create(
-    IDirectSoundBufferImpl *dsb,
-    IKsBufferPropertySetImpl **piks);
-HRESULT IKsBufferPropertySetImpl_Destroy(
-    IKsBufferPropertySetImpl *piks);
-
-/*****************************************************************************
- *  IKsPrivatePropertySet implementation structure
- */
-struct IKsPrivatePropertySetImpl
-{
-    /* IUnknown fields */
-    const IKsPropertySetVtbl   *lpVtbl;
-    LONG 			ref;
-};
-
-HRESULT IKsPrivatePropertySetImpl_Create(
-    REFIID riid,
-    IKsPrivatePropertySetImpl **piks);
-
-/*****************************************************************************
  * IDirectSound3DBuffer implementation structure
  */
 struct IDirectSound3DBufferImpl
diff --git a/dlls/dsound/propset.c b/dlls/dsound/propset.c
deleted file mode 100644
index 85bbbae..0000000
--- a/dlls/dsound/propset.c
+++ /dev/null
@@ -1,1511 +0,0 @@
-/*  			DirectSound
- *
- * Copyright 1998 Marcus Meissner
- * Copyright 1998 Rob Riggs
- * Copyright 2000-2002 TransGaming Technologies, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#define COBJMACROS
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "mmsystem.h"
-#include "winternl.h"
-#include "winnls.h"
-#include "vfwmsgs.h"
-#include "mmddk.h"
-#include "wine/debug.h"
-#include "dsound.h"
-#include "dsdriver.h"
-#include "dsound_private.h"
-#include "dsconf.h"
-
-#ifdef NONAMELESSSTRUCT
-# define S(x) (x).s
-#else
-# define S(x) (x)
-#endif
-
-WINE_DEFAULT_DEBUG_CHANNEL(dsound);
-
-
-/*******************************************************************************
- *              IKsBufferPropertySet
- */
-
-/* IUnknown methods */
-static HRESULT WINAPI IKsBufferPropertySetImpl_QueryInterface(
-    LPKSPROPERTYSET iface,
-    REFIID riid,
-    LPVOID *ppobj )
-{
-    IKsBufferPropertySetImpl *This = (IKsBufferPropertySetImpl *)iface;
-    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
-
-    return IDirectSoundBuffer_QueryInterface((LPDIRECTSOUNDBUFFER8)This->dsb, riid, ppobj);
-}
-
-static ULONG WINAPI IKsBufferPropertySetImpl_AddRef(LPKSPROPERTYSET iface)
-{
-    IKsBufferPropertySetImpl *This = (IKsBufferPropertySetImpl *)iface;
-    ULONG ref = InterlockedIncrement(&(This->ref));
-    TRACE("(%p) ref was %d\n", This, ref - 1);
-    return ref;
-}
-
-static ULONG WINAPI IKsBufferPropertySetImpl_Release(LPKSPROPERTYSET iface)
-{
-    IKsBufferPropertySetImpl *This = (IKsBufferPropertySetImpl *)iface;
-    ULONG ref = InterlockedDecrement(&(This->ref));
-    TRACE("(%p) ref was %d\n", This, ref + 1);
-
-    if (!ref) {
-	This->dsb->iks = 0;
-	IDirectSoundBuffer_Release((LPDIRECTSOUND3DBUFFER)This->dsb);
-	HeapFree(GetProcessHeap(), 0, This);
-	TRACE("(%p) released\n", This);
-    }
-    return ref;
-}
-
-static HRESULT WINAPI IKsBufferPropertySetImpl_Get(
-    LPKSPROPERTYSET iface,
-    REFGUID guidPropSet,
-    ULONG dwPropID,
-    LPVOID pInstanceData,
-    ULONG cbInstanceData,
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    IKsBufferPropertySetImpl *This = (IKsBufferPropertySetImpl *)iface;
-    PIDSDRIVERPROPERTYSET ps;
-    TRACE("(iface=%p,guidPropSet=%s,dwPropID=%d,pInstanceData=%p,cbInstanceData=%d,pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-	This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned);
-
-    if (This->dsb->hwbuf) {
-        IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
-
-        if (ps) {
-	    DSPROPERTY prop;
-	    HRESULT hres;
-
-	    S(prop).Set = *guidPropSet;
-	    S(prop).Id = dwPropID;
-	    S(prop).Flags = 0;	/* unused */
-	    S(prop).InstanceId = (ULONG)This->dsb->device;
-
-	    hres = IDsDriverPropertySet_Get(ps, &prop, pInstanceData, cbInstanceData, pPropData, cbPropData, pcbReturned);
-
-	    IDsDriverPropertySet_Release(ps);
-
-	    return hres;
-        }
-    }
-
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static HRESULT WINAPI IKsBufferPropertySetImpl_Set(
-    LPKSPROPERTYSET iface,
-    REFGUID guidPropSet,
-    ULONG dwPropID,
-    LPVOID pInstanceData,
-    ULONG cbInstanceData,
-    LPVOID pPropData,
-    ULONG cbPropData )
-{
-    IKsBufferPropertySetImpl *This = (IKsBufferPropertySetImpl *)iface;
-    PIDSDRIVERPROPERTYSET ps;
-    TRACE("(%p,%s,%d,%p,%d,%p,%d)\n",This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData);
-
-    if (This->dsb->hwbuf) {
-        IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
-
-        if (ps) {
-	    DSPROPERTY prop;
-	    HRESULT hres;
-
-	    S(prop).Set = *guidPropSet;
-	    S(prop).Id = dwPropID;
-	    S(prop).Flags = 0;	/* unused */
-	    S(prop).InstanceId = (ULONG)This->dsb->device;
-	    hres = IDsDriverPropertySet_Set(ps,&prop,pInstanceData,cbInstanceData,pPropData,cbPropData);
-
-	    IDsDriverPropertySet_Release(ps);
-
-	    return hres;
-        }
-    }
-
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static HRESULT WINAPI IKsBufferPropertySetImpl_QuerySupport(
-    LPKSPROPERTYSET iface,
-    REFGUID guidPropSet,
-    ULONG dwPropID,
-    PULONG pTypeSupport )
-{
-    IKsBufferPropertySetImpl *This = (IKsBufferPropertySetImpl *)iface;
-    PIDSDRIVERPROPERTYSET ps;
-    TRACE("(%p,%s,%d,%p)\n",This,debugstr_guid(guidPropSet),dwPropID,pTypeSupport);
-
-    if (This->dsb->hwbuf) {
-        IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
-
-        if (ps) {
-            HRESULT hres;
-
-            hres = IDsDriverPropertySet_QuerySupport(ps,guidPropSet, dwPropID,pTypeSupport);
-
-            IDsDriverPropertySet_Release(ps);
-
-            return hres;
-        }
-    }
-
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static const IKsPropertySetVtbl iksbvt = {
-    IKsBufferPropertySetImpl_QueryInterface,
-    IKsBufferPropertySetImpl_AddRef,
-    IKsBufferPropertySetImpl_Release,
-    IKsBufferPropertySetImpl_Get,
-    IKsBufferPropertySetImpl_Set,
-    IKsBufferPropertySetImpl_QuerySupport
-};
-
-HRESULT IKsBufferPropertySetImpl_Create(
-    IDirectSoundBufferImpl *dsb,
-    IKsBufferPropertySetImpl **piks)
-{
-    IKsBufferPropertySetImpl *iks;
-    TRACE("(%p,%p)\n",dsb,piks);
-    *piks = NULL;
-
-    iks = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(*iks));
-    if (iks == 0) {
-        WARN("out of memory\n");
-        *piks = NULL;
-        return DSERR_OUTOFMEMORY;
-    }
-
-    iks->ref = 0;
-    iks->dsb = dsb;
-    dsb->iks = iks;
-    iks->lpVtbl = &iksbvt;
-
-    IDirectSoundBuffer_AddRef((LPDIRECTSOUNDBUFFER)dsb);
-
-    *piks = iks;
-    return S_OK;
-}
-
-HRESULT IKsBufferPropertySetImpl_Destroy(
-    IKsBufferPropertySetImpl *piks)
-{
-    TRACE("(%p)\n",piks);
-
-    while (IKsBufferPropertySetImpl_Release((LPKSPROPERTYSET)piks) > 0);
-
-    return S_OK;
-}
-
-/*******************************************************************************
- *              IKsPrivatePropertySet
- */
-
-/* IUnknown methods */
-static HRESULT WINAPI IKsPrivatePropertySetImpl_QueryInterface(
-    LPKSPROPERTYSET iface,
-    REFIID riid,
-    LPVOID *ppobj )
-{
-    IKsPrivatePropertySetImpl *This = (IKsPrivatePropertySetImpl *)iface;
-    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
-
-    if (IsEqualIID(riid, &IID_IUnknown) ||
-        IsEqualIID(riid, &IID_IKsPropertySet)) {
-        *ppobj = iface;
-        IUnknown_AddRef(iface);
-        return S_OK;
-    }
-    *ppobj = NULL;
-    return E_NOINTERFACE;
-}
-
-static ULONG WINAPI IKsPrivatePropertySetImpl_AddRef(LPKSPROPERTYSET iface)
-{
-    IKsPrivatePropertySetImpl *This = (IKsPrivatePropertySetImpl *)iface;
-    ULONG ref = InterlockedIncrement(&(This->ref));
-    TRACE("(%p) ref was %d\n", This, ref - 1);
-    return ref;
-}
-
-static ULONG WINAPI IKsPrivatePropertySetImpl_Release(LPKSPROPERTYSET iface)
-{
-    IKsPrivatePropertySetImpl *This = (IKsPrivatePropertySetImpl *)iface;
-    ULONG ref = InterlockedDecrement(&(This->ref));
-    TRACE("(%p) ref was %d\n", This, ref + 1);
-
-    if (!ref) {
-        HeapFree(GetProcessHeap(), 0, This);
-	TRACE("(%p) released\n", This);
-    }
-    return ref;
-}
-
-static HRESULT DSPROPERTY_WaveDeviceMappingA(
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    HRESULT hr = DSERR_INVALIDPARAM;
-    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA ppd;
-    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-	  pPropData,cbPropData,pcbReturned);
-
-    ppd = pPropData;
-
-    if (!ppd) {
-	WARN("invalid parameter: pPropData\n");
-	return DSERR_INVALIDPARAM;
-    }
-
-    if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
-        ULONG wod;
-        unsigned int wodn;
-        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
-        wodn = waveOutGetNumDevs();
-        for (wod = 0; wod < wodn; wod++) {
-            WAVEOUTCAPSA capsA;
-            MMRESULT res;
-            res = waveOutGetDevCapsA(wod, &capsA, sizeof(capsA));
-            if (res == MMSYSERR_NOERROR) {
-                if (lstrcmpA(capsA.szPname, ppd->DeviceName) == 0) {
-                    ppd->DeviceId = DSOUND_renderer_guids[wod];
-                    hr = DS_OK;
-                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
-                          ppd->DeviceName);
-                    break;
-                }
-            }
-        }
-    } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {
-        ULONG wid;
-        unsigned int widn;
-        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
-        widn = waveInGetNumDevs();
-        for (wid = 0; wid < widn; wid++) {
-            WAVEINCAPSA capsA;
-            MMRESULT res;
-            res = waveInGetDevCapsA(wid, &capsA, sizeof(capsA));
-            if (res == MMSYSERR_NOERROR) {
-                if (lstrcmpA(capsA.szPname, ppd->DeviceName) == 0) {
-                    ppd->DeviceId = DSOUND_capture_guids[wid];
-                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
-                          ppd->DeviceName);
-                    hr = DS_OK;
-                    break;
-                }
-            }
-        }
-    }
-
-    if (pcbReturned)
-	*pcbReturned = cbPropData;
-
-    return hr;
-}
-
-static HRESULT DSPROPERTY_WaveDeviceMappingW(
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    HRESULT hr = DSERR_INVALIDPARAM;
-    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA ppd;
-    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-	  pPropData,cbPropData,pcbReturned);
-
-    ppd = pPropData;
-
-    if (!ppd) {
-	WARN("invalid parameter: pPropData\n");
-	return DSERR_INVALIDPARAM;
-    }
-
-    if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
-        ULONG wod;
-        unsigned int wodn;
-        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
-        wodn = waveOutGetNumDevs();
-        for (wod = 0; wod < wodn; wod++) {
-            WAVEOUTCAPSW capsW;
-            MMRESULT res;
-            res = waveOutGetDevCapsW(wod, &capsW, sizeof(capsW));
-            if (res == MMSYSERR_NOERROR) {
-                if (lstrcmpW(capsW.szPname, ppd->DeviceName) == 0) {
-                    ppd->DeviceId = DSOUND_renderer_guids[wod];
-                    hr = DS_OK;
-                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
-                          debugstr_w(ppd->DeviceName));
-                    break;
-                }
-            }
-        }
-    } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {
-        ULONG wid;
-        unsigned int widn;
-        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
-        widn = waveInGetNumDevs();
-        for (wid = 0; wid < widn; wid++) {
-            WAVEINCAPSW capsW;
-            MMRESULT res;
-            res = waveInGetDevCapsW(wid, &capsW, sizeof(capsW));
-            if (res == MMSYSERR_NOERROR) {
-                if (lstrcmpW(capsW.szPname, ppd->DeviceName) == 0) {
-                    ppd->DeviceId = DSOUND_capture_guids[wid];
-                    hr = DS_OK;
-                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
-                          debugstr_w(ppd->DeviceName));
-                    break;
-                }
-            }
-        }
-    }
-
-    if (pcbReturned)
-        *pcbReturned = cbPropData;
-
-    return hr;
-}
-
-static HRESULT DSPROPERTY_Description1(
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    HRESULT err;
-    GUID dev_guid;
-    PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA ppd;
-    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-	pPropData,cbPropData,pcbReturned);
-
-    ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA) pPropData;
-
-    if (!ppd) {
-	WARN("invalid parameter: pPropData\n");
-	return DSERR_INVALIDPARAM;
-    }
-
-    TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId));
-    if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) {
-	/* default device of type specified by ppd->DataFlow */
-	if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {
-	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
-	} else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
-	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
-	} else {
-	    TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow);
-	}
-	FIXME("(pPropData=%p,cbPropData=%d,pcbReturned=%p) GUID_NULL not implemented!\n",
-	      pPropData,cbPropData,pcbReturned);
-	return E_PROP_ID_UNSUPPORTED;
-    }
-
-    ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-    GetDeviceID(&ppd->DeviceId, &dev_guid);
-
-    if ( IsEqualGUID( &ppd->DeviceId, &DSDEVID_DefaultPlayback) ||
-	 IsEqualGUID( &ppd->DeviceId, &DSDEVID_DefaultVoicePlayback) ) {
-	ULONG wod;
-	unsigned int wodn;
-	TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
-	ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-	wodn = waveOutGetNumDevs();
-	for (wod = 0; wod < wodn; wod++) {
-            if (IsEqualGUID( &dev_guid, &DSOUND_renderer_guids[wod] ) ) {
-                DSDRIVERDESC desc;
-                ppd->WaveDeviceId = wod;
-                ppd->Devnode = wod;
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSDRIVER drv = NULL;
-                    lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA));
-                    lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA));
-                    MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) );
-                    MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) );
-                    err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                    if (err == DS_OK && drv)
-                        ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                    else
-                        WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                    break;
-                } else {
-                    WARN("waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-                }
-            }
-	}
-    } else if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture) ||
-	        IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoiceCapture) ) {
-	ULONG wid;
-	unsigned int widn;
-	TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
-	ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-	widn = waveInGetNumDevs();
-	for (wid = 0; wid < widn; wid++) {
-            if (IsEqualGUID( &dev_guid, &DSOUND_capture_guids[wid] ) ) {
-                DSDRIVERDESC desc;
-                ppd->WaveDeviceId = wid;
-                ppd->Devnode = wid;
-                err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSCDRIVER drv;
-                    lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA));
-                    lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA));
-                    MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) );
-                    MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) );
-                    err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0));
-                    if (err == DS_OK && drv)
-                        ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                    else
-                        WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                    break;
-                } else {
-                    WARN("waveInMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-                }
-            }
-	}
-    } else {
-	BOOL found = FALSE;
-	ULONG wod;
-	unsigned int wodn;
-	/* given specific device so try the render devices first */
-	wodn = waveOutGetNumDevs();
-	for (wod = 0; wod < wodn; wod++) {
-            if (IsEqualGUID( &ppd->DeviceId, &DSOUND_renderer_guids[wod] ) ) {
-                DSDRIVERDESC desc;
-                TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
-                ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-                ppd->WaveDeviceId = wod;
-                ppd->Devnode = wod;
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSDRIVER drv = NULL;
-                    lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA));
-                    lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA));
-                    MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) );
-                    MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) );
-                    err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                    if (err == DS_OK && drv)
-                        ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                    else
-                        WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                    found = TRUE;
-                    break;
-                } else {
-                    WARN("waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-                }
-            }
-	}
-
-	if (found == FALSE) {
-            ULONG wid;
-            unsigned int widn;
-            /* given specific device so try the capture devices next */
-            widn = waveInGetNumDevs();
-            for (wid = 0; wid < widn; wid++) {
-                if (IsEqualGUID( &ppd->DeviceId, &DSOUND_capture_guids[wid] ) ) {
-                    DSDRIVERDESC desc;
-                    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
-                    ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-                    ppd->WaveDeviceId = wid;
-                    ppd->Devnode = wid;
-                    err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                    if (err == DS_OK) {
-                        PIDSDRIVER drv = NULL;
-                        lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA));
-                        lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA));
-                        MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) );
-                        MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) );
-                        err = mmErr(waveInMessage(UlongToHandle(wid), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                        if (err == DS_OK && drv)
-                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                        else
-                            WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                        found = TRUE;
-                        break;
-                    } else {
-                        WARN("waveInMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                        return E_PROP_ID_UNSUPPORTED;
-                    }
-                }
-            }
-
-            if (found == FALSE) {
-                WARN("device not found\n");
-                return E_PROP_ID_UNSUPPORTED;
-            }
-	}
-    }
-
-    if (pcbReturned) {
-	*pcbReturned = cbPropData;
-	TRACE("*pcbReturned=%d\n", *pcbReturned);
-    }
-
-    return S_OK;
-}
-
-static HRESULT DSPROPERTY_DescriptionA(
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA ppd = pPropData;
-    HRESULT err;
-    GUID dev_guid;
-    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-	  pPropData,cbPropData,pcbReturned);
-
-    TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId));
-    if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) {
-	/* default device of type specified by ppd->DataFlow */
-	if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {
-	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
-	} else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
-	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
-	} else {
-	    TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow);
-	}
-	FIXME("(pPropData=%p,cbPropData=%d,pcbReturned=%p) GUID_NULL not implemented!\n",
-	      pPropData,cbPropData,pcbReturned);
-	return E_PROP_ID_UNSUPPORTED;
-    }
-
-    ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-    GetDeviceID(&ppd->DeviceId, &dev_guid);
-
-    if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultPlayback) ||
-	 IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoicePlayback) ) {
-	ULONG wod;
-	unsigned int wodn;
-        if (IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultPlayback) )
-            TRACE("DSDEVID_DefaultPlayback\n");
-        else
-            TRACE("DSDEVID_DefaultVoicePlayback\n");
-	ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-	wodn = waveOutGetNumDevs();
-	for (wod = 0; wod < wodn; wod++) {
-            if (IsEqualGUID( &dev_guid, &DSOUND_renderer_guids[wod] ) ) {
-                DSDRIVERDESC desc;
-                ppd->WaveDeviceId = wod;
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSDRIVER drv = NULL;
-                    /* FIXME: this is a memory leak */
-                    CHAR * szDescription = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDesc) + 1);
-                    CHAR * szModule = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDrvname) + 1);
-                    CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,strlen("Interface") + 1);
-
-                    if (szDescription && szModule && szInterface) {
-                        strcpy(szDescription, desc.szDesc);
-                        strcpy(szModule, desc.szDrvname);
-                        strcpy(szInterface, "Interface");
-
-                        ppd->Description = szDescription;
-                        ppd->Module = szModule;
-                        ppd->Interface = szInterface;
-                        err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                        if (err == DS_OK && drv)
-                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                        else
-                            WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                        break;
-		    } else {
-                        WARN("no memory\n");
-                        HeapFree(GetProcessHeap(), 0, szDescription);
-                        HeapFree(GetProcessHeap(), 0, szModule);
-                        HeapFree(GetProcessHeap(), 0, szInterface);
-                        return E_OUTOFMEMORY;
-		    }
-                } else {
-                    WARN("waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-		}
-            }
-	}
-    } else if (IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture) ||
-	       IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoiceCapture) ) {
-	ULONG wid;
-	unsigned int widn;
-        if (IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture) )
-            TRACE("DSDEVID_DefaultCapture\n");
-        else
-            TRACE("DSDEVID_DefaultVoiceCapture\n");
-	ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-	widn = waveInGetNumDevs();
-	for (wid = 0; wid < widn; wid++) {
-            if (IsEqualGUID( &dev_guid, &DSOUND_capture_guids[wid] ) ) {
-                DSDRIVERDESC desc;
-                ppd->WaveDeviceId = wid;
-                err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSCDRIVER drv;
-                    /* FIXME: this is a memory leak */
-                    CHAR * szDescription = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDesc) + 1);
-                    CHAR * szModule = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDrvname) + 1);
-                    CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,strlen("Interface") + 1);
-
-                    if (szDescription && szModule && szInterface) {
-                        strcpy(szDescription, desc.szDesc);
-                        strcpy(szModule, desc.szDrvname);
-                        strcpy(szInterface, "Interface");
-
-                        ppd->Description = szDescription;
-                        ppd->Module = szModule;
-                        ppd->Interface = szInterface;
-                        err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0));
-                        if (err == DS_OK && drv)
-                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                        else
-                            WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                        break;
-		    } else {
-                        WARN("no memory\n");
-                        HeapFree(GetProcessHeap(), 0, szDescription);
-                        HeapFree(GetProcessHeap(), 0, szModule);
-                        HeapFree(GetProcessHeap(), 0, szInterface);
-                        return E_OUTOFMEMORY;
-		    }
-                } else {
-                    WARN("waveInMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-		}
-            }
-	}
-    } else {
-	BOOL found = FALSE;
-	ULONG wod;
-	unsigned int wodn;
-	/* given specific device so try the render devices first */
-        TRACE("Checking renderer devices\n");
-	wodn = waveOutGetNumDevs();
-	for (wod = 0; wod < wodn; wod++) {
-            if (IsEqualGUID( &ppd->DeviceId, &DSOUND_renderer_guids[wod] ) ) {
-                DSDRIVERDESC desc;
-                TRACE("DSOUND_renderer_guids[%d]\n", wod);
-                ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-                ppd->WaveDeviceId = wod;
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSDRIVER drv = NULL;
-                    /* FIXME: this is a memory leak */
-                    CHAR * szDescription = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDesc) + 1);
-                    CHAR * szModule = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDrvname) + 1);
-                    CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,strlen("Interface") + 1);
-
-                    if (szDescription && szModule && szInterface) {
-			strcpy(szDescription, desc.szDesc);
-			strcpy(szModule, desc.szDrvname);
-			strcpy(szInterface, "Interface");
-
-			ppd->Description = szDescription;
-			ppd->Module = szModule;
-			ppd->Interface = szInterface;
-			err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-			if (err == DS_OK && drv)
-				ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                        else
-                            WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-			found = TRUE;
-			break;
-		    } else {
-                        WARN("no memory\n");
-                        HeapFree(GetProcessHeap(), 0, szDescription);
-                        HeapFree(GetProcessHeap(), 0, szModule);
-                        HeapFree(GetProcessHeap(), 0, szInterface);
-                        return E_OUTOFMEMORY;
-		    }
-                } else {
-                    WARN("waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-		}
-            }
-        }
-
-        if (found == FALSE) {
-            ULONG wid;
-            unsigned int widn;
-            TRACE("Checking capture devices\n");
-            ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-            widn = waveInGetNumDevs();
-            for (wid = 0; wid < widn; wid++) {
-                if (IsEqualGUID( &ppd->DeviceId, &DSOUND_capture_guids[wid] ) ) {
-                    DSDRIVERDESC desc;
-                    TRACE("DSOUND_capture_guids[%d]\n", wid);
-                    ppd->WaveDeviceId = wid;
-                    err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                    if (err == DS_OK) {
-                        PIDSCDRIVER drv;
-                        /* FIXME: this is a memory leak */
-                        CHAR * szDescription = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDesc) + 1);
-                        CHAR * szModule = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDrvname) + 1);
-                        CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,strlen("Interface") + 1);
-
-                        if (szDescription && szModule && szInterface) {
-                            strcpy(szDescription, desc.szDesc);
-                            strcpy(szModule, desc.szDrvname);
-                            strcpy(szInterface, "Interface");
-
-                            ppd->Description = szDescription;
-                            ppd->Module = szModule;
-                            ppd->Interface = szInterface;
-                            err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0));
-                            if (err == DS_OK && drv)
-                                ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                            else
-                                WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                            found = TRUE;
-                            break;
-                        } else {
-                            WARN("no memory\n");
-                            HeapFree(GetProcessHeap(), 0, szDescription);
-                            HeapFree(GetProcessHeap(), 0, szModule);
-                            HeapFree(GetProcessHeap(), 0, szInterface);
-                            return E_OUTOFMEMORY;
-                        }
-                    } else {
-                        WARN("waveInMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                        return E_PROP_ID_UNSUPPORTED;
-                    }
-                }
-            }
-	}
-
-	if (found == FALSE) {
-	    WARN("device not found\n");
-	    return E_PROP_ID_UNSUPPORTED;
-	}
-    }
-
-    if (pcbReturned) {
-	*pcbReturned = cbPropData;
-	TRACE("*pcbReturned=%d\n", *pcbReturned);
-    }
-
-    return S_OK;
-}
-
-static HRESULT DSPROPERTY_DescriptionW(
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA ppd = pPropData;
-    HRESULT err;
-    GUID dev_guid;
-    TRACE("pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-	  pPropData,cbPropData,pcbReturned);
-
-    TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId));
-    if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) {
-	/* default device of type specified by ppd->DataFlow */
-	if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {
-	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
-	} else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
-	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
-	} else {
-	    TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow);
-	}
-	FIXME("(pPropData=%p,cbPropData=%d,pcbReturned=%p) GUID_NULL not implemented!\n",
-	      pPropData,cbPropData,pcbReturned);
-	return E_PROP_ID_UNSUPPORTED;
-    }
-
-    ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-    GetDeviceID(&ppd->DeviceId, &dev_guid);
-
-    if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultPlayback) ||
-	 IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoicePlayback) ) {
-	ULONG wod;
-	unsigned int wodn;
-        if (IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultPlayback) )
-            TRACE("DSDEVID_DefaultPlayback\n");
-        else
-            TRACE("DSDEVID_DefaultVoicePlayback\n");
-	ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-	wodn = waveOutGetNumDevs();
-	for (wod = 0; wod < wodn; wod++) {
-            if (IsEqualGUID( &dev_guid, &DSOUND_renderer_guids[wod] ) ) {
-                DSDRIVERDESC desc;
-                TRACE("DSOUND_renderer_guids[%d]\n", wod);
-                ppd->WaveDeviceId = wod;
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSDRIVER drv = NULL;
-                    /* FIXME: this is a memory leak */
-                    WCHAR * wDescription = HeapAlloc(GetProcessHeap(),0,0x200);
-                    WCHAR * wModule = HeapAlloc(GetProcessHeap(),0,0x200);
-                    WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,0x200);
-
-                    if (wDescription && wModule && wInterface) {
-                        MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, wDescription, 0x100  );
-                        MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, wModule, 0x100 );
-                        MultiByteToWideChar( CP_ACP, 0, "Interface", -1, wInterface, 0x100 );
-
-                        ppd->Description = wDescription;
-                        ppd->Module = wModule;
-                        ppd->Interface = wInterface;
-                        err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                        if (err == DS_OK && drv)
-                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                        else
-                            WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                        break;
-		    } else {
-                        WARN("no memory\n");
-                        HeapFree(GetProcessHeap(), 0, wDescription);
-                        HeapFree(GetProcessHeap(), 0, wModule);
-                        HeapFree(GetProcessHeap(), 0, wInterface);
-                        return E_OUTOFMEMORY;
-		    }
-                } else {
-                    WARN("waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-		}
-            }
-	}
-    } else if (IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture) ||
-	       IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoiceCapture) ) {
-	ULONG wid;
-	unsigned int widn;
-        if (IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture))
-            TRACE("DSDEVID_DefaultCapture\n");
-        else
-            TRACE("DSDEVID_DefaultVoiceCapture\n");
-	ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-	widn = waveInGetNumDevs();
-	for (wid = 0; wid < widn; wid++) {
-            if (IsEqualGUID( &dev_guid, &DSOUND_capture_guids[wid] ) ) {
-                DSDRIVERDESC desc;
-                ppd->WaveDeviceId = wid;
-                err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSCDRIVER drv;
-                    /* FIXME: this is a memory leak */
-                    WCHAR * wDescription = HeapAlloc(GetProcessHeap(),0,0x200);
-                    WCHAR * wModule = HeapAlloc(GetProcessHeap(),0,0x200);
-                    WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,0x200);
-
-                    if (wDescription && wModule && wInterface) {
-                        MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, wDescription, 0x100  );
-                        MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, wModule, 0x100 );
-                        MultiByteToWideChar( CP_ACP, 0, "Interface", -1, wInterface, 0x100 );
-
-                        ppd->Description = wDescription;
-                        ppd->Module = wModule;
-                        ppd->Interface = wInterface;
-                        err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0));
-                        if (err == DS_OK && drv)
-                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                        else
-                            WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-			break;
-		    } else {
-                        WARN("no memory\n");
-                        HeapFree(GetProcessHeap(), 0, wDescription);
-                        HeapFree(GetProcessHeap(), 0, wModule);
-                        HeapFree(GetProcessHeap(), 0, wInterface);
-                        return E_OUTOFMEMORY;
-		    }
-                } else {
-                    WARN("waveInMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-		}
-            }
-	}
-    } else {
-	BOOL found = FALSE;
-	ULONG wod;
-	unsigned int wodn;
-        TRACE("Checking renderer devices\n");
-	/* given specific device so try the render devices first */
-	wodn = waveOutGetNumDevs();
-	for (wod = 0; wod < wodn; wod++) {
-            if (IsEqualGUID( &ppd->DeviceId, &DSOUND_renderer_guids[wod] ) ) {
-                DSDRIVERDESC desc;
-                TRACE("DSOUND_renderer_guids[%d]\n", wod);
-                ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-                ppd->WaveDeviceId = wod;
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSDRIVER drv = NULL;
-                    /* FIXME: this is a memory leak */
-                    WCHAR * wDescription = HeapAlloc(GetProcessHeap(),0,0x200);
-                    WCHAR * wModule = HeapAlloc(GetProcessHeap(),0,0x200);
-                    WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,0x200);
-
-                    if (wDescription && wModule && wInterface) {
-			MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, wDescription, 0x100  );
-			MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, wModule, 0x100 );
-			MultiByteToWideChar( CP_ACP, 0, "Interface", -1, wInterface, 0x100 );
-
-			ppd->Description = wDescription;
-			ppd->Module = wModule;
-			ppd->Interface = wInterface;
-			err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-			if (err == DS_OK && drv)
-                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                        else
-                            WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-			found = TRUE;
-			break;
-		    } else {
-                        WARN("no memory\n");
-                        HeapFree(GetProcessHeap(), 0, wDescription);
-                        HeapFree(GetProcessHeap(), 0, wModule);
-                        HeapFree(GetProcessHeap(), 0, wInterface);
-                        return E_OUTOFMEMORY;
-		    }
-                } else {
-                    WARN("waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                    return E_PROP_ID_UNSUPPORTED;
-		}
-            }
-        }
-
-        if (found == FALSE) {
-            ULONG wid;
-            unsigned int widn;
-            TRACE("Checking capture devices\n");
-            ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-            widn = waveInGetNumDevs();
-            for (wid = 0; wid < widn; wid++) {
-                if (IsEqualGUID( &dev_guid, &DSOUND_capture_guids[wid] ) ) {
-                    DSDRIVERDESC desc;
-                    TRACE("DSOUND_capture_guids[%d]\n", wid);
-                    ppd->WaveDeviceId = wid;
-                    err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                    if (err == DS_OK) {
-                        PIDSCDRIVER drv;
-                        /* FIXME: this is a memory leak */
-                        WCHAR * wDescription = HeapAlloc(GetProcessHeap(),0,0x200);
-                        WCHAR * wModule = HeapAlloc(GetProcessHeap(),0,0x200);
-                        WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,0x200);
-
-                        if (wDescription && wModule && wInterface) {
-                            MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, wDescription, 0x100  );
-                            MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, wModule, 0x100 );
-                            MultiByteToWideChar( CP_ACP, 0, "Interface", -1, wInterface, 0x100 );
-
-                            ppd->Description = wDescription;
-                            ppd->Module = wModule;
-                            ppd->Interface = wInterface;
-                            err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0));
-                            if (err == DS_OK && drv)
-                                ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                            else
-                                WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-                            found = TRUE;
-                            break;
-                        } else {
-                            WARN("no memory\n");
-                            HeapFree(GetProcessHeap(), 0, wDescription);
-                            HeapFree(GetProcessHeap(), 0, wModule);
-                            HeapFree(GetProcessHeap(), 0, wInterface);
-                            return E_OUTOFMEMORY;
-                        }
-                    } else {
-                        WARN("waveInMessage(DRV_QUERYDSOUNDDESC) failed\n");
-                        return E_PROP_ID_UNSUPPORTED;
-                    }
-                }
-            }
-        }
-
-	if (found == FALSE) {
-	    WARN("device not found\n");
-	    return E_PROP_ID_UNSUPPORTED;
-	}
-    }
-
-    if (pcbReturned) {
-	*pcbReturned = cbPropData;
-	TRACE("*pcbReturned=%d\n", *pcbReturned);
-    }
-
-    return S_OK;
-}
-
-static HRESULT DSPROPERTY_Enumerate1(
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA) pPropData;
-    HRESULT err;
-    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-          pPropData,cbPropData,pcbReturned);
-
-    if (ppd) {
-        if (ppd->Callback) {
-            unsigned devs, wod, wid;
-            DSDRIVERDESC desc;
-            DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA data;
-
-            devs = waveOutGetNumDevs();
-            for (wod = 0; wod < devs; ++wod) {
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSCDRIVER drv;
-                    ZeroMemory(&data, sizeof(data));
-                    data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-                    data.WaveDeviceId = wod;
-                    data.DeviceId = DSOUND_renderer_guids[wod];
-                    lstrcpynA(data.DescriptionA, desc.szDesc, sizeof(data.DescriptionA));
-                    lstrcpynA(data.ModuleA, desc.szDrvname, sizeof(data.ModuleA));
-
-                    MultiByteToWideChar( CP_ACP, 0, data.DescriptionA, -1, data.DescriptionW, sizeof(data.DescriptionW)/sizeof(WCHAR) );
-                    MultiByteToWideChar( CP_ACP, 0, data.ModuleA, -1, data.ModuleW, sizeof(data.ModuleW)/sizeof(WCHAR) );
-
-                    data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-                    err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                    if (err == DS_OK && drv)
-                        data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                    else
-                        WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-
-                    TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
-                    (ppd->Callback)(&data, ppd->Context);
-                }
-            }
-
-            devs = waveInGetNumDevs();
-            for (wid = 0; wid < devs; ++wid) {
-                err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    PIDSCDRIVER drv;
-                    ZeroMemory(&data, sizeof(data));
-                    data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-                    data.WaveDeviceId = wid;
-                    data.DeviceId = DSOUND_capture_guids[wid];
-                    lstrcpynA(data.DescriptionA, desc.szDesc, sizeof(data.DescriptionA));
-                    lstrcpynA(data.ModuleA, desc.szDrvname, sizeof(data.ModuleA));
-
-                    MultiByteToWideChar( CP_ACP, 0, data.DescriptionA, -1, data.DescriptionW, sizeof(data.DescriptionW)/sizeof(WCHAR) );
-                    MultiByteToWideChar( CP_ACP, 0, data.ModuleA, -1, data.ModuleW, sizeof(data.ModuleW)/sizeof(WCHAR) );
-
-                    data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-                    err = mmErr(waveInMessage(UlongToHandle(wid), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                    if (err == DS_OK && drv)
-                        data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                    else
-                        WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-
-                    TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
-                    (ppd->Callback)(&data, ppd->Context);
-                }
-            }
-
-            return S_OK;
-        }
-    }
-
-    if (pcbReturned) {
-        *pcbReturned = 0;
-        FIXME("*pcbReturned=%d\n", *pcbReturned);
-    }
-
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static HRESULT DSPROPERTY_EnumerateA(
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA ppd = pPropData;
-    HRESULT err;
-    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-          pPropData,cbPropData,pcbReturned);
-
-    if (ppd) {
-        if (ppd->Callback) {
-            unsigned devs, wod, wid;
-            DSDRIVERDESC desc;
-            DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA data;
-
-            devs = waveOutGetNumDevs();
-            for (wod = 0; wod < devs; ++wod) {
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    DWORD size;
-                    err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDEVICEINTERFACESIZE,(DWORD_PTR)&size,0));
-                    if (err == DS_OK) {
-                        WCHAR * nameW = HeapAlloc(GetProcessHeap(),0,size);
-                        if (nameW) {
-                            err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDEVICEINTERFACE,(DWORD_PTR)nameW,size));
-                            if (err == DS_OK) {
-                                CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,size/sizeof(WCHAR));
-                                if (szInterface) {
-                                    PIDSCDRIVER drv;
-                                    ZeroMemory(&data, sizeof(data));
-                                    data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-                                    data.WaveDeviceId = wod;
-                                    data.DeviceId = DSOUND_renderer_guids[wod];
-                                    data.Description = desc.szDesc;
-                                    data.Module = desc.szDrvname;
-                                    WideCharToMultiByte( CP_ACP, 0, nameW, size/sizeof(WCHAR), szInterface, size/sizeof(WCHAR), NULL, NULL );
-                                    data.Interface = szInterface;
-
-                                    data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-                                    err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                                    if (err == DS_OK && drv)
-                                        data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                                    else
-                                        WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-
-                                    TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
-                                    (ppd->Callback)(&data, ppd->Context);
-                                }
-                                HeapFree(GetProcessHeap(),0,szInterface);
-                            }
-                        }
-                        HeapFree(GetProcessHeap(),0,nameW);
-                    }
-                }
-            }
-
-            devs = waveInGetNumDevs();
-            for (wid = 0; wid < devs; ++wid) {
-                err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    DWORD size;
-                    err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDEVICEINTERFACESIZE,(DWORD_PTR)&size,0));
-                    if (err == DS_OK) {
-                        WCHAR * nameW = HeapAlloc(GetProcessHeap(),0,size);
-                        if (nameW) {
-                            err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDEVICEINTERFACE,(DWORD_PTR)nameW,size));
-                            if (err == DS_OK) {
-                                CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,size/sizeof(WCHAR));
-                                if (szInterface) {
-                                    PIDSCDRIVER drv;
-                                    ZeroMemory(&data, sizeof(data));
-                                    data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-                                    data.WaveDeviceId = wid;
-                                    data.DeviceId = DSOUND_capture_guids[wid];
-                                    data.Description = desc.szDesc;
-                                    data.Module = desc.szDrvname;
-                                    WideCharToMultiByte( CP_ACP, 0, nameW, size/sizeof(WCHAR), szInterface, size/sizeof(WCHAR), NULL, NULL );
-                                    data.Interface = szInterface;
-
-                                    data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-                                    err = mmErr(waveInMessage(UlongToHandle(wid), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                                    if (err == DS_OK && drv)
-                                        data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                                    else
-                                        WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-
-                                    TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
-                                    (ppd->Callback)(&data, ppd->Context);
-                                }
-                                HeapFree(GetProcessHeap(),0,szInterface);
-                            }
-                        }
-                        HeapFree(GetProcessHeap(),0,nameW);
-                    }
-                }
-            }
-
-            return S_OK;
-        }
-    }
-
-    if (pcbReturned) {
-        *pcbReturned = 0;
-        FIXME("*pcbReturned=%d\n", *pcbReturned);
-    }
-
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static HRESULT DSPROPERTY_EnumerateW(
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA ppd = pPropData;
-    HRESULT err;
-    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-          pPropData,cbPropData,pcbReturned);
-
-    if (ppd) {
-        if (ppd->Callback) {
-            unsigned devs, wod, wid;
-            DSDRIVERDESC desc;
-            DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data;
-
-            devs = waveOutGetNumDevs();
-            for (wod = 0; wod < devs; ++wod) {
-                err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    WCHAR * wDescription = HeapAlloc(GetProcessHeap(),0,0x200);
-                    WCHAR * wModule = HeapAlloc(GetProcessHeap(),0,0x200);
-                    if (wDescription && wModule) {
-                        DWORD size;
-                        err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDEVICEINTERFACESIZE, (DWORD_PTR)&size, 0));
-                        if (err == DS_OK) {
-                            WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,size);
-                            if (wInterface) {
-                                err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDEVICEINTERFACE, (DWORD_PTR)wInterface, size));
-                                if (err == DS_OK) {
-                                    PIDSCDRIVER drv;
-                                    ZeroMemory(&data, sizeof(data));
-                                    data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
-                                    data.WaveDeviceId = wod;
-                                    data.DeviceId = DSOUND_renderer_guids[wod];
-
-                                    MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, wDescription, 0x100 );
-                                    MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, wModule, 0x100 );
-
-                                    data.Description = wDescription;
-                                    data.Module = wModule;
-                                    data.Interface = wInterface;
-
-                                    data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-                                    err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                                    if (err == DS_OK && drv)
-                                        data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                                    else
-                                        WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-
-                                    TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
-                                    (ppd->Callback)(&data, ppd->Context);
-                                    }
-                            }
-                            HeapFree(GetProcessHeap(),0,wInterface);
-                        }
-                    }
-                    HeapFree(GetProcessHeap(),0,wDescription);
-                    HeapFree(GetProcessHeap(),0,wModule);
-                }
-            }
-
-            devs = waveInGetNumDevs();
-            for (wid = 0; wid < devs; ++wid) {
-                err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
-                if (err == DS_OK) {
-                    WCHAR * wDescription = HeapAlloc(GetProcessHeap(),0,0x200);
-                    WCHAR * wModule = HeapAlloc(GetProcessHeap(),0,0x200);
-                    if (wDescription && wModule) {
-                        DWORD size;
-                        err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDEVICEINTERFACESIZE, (DWORD_PTR)&size, 0));
-                        if (err == DS_OK) {
-                            WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,size);
-                            if (wInterface) {
-                                err = mmErr(waveInMessage(UlongToHandle(wid), DRV_QUERYDEVICEINTERFACE, (DWORD_PTR)wInterface, size));
-                                if (err == DS_OK) {
-                                    PIDSCDRIVER drv;
-                                    ZeroMemory(&data, sizeof(data));
-                                    data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
-                                    data.WaveDeviceId = wid;
-                                    data.DeviceId = DSOUND_capture_guids[wid];
-
-                                    MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, wDescription, 0x100 );
-                                    MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, wModule, 0x100 );
-
-                                    data.Description = wDescription;
-                                    data.Module = wModule;
-                                    data.Interface = wInterface;
-                                    data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
-                                    err = mmErr(waveInMessage(UlongToHandle(wid), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));
-                                    if (err == DS_OK && drv)
-                                        data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
-                                    else
-                                        WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
-
-                                    TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
-                                    (ppd->Callback)(&data, ppd->Context);
-                                }
-                            }
-                            HeapFree(GetProcessHeap(),0,wInterface);
-                        }
-                    }
-                    HeapFree(GetProcessHeap(),0,wDescription);
-                    HeapFree(GetProcessHeap(),0,wModule);
-                }
-            }
-
-            return S_OK;
-        }
-    }
-
-    if (pcbReturned) {
-        *pcbReturned = 0;
-        FIXME("*pcbReturned=%d\n", *pcbReturned);
-    }
-
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static HRESULT WINAPI IKsPrivatePropertySetImpl_Get(
-    LPKSPROPERTYSET iface,
-    REFGUID guidPropSet,
-    ULONG dwPropID,
-    LPVOID pInstanceData,
-    ULONG cbInstanceData,
-    LPVOID pPropData,
-    ULONG cbPropData,
-    PULONG pcbReturned )
-{
-    IKsPrivatePropertySetImpl *This = (IKsPrivatePropertySetImpl *)iface;
-    TRACE("(iface=%p,guidPropSet=%s,dwPropID=%d,pInstanceData=%p,cbInstanceData=%d,pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-          This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned);
-
-    if ( IsEqualGUID( &DSPROPSETID_DirectSoundDevice, guidPropSet) ) {
-        switch (dwPropID) {
-        case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A:
-            return DSPROPERTY_WaveDeviceMappingA(pPropData,cbPropData,pcbReturned);
-        case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1:
-            return DSPROPERTY_Description1(pPropData,cbPropData,pcbReturned);
-        case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1:
-            return DSPROPERTY_Enumerate1(pPropData,cbPropData,pcbReturned);
-        case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W:
-            return DSPROPERTY_WaveDeviceMappingW(pPropData,cbPropData,pcbReturned);
-        case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A:
-            return DSPROPERTY_DescriptionA(pPropData,cbPropData,pcbReturned);
-        case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W:
-            return DSPROPERTY_DescriptionW(pPropData,cbPropData,pcbReturned);
-        case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A:
-            return DSPROPERTY_EnumerateA(pPropData,cbPropData,pcbReturned);
-        case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W:
-            return DSPROPERTY_EnumerateW(pPropData,cbPropData,pcbReturned);
-        default:
-            FIXME("unsupported ID: %d\n",dwPropID);
-            break;
-        }
-    } else {
-        FIXME("unsupported property: %s\n",debugstr_guid(guidPropSet));
-    }
-
-    if (pcbReturned) {
-        *pcbReturned = 0;
-        FIXME("*pcbReturned=%d\n", *pcbReturned);
-    }
-
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static HRESULT WINAPI IKsPrivatePropertySetImpl_Set(
-    LPKSPROPERTYSET iface,
-    REFGUID guidPropSet,
-    ULONG dwPropID,
-    LPVOID pInstanceData,
-    ULONG cbInstanceData,
-    LPVOID pPropData,
-    ULONG cbPropData )
-{
-    IKsPrivatePropertySetImpl *This = (IKsPrivatePropertySetImpl *)iface;
-
-    FIXME("(%p,%s,%d,%p,%d,%p,%d), stub!\n",This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData);
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static HRESULT WINAPI IKsPrivatePropertySetImpl_QuerySupport(
-    LPKSPROPERTYSET iface,
-    REFGUID guidPropSet,
-    ULONG dwPropID,
-    PULONG pTypeSupport )
-{
-    IKsPrivatePropertySetImpl *This = (IKsPrivatePropertySetImpl *)iface;
-    TRACE("(%p,%s,%d,%p)\n",This,debugstr_guid(guidPropSet),dwPropID,pTypeSupport);
-
-    if ( IsEqualGUID( &DSPROPSETID_DirectSoundDevice, guidPropSet) ) {
-	switch (dwPropID) {
-	case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A:
-	    *pTypeSupport = KSPROPERTY_SUPPORT_GET;
-	    return S_OK;
-	case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1:
-	    *pTypeSupport = KSPROPERTY_SUPPORT_GET;
-	    return S_OK;
-	case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1:
-	    *pTypeSupport = KSPROPERTY_SUPPORT_GET;
-	    return S_OK;
-	case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W:
-	    *pTypeSupport = KSPROPERTY_SUPPORT_GET;
-	    return S_OK;
-	case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A:
-	    *pTypeSupport = KSPROPERTY_SUPPORT_GET;
-	    return S_OK;
-	case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W:
-	    *pTypeSupport = KSPROPERTY_SUPPORT_GET;
-	    return S_OK;
-	case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A:
-	    *pTypeSupport = KSPROPERTY_SUPPORT_GET;
-	    return S_OK;
-	case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W:
-	    *pTypeSupport = KSPROPERTY_SUPPORT_GET;
-	    return S_OK;
-	default:
-            FIXME("unsupported ID: %d\n",dwPropID);
-	    break;
-	}
-    } else {
-	FIXME("unsupported property: %s\n",debugstr_guid(guidPropSet));
-    }
-
-    return E_PROP_ID_UNSUPPORTED;
-}
-
-static const IKsPropertySetVtbl ikspvt = {
-    IKsPrivatePropertySetImpl_QueryInterface,
-    IKsPrivatePropertySetImpl_AddRef,
-    IKsPrivatePropertySetImpl_Release,
-    IKsPrivatePropertySetImpl_Get,
-    IKsPrivatePropertySetImpl_Set,
-    IKsPrivatePropertySetImpl_QuerySupport
-};
-
-HRESULT IKsPrivatePropertySetImpl_Create(
-    REFIID riid,
-    IKsPrivatePropertySetImpl **piks)
-{
-    IKsPrivatePropertySetImpl *iks;
-    TRACE("(%s, %p)\n", debugstr_guid(riid), piks);
-
-    if (!IsEqualIID(riid, &IID_IUnknown) &&
-        !IsEqualIID(riid, &IID_IKsPropertySet)) {
-        *piks = 0;
-        return E_NOINTERFACE;
-    }
-
-    iks = HeapAlloc(GetProcessHeap(),0,sizeof(*iks));
-    iks->ref = 1;
-    iks->lpVtbl = &ikspvt;
-
-    *piks = iks;
-    return S_OK;
-}
diff --git a/dlls/dsound/tests/propset.c b/dlls/dsound/tests/propset.c
index 70a8e0d..45ca03a 100644
--- a/dlls/dsound/tests/propset.c
+++ b/dlls/dsound/tests/propset.c
@@ -294,7 +294,7 @@ static void propset_private_tests(void)
     /* direct sound private does have an IKsPropertySet */
     rc = IClassFactory_CreateInstance(pcf, NULL, &IID_IKsPropertySet,
                                      (void **)(&pps));
-    ok(rc==DS_OK, "CreateInstance(IID_IKsPropertySet) failed: %08x\n",
+    todo_wine ok(rc==DS_OK, "CreateInstance(IID_IKsPropertySet) failed: %08x\n",
        rc);
     if (rc!=DS_OK)
         return;
-- 
1.6.5.3




More information about the wine-patches mailing list