Jacek Caban : user32: Always use original parameter values in dispatch_send_message.
Module: wine Branch: master Commit: b4a5556da983c7ebc8a25b228100c08947024c59 URL: https://gitlab.winehq.org/wine/wine/-/commit/b4a5556da983c7ebc8a25b228100c08... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Fri Aug 5 17:26:37 2022 +0200 user32: Always use original parameter values in dispatch_send_message. --- dlls/user32/message.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c index f6431e0c28a..7be93d94e39 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -588,7 +588,7 @@ LRESULT WINAPI SendMessageTimeoutA( HWND hwnd, UINT msg, WPARAM wparam, LPARAM l } -static LRESULT dispatch_send_message( struct win_proc_params *params ) +static LRESULT dispatch_send_message( struct win_proc_params *params, WPARAM wparam, LPARAM lparam ) { struct ntuser_thread_info *thread_info = NtUserGetThreadInfo(); INPUT_MESSAGE_SOURCE prev_source = thread_info->msg_source; @@ -596,6 +596,10 @@ static LRESULT dispatch_send_message( struct win_proc_params *params ) static const INPUT_MESSAGE_SOURCE msg_source_unavailable = { IMDT_UNAVAILABLE, IMO_UNAVAILABLE }; + /* params may contain arguments modified by wow, use original parameters instead */ + params->wparam = wparam; + params->lparam = lparam; + thread_info->recursion_count++; params->result = &retval; @@ -621,7 +625,7 @@ LRESULT WINAPI SendMessageW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) params.hwnd = 0; retval = NtUserMessageCall( hwnd, msg, wparam, lparam, ¶ms, NtUserSendMessage, FALSE ); - if (params.hwnd) retval = dispatch_send_message( ¶ms ); + if (params.hwnd) retval = dispatch_send_message( ¶ms, wparam, lparam ); return retval; } @@ -643,7 +647,7 @@ LRESULT WINAPI SendMessageA( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) params.hwnd = 0; retval = NtUserMessageCall( hwnd, msg, wparam, lparam, ¶ms, NtUserSendMessage, TRUE ); - if (params.hwnd) retval = dispatch_send_message( ¶ms ); + if (params.hwnd) retval = dispatch_send_message( ¶ms, wparam, lparam ); return retval; }
participants (1)
-
Alexandre Julliard