Fix MMDRV_PhysicalFeatures to handle both 16 and 32 bit pointers
properly.
This commit is contained in:
parent
dec10f8a18
commit
80a7638006
|
@ -461,7 +461,7 @@ LPWINE_MLD MMDRV_GetRelated(HANDLE hndl, UINT srcType,
|
|||
* MMDRV_PhysicalFeatures [internal]
|
||||
*/
|
||||
UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD dwParam1,
|
||||
DWORD dwParam2)
|
||||
DWORD dwParam2, BOOL bFrom32)
|
||||
{
|
||||
WINE_MM_DRIVER* lpDrv = &MMDrvs[mld->mmdIndex];
|
||||
|
||||
|
@ -470,10 +470,16 @@ UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD dwParam1,
|
|||
/* all those function calls are undocumented */
|
||||
switch (uMsg) {
|
||||
case DRV_QUERYDRVENTRY:
|
||||
if (bFrom32)
|
||||
lstrcpynA((LPSTR)dwParam1, lpDrv->drvname, LOWORD(dwParam2));
|
||||
else
|
||||
lstrcpynA((LPSTR)MapSL(dwParam1), lpDrv->drvname, LOWORD(dwParam2));
|
||||
break;
|
||||
case DRV_QUERYDEVNODE:
|
||||
if (bFrom32)
|
||||
*(LPDWORD)dwParam1 = 0L; /* should be DevNode */
|
||||
else
|
||||
*(DWORD*)MapSL(dwParam1) = 0L;
|
||||
break;
|
||||
case DRV_QUERYNAME:
|
||||
WARN("NIY QueryName\n");
|
||||
|
@ -489,11 +495,7 @@ UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD dwParam1,
|
|||
return (lpDrv->bIsMapper) ? 2 : 0;
|
||||
|
||||
case DRV_QUERYDSOUNDIFACE: /* Wine-specific: Retrieve DirectSound interface */
|
||||
return MMDRV_Message(mld, uMsg, dwParam1, dwParam2, TRUE);
|
||||
|
||||
case DRV_QUERYDSOUNDDESC: /* Wine-specific: Retrieve DirectSound driver description*/
|
||||
return MMDRV_Message(mld, uMsg, dwParam1, dwParam2, TRUE);
|
||||
|
||||
case DRV_QUERYDSOUNDGUID: /* Wine-specific: Retrieve DirectSound driver GUID */
|
||||
return MMDRV_Message(mld, uMsg, dwParam1, dwParam2, TRUE);
|
||||
|
||||
|
|
|
@ -1465,7 +1465,7 @@ DWORD WINAPI waveOutMessage16(HWAVEOUT16 hWaveOut, UINT16 uMessage,
|
|||
|
||||
if ((wmld = MMDRV_Get(HWAVEOUT_32(hWaveOut), MMDRV_WAVEOUT, FALSE)) == NULL) {
|
||||
if ((wmld = MMDRV_Get(HWAVEOUT_32(hWaveOut), MMDRV_WAVEOUT, TRUE)) != NULL) {
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, FALSE);
|
||||
}
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
@ -1703,14 +1703,18 @@ DWORD WINAPI waveInMessage16(HWAVEIN16 hWaveIn, UINT16 uMessage,
|
|||
|
||||
TRACE("(%04x, %u, %ld, %ld)\n", hWaveIn, uMessage, dwParam1, dwParam2);
|
||||
|
||||
if ((wmld = MMDRV_Get(HWAVEIN_32(hWaveIn), MMDRV_WAVEIN, FALSE)) == NULL) {
|
||||
if ((wmld = MMDRV_Get(HWAVEIN_32(hWaveIn), MMDRV_WAVEIN, TRUE)) != NULL) {
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, FALSE);
|
||||
}
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
/* from M$ KB */
|
||||
if (uMessage < DRVM_IOCTL || (uMessage >= DRVM_IOCTL_LAST && uMessage < DRVM_MAPPER))
|
||||
return MMSYSERR_INVALPARAM;
|
||||
|
||||
if ((wmld = MMDRV_Get(HWAVEIN_32(hWaveIn), MMDRV_WAVEIN, FALSE)) == NULL)
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
|
||||
return MMDRV_Message(wmld, uMessage, dwParam1, dwParam2, TRUE);
|
||||
return MMDRV_Message(wmld, uMessage, dwParam1, dwParam2, FALSE);
|
||||
}
|
||||
|
||||
/* ###################################################
|
||||
|
|
|
@ -247,7 +247,7 @@ DWORD MMDRV_Close(LPWINE_MLD mld, UINT wMsg);
|
|||
LPWINE_MLD MMDRV_Get(HANDLE hndl, UINT type, BOOL bCanBeID);
|
||||
LPWINE_MLD MMDRV_GetRelated(HANDLE hndl, UINT srcType, BOOL bSrcCanBeID, UINT dstTyped);
|
||||
DWORD MMDRV_Message(LPWINE_MLD mld, WORD wMsg, DWORD dwParam1, DWORD dwParam2, BOOL bFrom32);
|
||||
UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD dwParam1, DWORD dwParam2);
|
||||
UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD dwParam1, DWORD dwParam2, BOOL bFrom32);
|
||||
BOOL MMDRV_Is32(unsigned int);
|
||||
void MMDRV_InstallMap(unsigned int, MMDRV_MAPFUNC, MMDRV_UNMAPFUNC,
|
||||
MMDRV_MAPFUNC, MMDRV_UNMAPFUNC, LPDRVCALLBACK);
|
||||
|
|
|
@ -1292,7 +1292,7 @@ UINT WINAPI midiOutMessage(HMIDIOUT hMidiOut, UINT uMessage,
|
|||
return 0;
|
||||
}
|
||||
if ((wmld = MMDRV_Get(hMidiOut, MMDRV_MIDIOUT, TRUE)) != NULL) {
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, TRUE);
|
||||
}
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
@ -2605,7 +2605,7 @@ UINT WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage,
|
|||
|
||||
if ((wmld = MMDRV_Get(hWaveOut, MMDRV_WAVEOUT, FALSE)) == NULL) {
|
||||
if ((wmld = MMDRV_Get(hWaveOut, MMDRV_WAVEOUT, TRUE)) != NULL) {
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, TRUE);
|
||||
}
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
@ -2860,7 +2860,7 @@ UINT WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage,
|
|||
|
||||
if ((wmld = MMDRV_Get(hWaveIn, MMDRV_WAVEIN, FALSE)) == NULL) {
|
||||
if ((wmld = MMDRV_Get(hWaveIn, MMDRV_WAVEIN, TRUE)) != NULL) {
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
|
||||
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, TRUE);
|
||||
}
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue