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

📄 propset.c

📁 一个类似windows
💻 C
📖 第 1 页 / 共 5 页
字号:
	 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(WineWaveOutMessage((HWAVEOUT)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(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");                        break;		    } else {                        WARN("no memory\n");                        HeapFree(GetProcessHeap(), 0, szDescription);                        HeapFree(GetProcessHeap(), 0, szModule);                        HeapFree(GetProcessHeap(), 0, szInterface);                        return E_OUTOFMEMORY;		    }                } else {                    WARN("WineWaveOutMessage(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(WineWaveInMessage((HWAVEIN)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(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, szDescription);                        HeapFree(GetProcessHeap(), 0, szModule);                        HeapFree(GetProcessHeap(), 0, szInterface);                        return E_OUTOFMEMORY;		    }                } else {                    WARN("WineWaveInMessage(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[%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 */                    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(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, szDescription);                        HeapFree(GetProcessHeap(), 0, szModule);                        HeapFree(GetProcessHeap(), 0, szInterface);                        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( &ppd->DeviceId, &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 */                        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(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, szDescription);                            HeapFree(GetProcessHeap(), 0, szModule);                            HeapFree(GetProcessHeap(), 0, szInterface);                            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_DescriptionW(    REFGUID guidPropSet,    LPVOID pPropData,    ULONG cbPropData,    PULONG pcbReturned ){    PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA) pPropData;    HRESULT err;    GUID dev_guid;    TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n",	debugstr_guid(guidPropSet),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("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) GUID_NULL not implemented!\n",	    debugstr_guid(guidPropSet),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[%ld]\n", wod);                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");                        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;		}            }	}    } 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;

⌨️ 快捷键说明

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