BOOL CALLBACK callback(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA data,
LPVOID context)
{
+ trace(" found device:\n");
+ trace(" Type: %s\n",
+ data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" :
+ data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" :
+ data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown");
+ trace(" DataFlow: %s\n",
+ data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" :
+ data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ?
+ "Capture" : "Unknown");
+ trace(" DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
+ data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3,
+ data->DeviceId.Data4[0],data->DeviceId.Data4[1],
+ data->DeviceId.Data4[2],data->DeviceId.Data4[3],
+ data->DeviceId.Data4[4],data->DeviceId.Data4[5],
+ data->DeviceId.Data4[6],data->DeviceId.Data4[7]);
+ trace(" Description: %s\n", data->Description);
+ trace(" Module: %s\n", data->Module);
+ trace(" Interface: %s\n", data->Interface);
+ trace(" WaveDeviceId: %ld\n", data->WaveDeviceId);
+
+ return TRUE;
+}
+
+BOOL CALLBACK callback1(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA data,
+ LPVOID context)
+{
+ char descriptionA[0x100];
+ char moduleA[MAX_PATH];
+
+ trace(" found device:\n");
+ trace(" Type: %s\n",
+ data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" :
+ data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" :
+ data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown");
+ trace(" DataFlow: %s\n",
+ data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" :
+ data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ?
+ "Capture" : "Unknown");
+ trace(" DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
+ data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3,
+ data->DeviceId.Data4[0],data->DeviceId.Data4[1],
+ data->DeviceId.Data4[2],data->DeviceId.Data4[3],
+ data->DeviceId.Data4[4],data->DeviceId.Data4[5],
+ data->DeviceId.Data4[6],data->DeviceId.Data4[7]);
+ trace(" DescriptionA: %s\n", data->DescriptionA);
+ WideCharToMultiByte(CP_ACP, 0, data->DescriptionW, -1, descriptionA, sizeof(descriptionA), NULL, NULL);
+ trace(" DescriptionW: %s\n", descriptionA);
+ trace(" ModuleA: %s\n", data->ModuleA);
+ WideCharToMultiByte(CP_ACP, 0, data->ModuleW, -1, moduleA, sizeof(moduleA), NULL, NULL);
+ trace(" ModuleW: %s\n", moduleA);
+ trace(" WaveDeviceId: %ld\n", data->WaveDeviceId);
+
+ return TRUE;
+}
+
+BOOL CALLBACK callbackA(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA data,
+ LPVOID context)
+{
+ trace(" found device:\n");
+ trace(" Type: %s\n",
+ data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" :
+ data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" :
+ data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown");
+ trace(" DataFlow: %s\n",
+ data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" :
+ data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ?
+ "Capture" : "Unknown");
+ trace(" DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
+ data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3,
+ data->DeviceId.Data4[0],data->DeviceId.Data4[1],
+ data->DeviceId.Data4[2],data->DeviceId.Data4[3],
+ data->DeviceId.Data4[4],data->DeviceId.Data4[5],
+ data->DeviceId.Data4[6],data->DeviceId.Data4[7]);
+ trace(" Description: %s\n", data->Description);
+ trace(" Module: %s\n", data->Module);
+ trace(" Interface: %s\n", data->Interface);
+ trace(" WaveDeviceId: %ld\n", data->WaveDeviceId);
+
+ return TRUE;
+}
+
+BOOL CALLBACK callbackW(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data,
+ LPVOID context)
+{
+ char descriptionA[0x100];
+ char moduleA[MAX_PATH];
+ char interfaceA[MAX_PATH];
+
trace("found device:\n");
trace("\tType: %s\n",
data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" :
data->DeviceId.Data4[2],data->DeviceId.Data4[3],
data->DeviceId.Data4[4],data->DeviceId.Data4[5],
data->DeviceId.Data4[6],data->DeviceId.Data4[7]);
- trace("\tDescription: %s\n", data->Description);
- trace("\tModule: %s\n", data->Module);
- trace("\tInterface: %s\n", data->Interface);
+ WideCharToMultiByte(CP_ACP, 0, data->Description, -1, descriptionA, sizeof(descriptionA), NULL, NULL);
+ WideCharToMultiByte(CP_ACP, 0, data->Module, -1, moduleA, sizeof(moduleA), NULL, NULL);
+ WideCharToMultiByte(CP_ACP, 0, data->Interface, -1, interfaceA, sizeof(interfaceA), NULL, NULL);
+ trace("\tDescription: %s\n", descriptionA);
+ trace("\tModule: %s\n", moduleA);
+ trace("\tInterface: %s\n", interfaceA);
trace("\tWaveDeviceId: %ld\n", data->WaveDeviceId);
return TRUE;
fProc = (MYPROC)GetProcAddress(hDsound, "DllGetClassObject");
/* try direct sound first */
+ /* DSOUND: Error: Invalid interface buffer */
rc = (fProc)(&CLSID_DirectSound, &IID_IClassFactory, (void **)0);
ok(rc==DSERR_INVALIDPARAM,"DllGetClassObject(CLSID_DirectSound, "
"IID_IClassFactory) should have returned DSERR_INVALIDPARAM, "
goto error;
/* direct sound doesn't have an IKsPropertySet */
+ /* DSOUND: Error: Invalid interface buffer */
rc = pcf->lpVtbl->CreateInstance(pcf, NULL, &IID_IKsPropertySet,
(void **)0);
ok(rc==DSERR_INVALIDPARAM, "CreateInstance(IID_IKsPropertySet) should have "
/* try direct sound private last */
rc = (fProc)(&CLSID_DirectSoundPrivate, &IID_IClassFactory,
(void **)(&pcf));
- ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundPrivate, "
- "IID_IClassFactory) failed: %s\n",DXGetErrorString8(rc));
+
+ /* some early versions of Direct Sound do not have this */
if (pcf==0)
goto error;
if (rc!=DS_OK)
goto error;
+ /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION */
rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION,
&support);
- ok(rc==DS_OK||rc==E_INVALIDARG, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ ok(rc==DS_OK||rc==E_INVALIDARG,
+ "QuerySupport(DSPROPSETID_DirectSoundDevice, "
"DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION) failed: %s\n",
DXGetErrorString8(rc));
if (rc!=DS_OK) {
"Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION: "
"support = 0x%lx\n",support);
+ /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1 */
+ rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1,
+ &support);
+ ok(rc==DS_OK||rc==E_INVALIDARG,
+ "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc!=DS_OK) {
+ if (rc==E_INVALIDARG)
+ trace(" Not Supported\n");
+ goto error;
+ }
+
+ ok(support & KSPROPERTY_SUPPORT_GET,
+ "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: "
+ "support = 0x%lx\n",support);
+ ok(!(support & KSPROPERTY_SUPPORT_SET),
+ "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: "
+ "support = 0x%lx\n",support);
+
+ /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A */
+ rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A,
+ &support);
+ ok(rc==DS_OK||rc==E_INVALIDARG,
+ "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc!=DS_OK) {
+ if (rc==E_INVALIDARG)
+ trace(" Not Supported\n");
+ goto error;
+ }
+
+ ok(support & KSPROPERTY_SUPPORT_GET,
+ "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: "
+ "support = 0x%lx\n",support);
+ ok(!(support & KSPROPERTY_SUPPORT_SET),
+ "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: "
+ "support = 0x%lx\n",support);
+
+ /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W */
+ rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W,
+ &support);
+ ok(rc==DS_OK||rc==E_INVALIDARG,
+ "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc!=DS_OK) {
+ if (rc==E_INVALIDARG)
+ trace(" Not Supported\n");
+ goto error;
+ }
+
+ ok(support & KSPROPERTY_SUPPORT_GET,
+ "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: "
+ "support = 0x%lx\n",support);
+ ok(!(support & KSPROPERTY_SUPPORT_SET),
+ "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: "
+ "support = 0x%lx\n",support);
+
+ /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING */
rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING, &support);
ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
"DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING: support = "
"0x%lx\n",support);
+ /* test DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A */
+ rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A, &support);
+ ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc!=DS_OK)
+ goto error;
+
+ ok(support & KSPROPERTY_SUPPORT_GET,
+ "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A: "
+ "support = 0x%lx\n",support);
+ ok(!(support & KSPROPERTY_SUPPORT_SET), "Shouldn't be able to set "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A: support = "
+ "0x%lx\n",support);
+
+ /* test DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W */
+ rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W, &support);
+ ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc!=DS_OK)
+ goto error;
+
+ ok(support & KSPROPERTY_SUPPORT_GET,
+ "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: "
+ "support = 0x%lx\n",support);
+ ok(!(support & KSPROPERTY_SUPPORT_SET), "Shouldn't be able to set "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: support = "
+ "0x%lx\n",support);
+
+ /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE */
+ trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE ***\n");
rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE,
&support);
DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE,
NULL, 0, &data, sizeof(data), &bytes);
ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc);
+ }
+
+ /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 */
+ trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 ***\n");
+ rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1,
+ &support);
+ ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc!=DS_OK)
+ goto error;
+
+ ok(support & KSPROPERTY_SUPPORT_GET,
+ "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: "
+ "support = 0x%lx\n",support);
+ ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: support = 0x%lx\n",support);
+
+ if (support & KSPROPERTY_SUPPORT_GET) {
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA data;
+ ULONG bytes;
+
+ data.Callback = callback1;
+ data.Context = 0;
+
+ rc = pps->lpVtbl->Get(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1,
+ NULL, 0, &data, sizeof(data), &bytes);
+ ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc);
+ }
+
+ /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A */
+ trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A ***\n");
+ rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A,
+ &support);
+ ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc!=DS_OK)
+ goto error;
+
+ ok(support & KSPROPERTY_SUPPORT_GET,
+ "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: "
+ "support = 0x%lx\n",support);
+ ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: support = 0x%lx\n",support);
+
+ if (support & KSPROPERTY_SUPPORT_GET) {
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA data;
+ ULONG bytes;
+
+ data.Callback = callbackA;
+ data.Context = 0;
+
+ rc = pps->lpVtbl->Get(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A,
+ NULL, 0, &data, sizeof(data), &bytes);
+ ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc);
+ }
+
+ /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W */
+ trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W ***\n");
+ rc = pps->lpVtbl->QuerySupport(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W,
+ &support);
+ ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W) failed: %s\n",
+ DXGetErrorString8(rc));
+ if (rc!=DS_OK)
+ goto error;
+
+ ok(support & KSPROPERTY_SUPPORT_GET,
+ "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: "
+ "support = 0x%lx\n",support);
+ ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set "
+ "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: support = 0x%lx\n",support);
+
+ if (support & KSPROPERTY_SUPPORT_GET) {
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA data;
+ ULONG bytes;
+
+ data.Callback = callbackW;
+ data.Context = 0;
+
+ rc = pps->lpVtbl->Get(pps, &DSPROPSETID_DirectSoundDevice,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W,
+ NULL, 0, &data, sizeof(data), &bytes);
+ ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc);
}
error: