From: Rémi Bernon rbernon@codeweavers.com
Passing the desired window thread id to get_win_ptr. --- dlls/win32u/class.c | 2 +- dlls/win32u/dce.c | 8 +-- dlls/win32u/defwnd.c | 18 +++--- dlls/win32u/imm.c | 9 ++- dlls/win32u/menu.c | 8 +-- dlls/win32u/message.c | 7 +-- dlls/win32u/ntuser_private.h | 3 +- dlls/win32u/opengl.c | 6 +- dlls/win32u/scroll.c | 6 +- dlls/win32u/sysparams.c | 2 +- dlls/win32u/vulkan.c | 4 +- dlls/win32u/window.c | 112 ++++++++++++++++++----------------- 12 files changed, 91 insertions(+), 94 deletions(-)
diff --git a/dlls/win32u/class.c b/dlls/win32u/class.c index 8c5f2819a67..c7c25ffd593 100644 --- a/dlls/win32u/class.c +++ b/dlls/win32u/class.c @@ -307,7 +307,7 @@ ATOM get_int_atom_value( UNICODE_STRING *name ) */ static CLASS *get_class_ptr( HWND hwnd, BOOL write_access ) { - WND *ptr = get_win_ptr( hwnd ); + WND *ptr = get_win_ptr( hwnd, -1 );
if (ptr) { diff --git a/dlls/win32u/dce.c b/dlls/win32u/dce.c index 64788990707..c54e555fad5 100644 --- a/dlls/win32u/dce.c +++ b/dlls/win32u/dce.c @@ -862,7 +862,7 @@ static void update_visible_region( struct dce *dce ) /* don't use a surface to paint the client area of OpenGL windows */ if (!(paint_flags & SET_WINPOS_PIXEL_FORMAT) || (flags & DCX_WINDOW)) { - win = get_win_ptr( top_win ); + win = get_win_ptr( top_win, -1 ); if (win && win != WND_DESKTOP && win != WND_OTHER_PROCESS) { surface = win->surface; @@ -981,7 +981,7 @@ static struct dce *alloc_dce(void) static struct dce *get_window_dce( HWND hwnd ) { struct dce *dce; - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 );
if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return NULL;
@@ -1002,7 +1002,7 @@ static struct dce *get_window_dce( HWND hwnd ) { if (!(dce = alloc_dce())) return NULL;
- win = get_win_ptr( hwnd ); + win = get_win_ptr( hwnd, -1 ); if (win && win != WND_OTHER_PROCESS && win != WND_DESKTOP) { if (win->dce) /* another thread beat us to it */ @@ -1029,7 +1029,7 @@ static struct dce *get_window_dce( HWND hwnd ) { if (!(dce = alloc_dce())) return NULL;
- win = get_win_ptr( hwnd ); + win = get_win_ptr( hwnd, -1 ); if (win && win != WND_OTHER_PROCESS && win != WND_DESKTOP) { if (win->dwStyle & WS_CLIPCHILDREN) dce->flags |= DCX_CLIPCHILDREN; diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index ce1afa398d9..ea4dbfc46f3 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -305,7 +305,7 @@ static BOOL set_window_text( HWND hwnd, const void *text, BOOL ansi )
TRACE( "%s\n", debugstr_w(str) );
- if (!(win = get_win_ptr( hwnd ))) + if (!(win = get_win_ptr( hwnd, -1 ))) { free( str ); return FALSE; @@ -351,7 +351,7 @@ static HICON get_window_icon( HWND hwnd, WPARAM type ) HICON ret; WND *win;
- if (!(win = get_win_ptr( hwnd ))) return 0; + if (!(win = get_win_ptr( hwnd, -1 ))) return 0;
switch(type) { @@ -378,7 +378,7 @@ static HICON set_window_icon( HWND hwnd, WPARAM type, HICON icon ) HICON ret = 0; WND *win;
- if (!(win = get_win_ptr( hwnd ))) return 0; + if (!(win = get_win_ptr( hwnd, -1 ))) return 0;
switch (type) { @@ -1128,7 +1128,7 @@ static void draw_nc_frame( HDC hdc, RECT *rect, BOOL active, DWORD style, DWO static HICON get_nc_icon_for_window( HWND hwnd ) { HICON icon = 0; - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 );
if (win && win != WND_OTHER_PROCESS && win != WND_DESKTOP) { @@ -1712,7 +1712,7 @@ static void nc_paint( HWND hwnd, HRGN clip ) HRGN hrgn; RECT rectClient;
- if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS) return; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS) return; style = win->dwStyle; ex_style = win->dwExStyle; flags = win->flags; @@ -2410,7 +2410,7 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
case WM_NCDESTROY: { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); if (!win) return 0; free( win->text ); win->text = NULL; @@ -2616,7 +2616,7 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
case WM_GETTEXTLENGTH: { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); if (win && win->text) { if (ansi) @@ -2633,7 +2633,7 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, { WND *win;
- if (!(win = get_win_ptr( hwnd ))) break; + if (!(win = get_win_ptr( hwnd, -1 ))) break;
__TRY { @@ -2695,7 +2695,7 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, if ((style & WS_VISIBLE) && wparam) break; if (!(style & WS_VISIBLE) && !wparam) break; if (!get_window_relative( hwnd, GW_OWNER )) break; - if (!(win = get_win_ptr( hwnd ))) break; + if (!(win = get_win_ptr( hwnd, -1 ))) break; if (win == WND_OTHER_PROCESS) break; if (wparam) { diff --git a/dlls/win32u/imm.c b/dlls/win32u/imm.c index 85f2b226989..8fd5d1e4923 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; + win = get_win_ptr( hwnd, ctx ? GetCurrentThreadId() : -1 ); + if (!win || 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; @@ -239,7 +238,7 @@ HIMC get_window_input_context( HWND hwnd ) WND *win; HIMC ret;
- if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return 0; diff --git a/dlls/win32u/menu.c b/dlls/win32u/menu.c index 1943ed0d894..e506e22124c 100644 --- a/dlls/win32u/menu.c +++ b/dlls/win32u/menu.c @@ -357,7 +357,7 @@ BOOL is_menu( HMENU handle ) static HMENU get_win_sys_menu( HWND hwnd ) { HMENU ret = 0; - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); if (win && win != WND_OTHER_PROCESS && win != WND_DESKTOP) { ret = win->hSysMenu; @@ -1585,7 +1585,7 @@ INT WINAPI NtUserMenuItemFromPoint( HWND hwnd, HMENU handle, int x, int y ) */ HMENU WINAPI NtUserGetSystemMenu( HWND hwnd, BOOL revert ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); HMENU retvalue = 0;
if (win == WND_DESKTOP || !win) return 0; @@ -1628,7 +1628,7 @@ HMENU WINAPI NtUserGetSystemMenu( HWND hwnd, BOOL revert ) */ BOOL WINAPI NtUserSetSystemMenu( HWND hwnd, HMENU menu ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 );
if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE;
@@ -1643,7 +1643,7 @@ HMENU get_window_sys_sub_menu( HWND hwnd ) WND *win; HMENU ret;
- if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return 0; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return 0; ret = win->hSysMenu; release_win_ptr( win ); return get_sub_menu( ret, 0 ); diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index a6fa5c3c0ba..9af24edea4f 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -390,13 +390,8 @@ static BOOL init_window_call_params( struct win_proc_params *params, HWND hwnd,
user_check_not_lock();
- if (!(win = get_win_ptr( hwnd ))) return FALSE; + if (!(win = get_win_ptr( hwnd, GetCurrentThreadId() ))) 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..dfa9545d2e0 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 */ @@ -243,7 +242,7 @@ static inline UINT win_get_flags( HWND hwnd ) return win_set_flags( hwnd, 0, 0 ); }
-WND *get_win_ptr( HWND hwnd ); +WND *get_win_ptr( HWND hwnd, UINT tid ); BOOL is_child( HWND parent, HWND child ); BOOL is_window( HWND hwnd );
diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index 5bde88ae3c6..3cc6de6f803 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -1197,7 +1197,7 @@ static int get_window_swap_interval( HWND hwnd ) int interval; WND *win;
- if (!(win = get_win_ptr( hwnd )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return 0; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return 0; interval = win->swap_interval; release_win_ptr( win );
@@ -1257,7 +1257,7 @@ static BOOL win32u_wglSwapIntervalEXT( int interval ) HWND hwnd; WND *win;
- if (!(hwnd = NtUserWindowFromDC( hdc )) || !(win = get_win_ptr( hwnd ))) + if (!(hwnd = NtUserWindowFromDC( hdc )) || !(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_DC_NOT_FOUND ); return FALSE; @@ -1281,7 +1281,7 @@ static int win32u_wglGetSwapIntervalEXT(void) HWND hwnd; WND *win;
- if (!(hwnd = NtUserWindowFromDC( hdc )) || !(win = get_win_ptr( hwnd ))) + if (!(hwnd = NtUserWindowFromDC( hdc )) || !(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_DC_NOT_FOUND ); return 0; diff --git a/dlls/win32u/scroll.c b/dlls/win32u/scroll.c index 7ada572b658..6e0d03b8a28 100644 --- a/dlls/win32u/scroll.c +++ b/dlls/win32u/scroll.c @@ -78,7 +78,7 @@ struct win_scroll_bar_info static struct scroll_info *get_scroll_info_ptr( HWND hwnd, int bar, BOOL alloc ) { struct scroll_info *info = NULL; - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 );
if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return NULL;
@@ -189,7 +189,7 @@ static BOOL get_scroll_bar_rect( HWND hwnd, int bar, RECT *rect, int *arrow_size { int pixels, min_thumb_size; BOOL vertical; - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 );
if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE;
@@ -1137,7 +1137,7 @@ static void create_scroll_bar( HWND hwnd, CREATESTRUCTW *create )
TRACE( "hwnd=%p create=%p\n", hwnd, create );
- win = get_win_ptr( hwnd ); + win = get_win_ptr( hwnd, -1 ); if (win->cbWndExtra >= sizeof(struct scroll_bar_win_data)) { struct scroll_bar_win_data *data = (struct scroll_bar_win_data *)win->wExtra; diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 0ea5cad76e4..49b7de81814 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -2652,7 +2652,7 @@ UINT get_win_monitor_dpi( HWND hwnd, UINT *raw_dpi ) RECT rect = {0}; WND *win;
- if (!(win = get_win_ptr( hwnd ))) + if (!(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return 0; diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 3cd6abede18..a744c0c52b6 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -108,7 +108,7 @@ static VkResult win32u_vkCreateWin32SurfaceKHR( VkInstance client_instance, cons return res; }
- if (!(win = get_win_ptr( surface->hwnd )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) + if (!(win = get_win_ptr( surface->hwnd, -1 )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) list_init( &surface->entry ); else { @@ -138,7 +138,7 @@ static void win32u_vkDestroySurfaceKHR( VkInstance client_instance, VkSurfaceKHR TRACE( "instance %p, handle 0x%s, allocator %p\n", instance, wine_dbgstr_longlong( client_surface ), allocator ); if (allocator) FIXME( "Support for allocation callbacks not implemented yet\n" );
- if ((win = get_win_ptr( surface->hwnd )) && win != WND_DESKTOP && win != WND_OTHER_PROCESS) + if ((win = get_win_ptr( surface->hwnd, -1 )) && win != WND_DESKTOP && win != WND_OTHER_PROCESS) { list_remove( &surface->entry ); release_win_ptr( win ); diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 688ece598cd..170dfedc415 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -125,10 +125,7 @@ static BOOL get_user_entry_at( WORD index, unsigned short type, struct user_entr return TRUE; }
-/*********************************************************************** - * get_user_handle_ptr - */ -void *get_user_handle_ptr( HANDLE handle, unsigned short type ) +static void *get_thread_user_object( HANDLE handle, unsigned short type, UINT tid ) { WORD index = USER_HANDLE_TO_INDEX( handle ); struct user_object *ptr = NULL; @@ -140,12 +137,21 @@ void *get_user_handle_ptr( HANDLE handle, unsigned short type )
if (!get_user_entry( handle, type, &entry, &handle )) ptr = NULL; else if (entry.pid != GetCurrentProcessId()) ptr = OBJ_OTHER_PROCESS; + else if (tid != -1 && entry.tid != tid) ptr = OBJ_OTHER_PROCESS; else ptr = client_objects[index];
if (!ptr || ptr == OBJ_OTHER_PROCESS) user_unlock(); return ptr; }
+/*********************************************************************** + * get_user_handle_ptr + */ +void *get_user_handle_ptr( HANDLE handle, unsigned short type ) +{ + return get_thread_user_object( handle, type, -1 ); +} + /*********************************************************************** * next_thread_user_object * @@ -264,17 +270,17 @@ BOOL is_desktop_window( HWND hwnd ) }
/*********************************************************************** - * win_get_ptr + * get_win_ptr * * Return a pointer to the WND structure if local to the process, * or WND_OTHER_PROCESS if handle may be valid in other process. * If ret value is a valid pointer, it must be released with WIN_ReleasePtr. */ -WND *get_win_ptr( HWND hwnd ) +WND *get_win_ptr( HWND hwnd, UINT tid ) { WND *win;
- if ((win = get_user_handle_ptr( hwnd, NTUSER_OBJ_WINDOW )) == WND_OTHER_PROCESS) + if ((win = get_thread_user_object( hwnd, NTUSER_OBJ_WINDOW, tid )) == WND_OTHER_PROCESS) { if (is_desktop_window( hwnd )) win = WND_DESKTOP; } @@ -345,7 +351,7 @@ HWND get_parent( HWND hwnd ) HWND retval = 0; WND *win;
- if (!(win = get_win_ptr( hwnd ))) + if (!(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return 0; @@ -429,7 +435,7 @@ HWND WINAPI NtUserSetParent( HWND hwnd, HWND parent ) * including the WM_SHOWWINDOW messages and all */ was_visible = NtUserShowWindow( hwnd, SW_HIDE );
- win = get_win_ptr( hwnd ); + win = get_win_ptr( hwnd, -1 ); if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return 0;
get_window_rect_rel( hwnd, COORDS_PARENT, &window_rect, get_dpi_for_window(hwnd) ); @@ -480,7 +486,7 @@ HWND get_window_relative( HWND hwnd, UINT rel )
if (rel == GW_OWNER) /* this one may be available locally */ { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); if (!win) { RtlSetLastWin32Error( ERROR_INVALID_HANDLE ); @@ -545,7 +551,7 @@ static HWND *list_window_parents( HWND hwnd ) current = hwnd; for (;;) { - if (!(win = get_win_ptr( current ))) goto empty; + if (!(win = get_win_ptr( current, -1 ))) goto empty; if (win == WND_OTHER_PROCESS) break; /* need to do it the hard way */ if (win == WND_DESKTOP) { @@ -634,7 +640,7 @@ HWND WINAPI NtUserGetAncestor( HWND hwnd, UINT type ) switch(type) { case GA_PARENT: - if (!(win = get_win_ptr( hwnd ))) + if (!(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return 0; @@ -760,7 +766,7 @@ BOOL is_window_unicode( HWND hwnd ) WND *win; BOOL ret = FALSE;
- if (!(win = get_win_ptr(hwnd))) return FALSE; + if (!(win = get_win_ptr( hwnd, -1 ))) return FALSE;
if (win == WND_DESKTOP) return TRUE;
@@ -856,7 +862,7 @@ UINT get_window_dpi_awareness_context( HWND hwnd ) UINT ret = 0; WND *win;
- if (!(win = get_win_ptr( hwnd ))) + if (!(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return 0; @@ -885,7 +891,7 @@ UINT get_dpi_for_window( HWND hwnd ) WND *win; UINT raw_dpi, context = 0;
- if (!(win = get_win_ptr( hwnd ))) + if (!(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return 0; @@ -992,7 +998,7 @@ static LONG_PTR get_window_long_size( HWND hwnd, INT offset, UINT size, BOOL ans return (ULONG_PTR)parent; }
- if (!(win = get_win_ptr( hwnd ))) + if (!(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return 0; @@ -1127,7 +1133,7 @@ ULONG set_window_style( HWND hwnd, ULONG set_bits, ULONG clear_bits ) { BOOL ok, made_visible = FALSE; STYLESTRUCT style; - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 );
if (!win || win == WND_DESKTOP) return 0; if (win == WND_OTHER_PROCESS) @@ -1185,7 +1191,7 @@ static DWORD fix_exstyle( DWORD style, DWORD exstyle ) /* Change the owner of a window. */ static HWND set_window_owner( HWND hwnd, HWND owner ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); HWND ret = 0;
if (!win || win == WND_DESKTOP) return 0; @@ -1225,7 +1231,7 @@ LONG_PTR set_window_long( HWND hwnd, INT offset, UINT size, LONG_PTR newval, BOO return FALSE; }
- if (!(win = get_win_ptr( hwnd ))) + if (!(win = get_win_ptr( hwnd, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return 0; @@ -1259,7 +1265,7 @@ LONG_PTR set_window_long( HWND hwnd, INT offset, UINT size, LONG_PTR newval, BOO style.styleNew = newval; release_win_ptr( win ); send_message( hwnd, WM_STYLECHANGING, GWL_STYLE, (LPARAM)&style ); - if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS) return 0; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS) return 0; newval = style.styleNew; /* WS_CLIPSIBLINGS can't be reset on top-level windows */ if (win->parent == get_desktop_window()) newval |= WS_CLIPSIBLINGS; @@ -1271,7 +1277,7 @@ LONG_PTR set_window_long( HWND hwnd, INT offset, UINT size, LONG_PTR newval, BOO style.styleNew = newval; release_win_ptr( win ); send_message( hwnd, WM_STYLECHANGING, GWL_EXSTYLE, (LPARAM)&style ); - if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS) return 0; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS) return 0; /* WS_EX_TOPMOST can only be changed through SetWindowPos */ newval = (style.styleNew & ~WS_EX_TOPMOST) | (win->dwExStyle & WS_EX_TOPMOST); newval = fix_exstyle(win->dwStyle, newval); @@ -1452,7 +1458,7 @@ LONG_PTR WINAPI NtUserSetWindowLongPtr( HWND hwnd, INT offset, LONG_PTR newval,
BOOL set_window_pixel_format( HWND hwnd, int format, BOOL internal ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 );
if (!win || win == WND_DESKTOP || win == WND_OTHER_PROCESS) { @@ -1471,7 +1477,7 @@ BOOL set_window_pixel_format( HWND hwnd, int format, BOOL internal )
int get_window_pixel_format( HWND hwnd, BOOL internal ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); int ret;
if (!win || win == WND_DESKTOP || win == WND_OTHER_PROCESS) @@ -1488,7 +1494,7 @@ int get_window_pixel_format( HWND hwnd, BOOL internal )
static int window_has_client_surface( HWND hwnd ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); BOOL ret;
if (!win || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return FALSE; @@ -1616,7 +1622,7 @@ static void mirror_rect( const RECT *window_rect, RECT *rect ) */ BOOL get_window_rects( HWND hwnd, enum coords_relative relative, struct window_rects *rects, UINT dpi ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); BOOL ret = TRUE;
if (!win) @@ -1673,7 +1679,7 @@ BOOL get_window_rects( HWND hwnd, enum coords_relative relative, struct window_r case COORDS_PARENT: if (win->parent) { - WND *parent = get_win_ptr( win->parent ); + WND *parent = get_win_ptr( win->parent, -1 ); if (parent == WND_DESKTOP) break; if (!parent || parent == WND_OTHER_PROCESS) { @@ -1698,7 +1704,7 @@ BOOL get_window_rects( HWND hwnd, enum coords_relative relative, struct window_r case COORDS_SCREEN: while (win->parent) { - WND *parent = get_win_ptr( win->parent ); + WND *parent = get_win_ptr( win->parent, -1 ); if (parent == WND_DESKTOP) break; if (!parent || parent == WND_OTHER_PROCESS) { @@ -1837,7 +1843,7 @@ static NTSTATUS get_window_region( HWND hwnd, BOOL surface, HRGN *region, RECT * */ static void update_surface_region( HWND hwnd ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); HRGN region, shape = 0; RECT visible;
@@ -1921,7 +1927,7 @@ static BOOL get_default_window_surface( HWND hwnd, const RECT *surface_rect, str
TRACE( "hwnd %p, surface_rect %s, surface %p\n", hwnd, wine_dbgstr_rect( surface_rect ), surface );
- if (!(win = get_win_ptr( hwnd )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return FALSE; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return FALSE;
if ((previous = win->surface) && EqualRect( &previous->rect, surface_rect )) { @@ -2057,7 +2063,7 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru get_window_rects( hwnd, COORDS_PARENT, &old_rects, get_thread_dpi() ); if (IsRectEmpty( &valid_rects[0] ) || is_layered) valid_rects = NULL;
- if (!(win = get_win_ptr( hwnd )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return FALSE; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return FALSE; old_surface = win->surface; if (old_surface != new_surface) swp_flags |= SWP_FRAMECHANGED; /* force refreshing non-client area */
@@ -2202,7 +2208,7 @@ static BOOL expose_window_surface( HWND hwnd, UINT flags, const RECT *rect, UINT RECT exposed_rect; WND *win;
- if (!(win = get_win_ptr( hwnd )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return FALSE; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) return FALSE; if ((surface = win->surface)) window_surface_add_ref( surface ); rects = win->rects; release_win_ptr( win ); @@ -2702,7 +2708,7 @@ static BOOL empty_point( POINT pt ) */ BOOL WINAPI NtUserGetWindowPlacement( HWND hwnd, WINDOWPLACEMENT *placement ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); UINT win_dpi;
if (!win) return FALSE; @@ -2841,7 +2847,7 @@ static void make_point_onscreen( POINT *pt )
static BOOL set_window_placement( HWND hwnd, const WINDOWPLACEMENT *wndpl, UINT flags ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); WINDOWPLACEMENT wp = *wndpl; DWORD style;
@@ -3038,7 +3044,7 @@ INT WINAPI NtUserInternalGetWindowText( HWND hwnd, WCHAR *text, INT count ) WND *win;
if (count <= 0) return 0; - if (!(win = get_win_ptr( hwnd ))) return 0; + if (!(win = get_win_ptr( hwnd, -1 ))) return 0; if (win == WND_DESKTOP) text[0] = 0; else if (win != WND_OTHER_PROCESS) { @@ -3072,7 +3078,7 @@ static BOOL get_windows_offset( HWND hwnd_from, HWND hwnd_to, UINT dpi, BOOL *mi /* Translate source window origin to screen coords */ if (hwnd_from) { - if (!(win = get_win_ptr( hwnd_from ))) + if (!(win = get_win_ptr( hwnd_from, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return FALSE; @@ -3092,7 +3098,7 @@ static BOOL get_windows_offset( HWND hwnd_from, HWND hwnd_to, UINT dpi, BOOL *mi offset.y += win->rects.client.top; hwnd = win->parent; release_win_ptr( win ); - if (!(win = get_win_ptr( hwnd ))) break; + if (!(win = get_win_ptr( hwnd, -1 ))) break; if (win == WND_OTHER_PROCESS) goto other_process; if (win == WND_DESKTOP) break; if (win->flags & WIN_CHILDREN_MOVED) @@ -3109,7 +3115,7 @@ static BOOL get_windows_offset( HWND hwnd_from, HWND hwnd_to, UINT dpi, BOOL *mi /* Translate origin to destination window coords */ if (hwnd_to) { - if (!(win = get_win_ptr( hwnd_to ))) + if (!(win = get_win_ptr( hwnd_to, -1 ))) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return FALSE; @@ -3130,7 +3136,7 @@ static BOOL get_windows_offset( HWND hwnd_from, HWND hwnd_to, UINT dpi, BOOL *mi pt.y += win->rects.client.top; hwnd = win->parent; release_win_ptr( win ); - if (!(win = get_win_ptr( hwnd ))) break; + if (!(win = get_win_ptr( hwnd, -1 ))) break; if (win == WND_OTHER_PROCESS) goto other_process; if (win == WND_DESKTOP) break; if (win->flags & WIN_CHILDREN_MOVED) @@ -3326,8 +3332,7 @@ static BOOL calc_winpos( WINDOWPOS *winpos, struct window_rects *old_rects, stru && !((winpos->flags & SWP_AGG_NOCLIENTCHANGE) && (winpos->flags & SWP_SHOWWINDOW))) send_message( winpos->hwnd, WM_WINDOWPOSCHANGING, 0, (LPARAM)winpos );
- if (!(win = get_win_ptr( winpos->hwnd )) || - win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE; + if (!(win = get_win_ptr( winpos->hwnd, -1 )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE;
/* Calculate new position and size */ get_window_rects( winpos->hwnd, COORDS_PARENT, old_rects, get_thread_dpi() ); @@ -3523,7 +3528,7 @@ static UINT calc_ncsize( WINDOWPOS *winpos, const struct window_rects *old_rects static BOOL fixup_swp_flags( WINDOWPOS *winpos, const RECT *old_window_rect, int parent_x, int parent_y ) { HWND parent; - WND *win = get_win_ptr( winpos->hwnd ); + WND *win = get_win_ptr( winpos->hwnd, -1 ); BOOL ret = TRUE;
if (!win || win == WND_OTHER_PROCESS) @@ -4067,7 +4072,7 @@ void WINAPI NtUserSetInternalWindowPos( HWND hwnd, UINT cmd, RECT *rect, POINT * */ UINT win_set_flags( HWND hwnd, UINT set_mask, UINT clear_mask ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); UINT ret;
if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return 0; @@ -4206,7 +4211,7 @@ MINMAXINFO get_min_max_info( HWND hwnd ) minmax.ptMaxPosition.x = -xinc; minmax.ptMaxPosition.y = -yinc;
- if ((win = get_win_ptr( hwnd )) && win != WND_DESKTOP && win != WND_OTHER_PROCESS) + if ((win = get_win_ptr( hwnd, -1 )) && win != WND_DESKTOP && win != WND_OTHER_PROCESS) { if (!empty_point( win->max_pos )) minmax.ptMaxPosition = win->max_pos; release_win_ptr( win ); @@ -4704,7 +4709,7 @@ static BOOL show_window( HWND hwnd, INT cmd ) goto done; }
- if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS) goto done; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS) goto done;
if (win->flags & WIN_NEED_SIZE) { @@ -4854,7 +4859,7 @@ BOOL WINAPI NtUserFlashWindowEx( FLASHWINFO *info ) { NtUserRedrawWindow( info->hwnd, 0, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_FRAME );
- win = get_win_ptr( info->hwnd ); + win = get_win_ptr( info->hwnd, -1 ); if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE; if (info->dwFlags & FLASHW_CAPTION && !(win->flags & WIN_NCACTIVATED)) { @@ -4873,7 +4878,7 @@ BOOL WINAPI NtUserFlashWindowEx( FLASHWINFO *info ) WPARAM wparam; HWND hwnd = info->hwnd;
- win = get_win_ptr( hwnd ); + win = get_win_ptr( hwnd, -1 ); if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE; hwnd = win->obj.handle; /* make it a full handle */
@@ -4896,7 +4901,7 @@ BOOL WINAPI NtUserFlashWindowEx( FLASHWINFO *info ) DWORD WINAPI NtUserGetWindowContextHelpId( HWND hwnd ) { DWORD retval; - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); if (!win || win == WND_DESKTOP) return 0; if (win == WND_OTHER_PROCESS) { @@ -4913,7 +4918,7 @@ DWORD WINAPI NtUserGetWindowContextHelpId( HWND hwnd ) */ BOOL WINAPI NtUserSetWindowContextHelpId( HWND hwnd, DWORD id ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); if (!win || win == WND_DESKTOP) return FALSE; if (win == WND_OTHER_PROCESS) { @@ -4930,7 +4935,7 @@ BOOL WINAPI NtUserSetWindowContextHelpId( HWND hwnd, DWORD id ) */ HICON WINAPI NtUserInternalGetWindowIcon( HWND hwnd, UINT type ) { - WND *win = get_win_ptr( hwnd ); + WND *win = get_win_ptr( hwnd, -1 ); HICON ret;
TRACE( "hwnd %p, type %#x\n", hwnd, type ); @@ -5087,7 +5092,7 @@ LRESULT destroy_window( HWND hwnd )
/* free resources associated with the window */
- if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS) return 0; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS) return 0; if ((win->dwStyle & (WS_CHILD | WS_POPUP)) != WS_CHILD) menu = (HMENU)win->wIDmenu; sys_menu = win->hSysMenu; @@ -5507,7 +5512,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; @@ -5540,7 +5544,7 @@ HWND WINAPI NtUserCreateWindowEx( DWORD ex_style, UNICODE_STRING *class_name, free_window_handle( hwnd ); return 0; } - if (!(win = get_win_ptr( hwnd ))) return 0; + if (!(win = get_win_ptr( hwnd, -1 ))) return 0;
/* * Correct the window styles. @@ -5743,7 +5747,7 @@ static void *get_dialog_info( HWND hwnd ) WND *win; void *ret;
- if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) { RtlSetLastWin32Error( ERROR_INVALID_WINDOW_HANDLE ); return NULL; @@ -5758,7 +5762,7 @@ static BOOL set_dialog_info( HWND hwnd, void *info ) { WND *win;
- if (!(win = get_win_ptr( hwnd )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE; + if (!(win = get_win_ptr( hwnd, -1 )) || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE; win->dlgInfo = info; release_win_ptr( win ); return TRUE;