From: Jacek Caban jacek@codeweavers.com
--- 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; }