⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propset.c

📁 一个类似windows
💻 C
📖 第 1 页 / 共 5 页
字号:
                err = mmErr(WineWaveInMessage((HWAVEIN)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(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0));                        if (err == DS_OK && drv)                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;                        else                            WARN("WineWaveInMessage(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("WineWaveInMessage(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[%ld]\n", wod);                ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;                ppd->WaveDeviceId = wod;                err = mmErr(WineWaveOutMessage((HWAVEOUT)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(WineWaveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));			if (err == DS_OK && drv)                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;                        else                            WARN("WineWaveOutMessage(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("WineWaveOutMessage(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[%ld]\n", wid);                    ppd->WaveDeviceId = wid;                    err = mmErr(WineWaveInMessage((HWAVEIN)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(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0));                            if (err == DS_OK && drv)                                ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;                            else                                WARN("WineWaveInMessage(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("WineWaveInMessage(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=%ld\n", *pcbReturned);    }    return S_OK;}static HRESULT WINAPI DSPROPERTY_Enumerate1(    REFGUID guidPropSet,    LPVOID pPropData,    ULONG cbPropData,    PULONG pcbReturned ){    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_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_1_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) {                        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(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);                    }                }                devs = waveInGetNumDevs();                for (wid = 0; wid < devs; ++wid) {                    err = mmErr(WineWaveInMessage((HWAVEIN)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(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);                    }                }                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_EnumerateA(    REFGUID guidPropSet,    LPVOID pPropData,    ULONG cbPropData,    PULONG pcbReturned ){    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_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_A_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) {			DWORD size;			err = mmErr(WineWaveOutMessage((HWAVEOUT)wod,DRV_QUERYDEVICEINTERFACESIZE,(DWORD_PTR)&size,0));			if (err == DS_OK) {			    WCHAR * nameW = HeapAlloc(GetProcessHeap(),0,size);                            if (nameW) {                                err = mmErr(WineWaveOutMessage((HWAVEOUT)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(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,szInterface);                                }			    }                            HeapFree(GetProcessHeap(),0,nameW);			}		    }		}		devs = waveInGetNumDevs();		for (wid = 0; wid < devs; ++wid) {		    err = mmErr(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));		    if (err == DS_OK) {			DWORD size;			err = mmErr(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDEVICEINTERFACESIZE,(DWORD_PTR)&size,0));			if (err == DS_OK) {			    WCHAR * nameW = HeapAlloc(GetProcessHeap(),0,size);                            if (nameW) {                                err = mmErr(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDEVICEINTERFACE,(DWORD_PTR)nameW,size));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -