Module: wine Branch: master Commit: ae13a279e1994268638caae7043e08076facc1a2 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ae13a279e1994268638caae70...
Author: Andrew Eikum aeikum@codeweavers.com Date: Fri May 8 08:45:57 2020 -0500
winmm: Accept open handles in wave{In,Out}GetDevCaps.
Based on a patch by Changping Yu dead.ash@hotmail.com.
Signed-off-by: Andrew Eikum aeikum@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/winmm/waveform.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c index b08768577b..39461743c4 100644 --- a/dlls/winmm/waveform.c +++ b/dlls/winmm/waveform.c @@ -2669,10 +2669,18 @@ UINT WINAPI waveOutGetDevCapsW(UINT_PTR uDeviceID, LPWAVEOUTCAPSW lpCaps,
caps = &mapper_caps; }else{ - if(uDeviceID >= g_outmmdevices_count) - return MMSYSERR_BADDEVICEID; + if(uDeviceID >= g_outmmdevices_count){ + WINMM_Device *device = WINMM_GetDeviceFromHWAVE((HWAVE)uDeviceID); + + if(!WINMM_ValidateAndLock(device)) + return MMSYSERR_BADDEVICEID; + + caps = &device->parent->out_caps;
- caps = &read_map(g_out_map, uDeviceID)->out_caps; + LeaveCriticalSection(&device->lock); + }else{ + caps = &read_map(g_out_map, uDeviceID)->out_caps; + } }
memcpy(lpCaps, caps, min(uSize, sizeof(*lpCaps))); @@ -3336,10 +3344,18 @@ UINT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT uSi
caps = &mapper_caps; }else{ - if(uDeviceID >= g_inmmdevices_count) - return MMSYSERR_BADDEVICEID; + if(uDeviceID >= g_inmmdevices_count){ + WINMM_Device *device = WINMM_GetDeviceFromHWAVE((HWAVE)uDeviceID); + + if(!WINMM_ValidateAndLock(device)) + return MMSYSERR_BADDEVICEID; + + caps = &device->parent->in_caps;
- caps = &read_map(g_in_map, uDeviceID)->in_caps; + LeaveCriticalSection(&device->lock); + }else{ + caps = &read_map(g_in_map, uDeviceID)->in_caps; + } }
memcpy(lpCaps, caps, min(uSize, sizeof(*lpCaps)));