📄 propset.c
字号:
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(WineWaveInMessage((HWAVEIN)wid, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0)); if (err == DS_OK && drv) data.Type = DIRECTSOUNDDEVICE_TYPE_VXD; else WARN("WineWaveInMessage(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; } } } else { FIXME("unsupported property: %s\n",debugstr_guid(guidPropSet)); } if (pcbReturned) { *pcbReturned = 0; FIXME("*pcbReturned=%ld\n", *pcbReturned); } return E_PROP_ID_UNSUPPORTED;}static HRESULT WINAPI DSPROPERTY_EnumerateW( REFGUID guidPropSet, LPVOID pPropData, ULONG cbPropData, PULONG pcbReturned ){ PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA) pPropData; HRESULT err; TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); if ( IsEqualGUID( &DSPROPSETID_DirectSoundDevice, guidPropSet) ) { 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(WineWaveOutMessage((HWAVEOUT)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(WineWaveOutMessage((HWAVEOUT)wod,DRV_QUERYDEVICEINTERFACESIZE, (DWORD_PTR)&size, 0)); if (err == DS_OK) { WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,size); if (wInterface) { err = mmErr(WineWaveOutMessage((HWAVEOUT)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(WineWaveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0)); if (err == DS_OK && drv) data.Type = DIRECTSOUNDDEVICE_TYPE_VXD; else WARN("WineWaveOutMessage(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(WineWaveInMessage((HWAVEIN)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(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDEVICEINTERFACESIZE, (DWORD_PTR)&size, 0)); if (err == DS_OK) { WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,size); if (wInterface) { err = mmErr(WineWaveInMessage((HWAVEIN)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(WineWaveInMessage((HWAVEIN)wid, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0)); if (err == DS_OK && drv) data.Type = DIRECTSOUNDDEVICE_TYPE_VXD; else WARN("WineWaveInMessage(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; } } } else { FIXME("unsupported property: %s\n",debugstr_guid(guidPropSet)); } if (pcbReturned) { *pcbReturned = 0; FIXME("*pcbReturned=%ld\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=%ld,pInstanceData=%p,cbInstanceData=%ld,pPropData=%p,cbPropData=%ld,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(guidPropSet,pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: return DSPROPERTY_Description1(guidPropSet,pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: return DSPROPERTY_Enumerate1(guidPropSet,pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: return DSPROPERTY_WaveDeviceMappingW(guidPropSet,pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: return DSPROPERTY_DescriptionA(guidPropSet,pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: return DSPROPERTY_DescriptionW(guidPropSet,pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: return DSPROPERTY_EnumerateA(guidPropSet,pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: return DSPROPERTY_EnumerateW(guidPropSet,pPropData,cbPropData,pcbReturned); default: FIXME("unsupported ID: %ld\n",dwPropID); break; } } else { FIXME("unsupported property: %s\n",debugstr_guid(guidPropSet)); } if (pcbReturned) { *pcbReturned = 0; FIXME("*pcbReturned=%ld\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,%ld,%p,%ld,%p,%ld), 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,%ld,%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: %ld\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 WINAPI IKsPrivatePropertySetImpl_Create( IKsPrivatePropertySetImpl **piks){ IKsPrivatePropertySetImpl *iks; iks = HeapAlloc(GetProcessHeap(),0,sizeof(*iks)); iks->ref = 1; iks->lpVtbl = &ikspvt; *piks = iks; return S_OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -