From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/imm.c | 7 +++---- dlls/win32u/message.c | 6 +----- dlls/win32u/ntuser_private.h | 1 - dlls/win32u/window.c | 1 - 4 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/dlls/win32u/imm.c b/dlls/win32u/imm.c index 85f2b226989..a88cdce8a4d 100644 --- a/dlls/win32u/imm.c +++ b/dlls/win32u/imm.c @@ -212,11 +212,10 @@ UINT WINAPI NtUserAssociateInputContext( HWND hwnd, HIMC ctx, ULONG flags ) return AICR_FAILED; }
- if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) - return AICR_FAILED; + if (ctx && !is_current_thread_window( hwnd )) return AICR_FAILED; + if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return AICR_FAILED;
- if (ctx && win->tid != GetCurrentThreadId()) ret = AICR_FAILED; - else if (flags != IACE_IGNORENOCONTEXT || win->imc) + if (flags != IACE_IGNORENOCONTEXT || win->imc) { if (win->imc != ctx && get_focus() == hwnd) ret = AICR_FOCUS_CHANGED; win->imc = ctx; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index a6fa5c3c0ba..1d527253fbd 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -390,13 +390,9 @@ static BOOL init_window_call_params( struct win_proc_params *params, HWND hwnd,
user_check_not_lock();
+ if (!is_current_thread_window( hwnd )) return FALSE; if (!(win = get_win_ptr( hwnd ))) return FALSE; if (win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE; - if (win->tid != GetCurrentThreadId()) - { - release_win_ptr( win ); - return FALSE; - } params->func = win->winproc; params->ansi_dst = !(win->flags & WIN_ISUNICODE); is_dialog = win->dlgInfo != NULL; diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 83fe682da79..7252cceaca6 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -54,7 +54,6 @@ typedef struct tagWND struct tagCLASS *class; /* Window class */ struct dce *dce; /* DCE pointer */ WNDPROC winproc; /* Window procedure */ - UINT tid; /* Owner thread id */ HINSTANCE hInstance; /* Window hInstance (from CreateWindow) */ struct window_rects rects; /* window rects in window DPI, relative to the parent client area */ RECT normal_rect; /* Normal window rect saved when maximized/minimized */ diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 688ece598cd..a42c825e30e 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -5507,7 +5507,6 @@ HWND WINAPI NtUserCreateWindowEx( DWORD ex_style, UNICODE_STRING *class_name,
/* Fill the window structure */
- win->tid = GetCurrentThreadId(); win->hInstance = cs.hInstance; win->text = NULL; win->dwStyle = style;