Jacek Caban : user32: Always use original parameter values in dispatch_send_message.

Alexandre Julliard julliard at winehq.org
Mon Aug 15 15:23:45 CDT 2022


Module: wine
Branch: master
Commit: b4a5556da983c7ebc8a25b228100c08947024c59
URL:    https://gitlab.winehq.org/wine/wine/-/commit/b4a5556da983c7ebc8a25b228100c08947024c59

Author: Jacek Caban <jacek at 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, &params, NtUserSendMessage, FALSE );
-    if (params.hwnd) retval = dispatch_send_message( &params );
+    if (params.hwnd) retval = dispatch_send_message( &params, 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, &params, NtUserSendMessage, TRUE );
-    if (params.hwnd) retval = dispatch_send_message( &params );
+    if (params.hwnd) retval = dispatch_send_message( &params, wparam, lparam );
     return retval;
 }
 




More information about the wine-cvs mailing list