Seems reasonable, but could you put together some tests to show this? Andrew
On Sat, Sep 28, 2013 at 10:41:15AM +0200, Maarten Lankhorst wrote: > diff --git a/dlls/dsound/capture.c b/dlls/dsound/capture.c > index 40f1702..0fe300c 100644 > --- a/dlls/dsound/capture.c > +++ b/dlls/dsound/capture.c > @@ -51,7 +51,7 @@ typedef struct IDirectSoundCaptureBufferImpl > IDirectSoundCaptureBuffer8 IDirectSoundCaptureBuffer8_iface; > IDirectSoundNotify IDirectSoundNotify_iface; > LONG numIfaces; /* "in use interfaces" > refcount */ > - LONG ref, refn; > + LONG ref, refn, has_dsc8; > /* IDirectSoundCaptureBuffer fields */ > DirectSoundCaptureDevice *device; > DSCBUFFERDESC *pdscbd; > @@ -241,8 +241,9 @@ static HRESULT WINAPI > IDirectSoundCaptureBufferImpl_QueryInterface(IDirectSoundC > > *ppobj = NULL; > > - if ( IsEqualGUID( &IID_IDirectSoundCaptureBuffer, riid ) || > - IsEqualGUID( &IID_IDirectSoundCaptureBuffer8, riid ) ) { > + if ( IsEqualIID( &IID_IUnknown, riid ) || > + IsEqualIID( &IID_IDirectSoundCaptureBuffer, riid ) || > + (This->has_dsc8 && IsEqualIID( &IID_IDirectSoundCaptureBuffer8, > riid )) ) { > IDirectSoundCaptureBuffer8_AddRef(iface); > *ppobj = iface; > return S_OK; > @@ -1239,6 +1240,8 @@ static HRESULT WINAPI > IDirectSoundCaptureImpl_CreateCaptureBuffer(IDirectSoundCa > > if (hr != DS_OK) > WARN("IDirectSoundCaptureBufferImpl_Create failed\n"); > + else > + This->device->capture_buffer->has_dsc8 = This->has_dsc8; > > return hr; > } > > >