More of !3388.
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/winproc.c | 5 ++--- dlls/win32u/message.c | 9 +++++++++ dlls/win32u/tests/win32u.c | 16 ++++++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 202c955e152..92392622fc8 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -875,11 +875,8 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case EM_SETRECT: case EM_SETRECTNP: case EM_GETLINE: - break; case EM_SETTABSTOPS: case LB_SETTABSTOPS: - if (!*wparam) return TRUE; - minsize = *wparam * sizeof(UINT); break; case CB_ADDSTRING: case CB_INSERTSTRING: @@ -1083,6 +1080,8 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) case EM_SETRECT: case EM_SETRECTNP: case EM_GETLINE: + case EM_SETTABSTOPS: + case LB_SETTABSTOPS: { LRESULT *result_ptr = (LRESULT *)buffer - 1; *result_ptr = result; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index d37b05ca1eb..eb093fc2981 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -594,6 +594,11 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa *lparam = (LPARAM)(len_ptr + 1); return TRUE; } + case EM_SETTABSTOPS: + case LB_SETTABSTOPS: + if (!*wparam) return TRUE; + minsize = *wparam * sizeof(UINT); + break; case WM_WINE_SETWINDOWPOS: { WINDOWPOS wp; @@ -1410,6 +1415,10 @@ size_t user_message_size( UINT message, WPARAM wparam, LPARAM lparam, BOOL other case EM_GETLINE: size = max( *(WORD *)lparam * char_size( ansi ), sizeof(WORD) ); break; + case EM_SETTABSTOPS: + case LB_SETTABSTOPS: + size = wparam * sizeof(UINT); + break; }
return size; diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index 4d88eeaee8b..baa419bba4f 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -1384,8 +1384,9 @@ static void check_params( const struct lparam_hook_test *test, UINT message, if (lparam == (LPARAM)lparam_buffer) return;
- ok ((LPARAM)&message < lparam && lparam < (LPARAM)NtCurrentTeb()->Tib.StackBase, - "lparam is not on the stack\n"); + if (sizeof(void *) != 4 || (test->message != EM_SETTABSTOPS && test->message != LB_SETTABSTOPS)) + ok( (LPARAM)&message < lparam && lparam < (LPARAM)NtCurrentTeb()->Tib.StackBase, + "lparam is not on the stack\n");
switch (test->message) { @@ -1679,6 +1680,7 @@ static void test_wndproc_hook(void) static const SCROLLBARINFO sbi_in = { .xyThumbTop = 6 }; static const SCROLLBARINFO sbi_out = { .xyThumbTop = 60 }; static const DWORD dw_in = 1, dw_out = 2; + static const UINT32 tabstops_in[2] = { 3, 4 };
static const struct lparam_hook_test lparam_hook_tests[] = { @@ -1885,6 +1887,16 @@ static void test_wndproc_hook(void) .lparam = L"\x8""2345678", .lparam_size = sizeof(strbufW), .change_lparam = L"abc\0defg", .check_size = sizeof(WCHAR), .check_lparam = L"abc\0""5678", }, + { + "EM_SETTABSTOPS", EM_SETTABSTOPS, .wparam = ARRAYSIZE(tabstops_in), + .lparam_size = sizeof(tabstops_in), .lparam = &tabstops_in, .poison_lparam = TRUE, + .check_size = sizeof(tabstops_in), + }, + { + "LB_SETTABSTOPS", LB_SETTABSTOPS, .wparam = ARRAYSIZE(tabstops_in), + .lparam_size = sizeof(tabstops_in), .lparam = &tabstops_in, .poison_lparam = TRUE, + .check_size = sizeof(tabstops_in), + }, /* messages that don't change lparam */ { "WM_USER", WM_USER }, { "WM_NOTIFY", WM_NOTIFY },
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/winproc.c | 13 ++++++++++--- dlls/win32u/message.c | 22 ++++++++++++++++++++++ dlls/win32u/tests/win32u.c | 3 +++ 3 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 92392622fc8..ff8f502a0c1 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -877,7 +877,6 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case EM_GETLINE: case EM_SETTABSTOPS: case LB_SETTABSTOPS: - break; case CB_ADDSTRING: case CB_INSERTSTRING: case CB_FINDSTRING: @@ -888,8 +887,6 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case LB_FINDSTRING: case LB_FINDSTRINGEXACT: case LB_SELECTSTRING: - if (!*buffer) return TRUE; - if (!check_string( *buffer, size )) return FALSE; break; case CB_GETLBTEXT: { @@ -1082,6 +1079,16 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) case EM_GETLINE: case EM_SETTABSTOPS: case LB_SETTABSTOPS: + case CB_ADDSTRING: + case CB_INSERTSTRING: + case CB_FINDSTRING: + case CB_FINDSTRINGEXACT: + case CB_SELECTSTRING: + case LB_ADDSTRING: + case LB_INSERTSTRING: + case LB_FINDSTRING: + case LB_FINDSTRINGEXACT: + case LB_SELECTSTRING: { LRESULT *result_ptr = (LRESULT *)buffer - 1; *result_ptr = result; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index eb093fc2981..0c4b69c9a09 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -599,6 +599,18 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa if (!*wparam) return TRUE; minsize = *wparam * sizeof(UINT); break; + case CB_ADDSTRING: + case CB_INSERTSTRING: + case CB_FINDSTRING: + case CB_FINDSTRINGEXACT: + case CB_SELECTSTRING: + case LB_ADDSTRING: + case LB_INSERTSTRING: + case LB_FINDSTRING: + case LB_FINDSTRINGEXACT: + case LB_SELECTSTRING: + if (!*buffer) return TRUE; + break; case WM_WINE_SETWINDOWPOS: { WINDOWPOS wp; @@ -1356,6 +1368,16 @@ size_t user_message_size( UINT message, WPARAM wparam, LPARAM lparam, BOOL other case LB_DIR: case LB_ADDFILE: case EM_REPLACESEL: + case CB_ADDSTRING: + case CB_INSERTSTRING: + case CB_FINDSTRING: + case CB_FINDSTRINGEXACT: + case CB_SELECTSTRING: + case LB_ADDSTRING: + case LB_INSERTSTRING: + case LB_FINDSTRING: + case LB_FINDSTRINGEXACT: + case LB_SELECTSTRING: if (other_process && lparam) size = string_size( lparam_ptr, ansi ); break; case WM_GETMINMAXINFO: diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index baa419bba4f..cbda77f99ac 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -1907,6 +1907,9 @@ static void test_wndproc_hook(void) { "LB_ADDFILE", LB_ADDFILE, .lparam = strbufW, .lparam_init_size = sizeof(strbufW) }, { "EM_REPLACESEL", EM_REPLACESEL, .lparam = strbufW, .lparam_init_size = sizeof(strbufW) }, { "WM_WININICHANGE", WM_WININICHANGE, .lparam = strbufW, .lparam_init_size = sizeof(strbufW) }, + { "CB_ADDSTRING", CB_ADDSTRING }, + { "CB_INSERTSTRING", CB_INSERTSTRING }, + { "LB_ADDSTRING", LB_ADDSTRING }, /* messages not allowed to be sent by NtUserMessageCall */ { "WM_DRAWITEM", WM_DRAWITEM, .wparam = 10,
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/winproc.c | 32 +++------------------------- dlls/win32u/hook.c | 3 ++- dlls/win32u/message.c | 41 ++++++++++++++++++++++++++++++------ dlls/win32u/tests/win32u.c | 6 ------ dlls/win32u/win32u_private.h | 2 +- dlls/wow64win/user.c | 2 ++ 6 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index ff8f502a0c1..dc59413b048 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -754,20 +754,6 @@ static inline void *get_buffer_space( void **buffer, size_t size, size_t prev_si return *buffer; }
-/* check whether a combobox expects strings or ids in CB_ADDSTRING/CB_INSERTSTRING */ -static inline BOOL combobox_has_strings( HWND hwnd ) -{ - DWORD style = GetWindowLongA( hwnd, GWL_STYLE ); - return (!(style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE)) || (style & CBS_HASSTRINGS)); -} - -/* check whether a listbox expects strings or ids in LB_ADDSTRING/LB_INSERTSTRING */ -static inline BOOL listbox_has_strings( HWND hwnd ) -{ - DWORD style = GetWindowLongA( hwnd, GWL_STYLE ); - return (!(style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE)) || (style & LBS_HASSTRINGS)); -} - /* unpack a potentially 64-bit pointer, returning 0 when truncated */ static inline void *unpack_ptr( ULONGLONG ptr64 ) { @@ -802,7 +788,7 @@ static size_t string_size( const void *str, BOOL ansi ) BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, void **buffer, size_t size, BOOL ansi ) { - size_t minsize = 0, prev_size = size; + size_t minsize = 0; union packed_structs *ps = *buffer;
switch(message) @@ -887,23 +873,9 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case LB_FINDSTRING: case LB_FINDSTRINGEXACT: case LB_SELECTSTRING: - break; case CB_GETLBTEXT: - { - size = sizeof(ULONG_PTR); - if (combobox_has_strings( hwnd )) - size = (SendMessageW( hwnd, CB_GETLBTEXTLEN, *wparam, 0 ) + 1) * sizeof(WCHAR); - if (!get_buffer_space( buffer, size, prev_size )) return FALSE; - break; - } case LB_GETTEXT: - { - size = sizeof(ULONG_PTR); - if (listbox_has_strings( hwnd )) - size = (SendMessageW( hwnd, LB_GETTEXTLEN, *wparam, 0 ) + 1) * sizeof(WCHAR); - if (!get_buffer_space( buffer, size, prev_size )) return FALSE; break; - } case LB_GETSELITEMS: if (!get_buffer_space( buffer, *wparam * sizeof(UINT), size )) return FALSE; break; @@ -1089,6 +1061,8 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) case LB_FINDSTRING: case LB_FINDSTRINGEXACT: case LB_SELECTSTRING: + case CB_GETLBTEXT: + case LB_GETTEXT: { LRESULT *result_ptr = (LRESULT *)buffer - 1; *result_ptr = result; diff --git a/dlls/win32u/hook.c b/dlls/win32u/hook.c index 8fcb7ef2796..062f10c4702 100644 --- a/dlls/win32u/hook.c +++ b/dlls/win32u/hook.c @@ -246,7 +246,8 @@ static LRESULT call_hook( struct win_hook_params *info, const WCHAR *module, siz if (params->id == WH_CBT && params->code == HCBT_CREATEWND) { CBT_CREATEWNDW *cbtc = (CBT_CREATEWNDW *)params->lparam; - message_size = user_message_size( WM_NCCREATE, 0, (LPARAM)cbtc->lpcs, TRUE, FALSE ); + message_size = user_message_size( (HWND)params->wparam, WM_NCCREATE, + 0, (LPARAM)cbtc->lpcs, TRUE, FALSE ); lparam_size = lparam_ret_size = 0; }
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 0c4b69c9a09..a32d4bfa1cf 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -611,6 +611,26 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa case LB_SELECTSTRING: if (!*buffer) return TRUE; break; + case CB_GETLBTEXT: + { + size_t prev_size = size; + if (combobox_has_strings( hwnd )) + size = (send_message( hwnd, CB_GETLBTEXTLEN, *wparam, 0 ) + 1) * sizeof(WCHAR); + else + size = sizeof(ULONG_PTR); + if (!get_buffer_space( buffer, size, prev_size )) return FALSE; + break; + } + case LB_GETTEXT: + { + size_t prev_size = size; + if (listbox_has_strings( hwnd )) + size = (send_message( hwnd, LB_GETTEXTLEN, *wparam, 0 ) + 1) * sizeof(WCHAR); + else + size = sizeof(ULONG_PTR); + if (!get_buffer_space( buffer, size, prev_size )) return FALSE; + break; + } case WM_WINE_SETWINDOWPOS: { WINDOWPOS wp; @@ -1338,7 +1358,8 @@ static size_t copy_string( void *ptr, const void *str, BOOL ansi ) * * Calculate size of packed message buffer. */ -size_t user_message_size( UINT message, WPARAM wparam, LPARAM lparam, BOOL other_process, BOOL ansi ) +size_t user_message_size( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, + BOOL other_process, BOOL ansi ) { const void *lparam_ptr = (const void *)lparam; size_t size = 0; @@ -1441,6 +1462,14 @@ size_t user_message_size( UINT message, WPARAM wparam, LPARAM lparam, BOOL other case LB_SETTABSTOPS: size = wparam * sizeof(UINT); break; + case CB_GETLBTEXT: + size = send_message_timeout( hwnd, CB_GETLBTEXTLEN, wparam, 0, SMTO_NORMAL, 0, ansi ); + size = (size + 1) * char_size( ansi ); + break; + case LB_GETTEXT: + size = send_message_timeout( hwnd, LB_GETTEXTLEN, wparam, 0, SMTO_NORMAL, 0, ansi ); + size = (size + 1) * char_size( ansi ); + break; }
return size; @@ -1566,6 +1595,10 @@ static void copy_user_result( void *buffer, size_t size, LRESULT result, UINT me if (!result) memset( buffer, 0, char_size( ansi )); copy_size = string_size( buffer, ansi ); break; + case CB_GETLBTEXT: + case LB_GETTEXT: + copy_size = size; + break; case WM_ASKCBFORMATNAME: copy_size = string_size( buffer, ansi ); break; @@ -1627,10 +1660,6 @@ static void copy_reply( LRESULT result, HWND hwnd, UINT message, WPARAM wparam,
switch(message) { - case CB_GETLBTEXT: - case LB_GETTEXT: - copy_size = (result + 1) * sizeof(WCHAR); - break; case CB_GETCOMBOBOXINFO: copy_size = sizeof(COMBOBOXINFO); break; @@ -1854,7 +1883,7 @@ static LRESULT call_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpar if (!needs_unpack) size = 0; if (!is_current_thread_window( hwnd )) return 0;
- packed_size = user_message_size( msg, wparam, lparam, needs_unpack, ansi ); + packed_size = user_message_size( hwnd, msg, wparam, lparam, needs_unpack, ansi ); if (packed_size) size = packed_size;
/* first the WH_CALLWNDPROC hook */ diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index cbda77f99ac..a435ca47bb4 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -1745,32 +1745,26 @@ static void test_wndproc_hook(void) { "CB_GETLBTEXT", CB_GETLBTEXT, .msg_result = 7, .check_result = 4, .todo_result = TRUE, .lparam_size = sizeof(strbufW), .change_lparam = strbufW, .check_lparam = strbuf4W, - .todo = TRUE }, { "CB_GETLBTEXT2", CB_GETLBTEXT, .msg_result = 9, .check_result = 8, .todo_result = TRUE, .lparam_size = sizeof(strbufW), .change_lparam = strbuf3W, .check_lparam = strbuf3W, - .todo = TRUE }, { "CB_GETLBTEXT3", CB_GETLBTEXT, .lparam_size = sizeof(strbufW), .change_lparam = strbuf3W, .check_lparam = strbuf3W, - .todo = TRUE }, { "LB_GETTEXT", LB_GETTEXT, .msg_result = 7, .check_result = 4, .todo_result = TRUE, .lparam_size = sizeof(strbufW), .change_lparam = strbufW, .check_lparam = strbuf4W, - .todo = TRUE }, { "LB_GETTEXT2", LB_GETTEXT, .msg_result = 9, .check_result = 8, .todo_result = TRUE, .lparam_size = sizeof(strbufW), .change_lparam = strbuf3W, .check_lparam = strbuf3W, - .todo = TRUE }, { "LB_GETTEXT3", LB_GETTEXT, .lparam_size = sizeof(strbufW), .change_lparam = strbuf3W, .check_lparam = strbuf3W, - .todo = TRUE }, { "WM_MDIGETACTIVE", WM_MDIGETACTIVE, .no_wparam_check = TRUE, diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index d23026876da..6380a0808c8 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -140,7 +140,7 @@ extern LRESULT send_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) extern BOOL send_notify_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi ) DECLSPEC_HIDDEN; extern LRESULT send_message_timeout( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, UINT flags, UINT timeout, BOOL ansi ) DECLSPEC_HIDDEN; -extern size_t user_message_size( UINT message, WPARAM wparam, LPARAM lparam, +extern size_t user_message_size( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, BOOL other_process, BOOL ansi ) DECLSPEC_HIDDEN; extern void pack_user_message( void *buffer, size_t size, UINT message, WPARAM wparam, LPARAM lparam, BOOL ansi ) DECLSPEC_HIDDEN; diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 14b76649709..c03fd4cabf9 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -844,6 +844,8 @@ static size_t packed_result_32to64( UINT message, WPARAM wparam, const void *par case LB_GETITEMRECT: case CB_GETDROPPEDCONTROLRECT: case EM_GETLINE: + case CB_GETLBTEXT: + case LB_GETTEXT: break;
default:
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/winproc.c | 3 +-- dlls/win32u/message.c | 12 +++++++++--- dlls/win32u/tests/win32u.c | 6 ++++++ dlls/wow64win/user.c | 1 + 4 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index dc59413b048..a8524c746b3 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -875,9 +875,7 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case LB_SELECTSTRING: case CB_GETLBTEXT: case LB_GETTEXT: - break; case LB_GETSELITEMS: - if (!get_buffer_space( buffer, *wparam * sizeof(UINT), size )) return FALSE; break; case WM_NEXTMENU: { @@ -1063,6 +1061,7 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) case LB_SELECTSTRING: case CB_GETLBTEXT: case LB_GETTEXT: + case LB_GETSELITEMS: { LRESULT *result_ptr = (LRESULT *)buffer - 1; *result_ptr = result; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index a32d4bfa1cf..bb052ade359 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -631,6 +631,9 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa if (!get_buffer_space( buffer, size, prev_size )) return FALSE; break; } + case LB_GETSELITEMS: + if (!get_buffer_space( buffer, *wparam * sizeof(UINT), size )) return FALSE; + break; case WM_WINE_SETWINDOWPOS: { WINDOWPOS wp; @@ -1470,6 +1473,9 @@ size_t user_message_size( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, size = send_message_timeout( hwnd, LB_GETTEXTLEN, wparam, 0, SMTO_NORMAL, 0, ansi ); size = (size + 1) * char_size( ansi ); break; + case LB_GETSELITEMS: + size = wparam * sizeof(UINT); + break; }
return size; @@ -1640,6 +1646,9 @@ static void copy_user_result( void *buffer, size_t size, LRESULT result, UINT me case EM_GETLINE: copy_size = string_size( buffer, ansi ); break; + case LB_GETSELITEMS: + copy_size = wparam * sizeof(UINT); + break; default: return; } @@ -1667,9 +1676,6 @@ static void copy_reply( LRESULT result, HWND hwnd, UINT message, WPARAM wparam, case WM_MOVING: copy_size = sizeof(RECT); break; - case LB_GETSELITEMS: - copy_size = wparam * sizeof(UINT); - break; case WM_MDIGETACTIVE: if (lparam) copy_size = sizeof(BOOL); break; diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index a435ca47bb4..d0f79b5c124 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -1681,6 +1681,7 @@ static void test_wndproc_hook(void) static const SCROLLBARINFO sbi_out = { .xyThumbTop = 60 }; static const DWORD dw_in = 1, dw_out = 2; static const UINT32 tabstops_in[2] = { 3, 4 }; + static const UINT32 items_out[2] = { 1, 2 };
static const struct lparam_hook_test lparam_hook_tests[] = { @@ -1891,6 +1892,11 @@ static void test_wndproc_hook(void) .lparam_size = sizeof(tabstops_in), .lparam = &tabstops_in, .poison_lparam = TRUE, .check_size = sizeof(tabstops_in), }, + { + "LB_GETSELITEMS", LB_GETSELITEMS, + .wparam = ARRAYSIZE(items_out), .msg_result = ARRAYSIZE(items_out), + .lparam_size = sizeof(items_out), .change_lparam = items_out, + }, /* messages that don't change lparam */ { "WM_USER", WM_USER }, { "WM_NOTIFY", WM_NOTIFY }, diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index c03fd4cabf9..326c9256f1d 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -846,6 +846,7 @@ static size_t packed_result_32to64( UINT message, WPARAM wparam, const void *par case EM_GETLINE: case CB_GETLBTEXT: case LB_GETTEXT: + case LB_GETSELITEMS: break;
default:
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/winproc.c | 16 +--------------- dlls/win32u/message.c | 19 ++++++++++++++++--- dlls/win32u/tests/win32u.c | 7 +++++++ dlls/wow64win/user.c | 28 +++++++++++++++++++++++++++- 4 files changed, 51 insertions(+), 19 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index a8524c746b3..f10a8c0d49e 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -761,12 +761,6 @@ static inline void *unpack_ptr( ULONGLONG ptr64 ) return (void *)(ULONG_PTR)ptr64; }
-/* convert a server handle to a generic handle */ -static inline HANDLE unpack_handle( UINT handle ) -{ - return (HANDLE)(INT_PTR)(int)handle; -} - /* make sure that the buffer contains a valid null-terminated Unicode string */ static inline BOOL check_string( LPCWSTR str, size_t size ) { @@ -876,17 +870,8 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case CB_GETLBTEXT: case LB_GETTEXT: case LB_GETSELITEMS: - break; case WM_NEXTMENU: - { - MDINEXTMENU mnm; - if (size < sizeof(ps->mnm)) return FALSE; - mnm.hmenuIn = unpack_handle( ps->mnm.hmenuIn ); - mnm.hmenuNext = unpack_handle( ps->mnm.hmenuNext ); - mnm.hwndNext = unpack_handle( ps->mnm.hwndNext ); - memcpy( *buffer, &mnm, sizeof(mnm) ); break; - } case WM_SIZING: case WM_MOVING: minsize = sizeof(RECT); @@ -1062,6 +1047,7 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) case CB_GETLBTEXT: case LB_GETTEXT: case LB_GETSELITEMS: + case WM_NEXTMENU: { LRESULT *result_ptr = (LRESULT *)buffer - 1; *result_ptr = result; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index bb052ade359..a09aaa9022c 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -634,6 +634,16 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa case LB_GETSELITEMS: if (!get_buffer_space( buffer, *wparam * sizeof(UINT), size )) return FALSE; break; + case WM_NEXTMENU: + { + MDINEXTMENU mnm; + if (size < sizeof(ps->mnm)) return FALSE; + mnm.hmenuIn = wine_server_ptr_handle( ps->mnm.hmenuIn ); + mnm.hmenuNext = wine_server_ptr_handle( ps->mnm.hmenuNext ); + mnm.hwndNext = wine_server_ptr_handle( ps->mnm.hwndNext ); + memcpy( *buffer, &mnm, sizeof(mnm) ); + break; + } case WM_WINE_SETWINDOWPOS: { WINDOWPOS wp; @@ -1476,6 +1486,9 @@ size_t user_message_size( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, case LB_GETSELITEMS: size = wparam * sizeof(UINT); break; + case WM_NEXTMENU: + size = sizeof(MDINEXTMENU); + break; }
return size; @@ -1649,6 +1662,9 @@ static void copy_user_result( void *buffer, size_t size, LRESULT result, UINT me case LB_GETSELITEMS: copy_size = wparam * sizeof(UINT); break; + case WM_NEXTMENU: + copy_size = sizeof(MDINEXTMENU); + break; default: return; } @@ -1679,9 +1695,6 @@ static void copy_reply( LRESULT result, HWND hwnd, UINT message, WPARAM wparam, case WM_MDIGETACTIVE: if (lparam) copy_size = sizeof(BOOL); break; - case WM_NEXTMENU: - copy_size = sizeof(MDINEXTMENU); - break; case WM_MDICREATE: copy_size = sizeof(MDICREATESTRUCTW); break; diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index d0f79b5c124..0f176ea88f5 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -1682,6 +1682,8 @@ static void test_wndproc_hook(void) static const DWORD dw_in = 1, dw_out = 2; static const UINT32 tabstops_in[2] = { 3, 4 }; static const UINT32 items_out[2] = { 1, 2 }; + static const MDINEXTMENU nm_in = { .hmenuIn = (HMENU)0xdeadbeef }; + static const MDINEXTMENU nm_out = { .hmenuIn = (HMENU)1 };
static const struct lparam_hook_test lparam_hook_tests[] = { @@ -1897,6 +1899,11 @@ static void test_wndproc_hook(void) .wparam = ARRAYSIZE(items_out), .msg_result = ARRAYSIZE(items_out), .lparam_size = sizeof(items_out), .change_lparam = items_out, }, + { + "WM_NEXTMENU", WM_NEXTMENU, + .lparam_size = sizeof(nm_in), .lparam = &nm_in, .change_lparam = &nm_out, + .check_size = sizeof(nm_in) + }, /* messages that don't change lparam */ { "WM_USER", WM_USER }, { "WM_NOTIFY", WM_NOTIFY }, diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 326c9256f1d..669506b5147 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -762,6 +762,17 @@ static size_t packed_message_64to32( UINT message, WPARAM wparam, case WM_GETDLGCODE: msg_64to32( params64, params32 ); return sizeof(MSG32); + + case WM_NEXTMENU: + { + MDINEXTMENU32 *next32 = params32; + const MDINEXTMENU *next64 = params64; + + next32->hmenuIn = HandleToLong( next64->hmenuIn ); + next32->hmenuNext = HandleToLong( next64->hmenuNext ); + next32->hwndNext = HandleToLong( next64->hwndNext ); + return sizeof(*next32); + } }
memmove( params32, params64, size ); @@ -828,6 +839,17 @@ static size_t packed_result_32to64( UINT message, WPARAM wparam, const void *par winpos_32to64( params64, params32 ); return sizeof(WINDOWPOS);
+ case WM_NEXTMENU: + { + const MDINEXTMENU32 *next32 = params32; + MDINEXTMENU *next64 = params64; + + next64->hmenuIn = LongToHandle( next32->hmenuIn ); + next64->hmenuNext = LongToHandle( next32->hmenuNext ); + next64->hwndNext = LongToHandle( next32->hwndNext ); + return sizeof(*next64); + } + case WM_GETTEXT: case WM_ASKCBFORMATNAME: case WM_GETMINMAXINFO: @@ -3357,7 +3379,11 @@ static LRESULT message_call_32to64( HWND hwnd, UINT msg, WPARAM wparam, LPARAM l next.hmenuIn = LongToHandle( next32->hmenuIn ); next.hmenuNext = LongToHandle( next32->hmenuNext ); next.hwndNext = LongToHandle( next32->hwndNext ); - return NtUserMessageCall( hwnd, msg, wparam, (LPARAM)&next, result_info, type, ansi ); + ret = NtUserMessageCall( hwnd, msg, wparam, (LPARAM)&next, result_info, type, ansi ); + next32->hmenuIn = HandleToLong( next.hmenuIn ); + next32->hmenuNext = HandleToLong( next.hmenuNext ); + next32->hwndNext = HandleToLong( next.hwndNext ); + return ret; }
case WM_PAINTCLIPBOARD:
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/winproc.c | 5 ++--- dlls/win32u/message.c | 13 +++++++++---- dlls/win32u/tests/win32u.c | 8 ++++++-- dlls/wow64win/user.c | 2 ++ 4 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index f10a8c0d49e..55d0e50b0a5 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -871,11 +871,8 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case LB_GETTEXT: case LB_GETSELITEMS: case WM_NEXTMENU: - break; case WM_SIZING: case WM_MOVING: - minsize = sizeof(RECT); - if (!get_buffer_space( buffer, sizeof(RECT), size )) return FALSE; break; case WM_MDICREATE: { @@ -1048,6 +1045,8 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) case LB_GETTEXT: case LB_GETSELITEMS: case WM_NEXTMENU: + case WM_SIZING: + case WM_MOVING: { LRESULT *result_ptr = (LRESULT *)buffer - 1; *result_ptr = result; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index a09aaa9022c..47f4af53fc5 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -644,6 +644,11 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa memcpy( *buffer, &mnm, sizeof(mnm) ); break; } + case WM_SIZING: + case WM_MOVING: + minsize = sizeof(RECT); + if (!get_buffer_space( buffer, sizeof(RECT), size )) return FALSE; + break; case WM_WINE_SETWINDOWPOS: { WINDOWPOS wp; @@ -1461,6 +1466,8 @@ size_t user_message_size( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, case CB_GETEDITSEL: size = 2 * sizeof(DWORD); break; + case WM_SIZING: + case WM_MOVING: case EM_GETRECT: case LB_GETITEMRECT: case CB_GETDROPPEDCONTROLRECT: @@ -1649,6 +1656,8 @@ static void copy_user_result( void *buffer, size_t size, LRESULT result, UINT me if (lparam) *(DWORD *)lparam = ptr[1]; break; } + case WM_SIZING: + case WM_MOVING: case EM_GETRECT: case EM_SETRECT: case EM_SETRECTNP: @@ -1688,10 +1697,6 @@ static void copy_reply( LRESULT result, HWND hwnd, UINT message, WPARAM wparam, case CB_GETCOMBOBOXINFO: copy_size = sizeof(COMBOBOXINFO); break; - case WM_SIZING: - case WM_MOVING: - copy_size = sizeof(RECT); - break; case WM_MDIGETACTIVE: if (lparam) copy_size = sizeof(BOOL); break; diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index 0f176ea88f5..d31e53405a3 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -1694,9 +1694,13 @@ static void test_wndproc_hook(void) }, { "WM_MOVING", WM_MOVING, - .lparam = &rect_in, .lparam_size = sizeof(RECT), + .lparam = &rect_in, .lparam_size = sizeof(RECT), .change_lparam = &rect_out, + .check_size = sizeof(RECT), + }, + { + "WM_SIZING", WM_SIZING, + .lparam = &rect_in, .lparam_size = sizeof(RECT), .change_lparam = &rect_out, .check_size = sizeof(RECT), - .todo = TRUE }, { "EM_GETRECT", EM_GETRECT, diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 669506b5147..684c365d0df 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -869,6 +869,8 @@ static size_t packed_result_32to64( UINT message, WPARAM wparam, const void *par case CB_GETLBTEXT: case LB_GETTEXT: case LB_GETSELITEMS: + case WM_SIZING: + case WM_MOVING: break;
default:
From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/winproc.c | 80 ++++++++------------------------------ dlls/win32u/message.c | 58 +++++++++++++++++++++++++-- dlls/win32u/tests/win32u.c | 6 +++ dlls/wow64win/user.c | 20 ++++++++++ 4 files changed, 98 insertions(+), 66 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 55d0e50b0a5..217b02f70ad 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -28,22 +28,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(msg); WINE_DECLARE_DEBUG_CHANNEL(relay);
-union packed_structs -{ - struct packed_CREATESTRUCTW cs; - struct packed_DRAWITEMSTRUCT dis; - struct packed_MEASUREITEMSTRUCT mis; - struct packed_DELETEITEMSTRUCT dls; - struct packed_COMPAREITEMSTRUCT cis; - struct packed_WINDOWPOS wp; - struct packed_COPYDATASTRUCT cds; - struct packed_HELPINFO hi; - struct packed_NCCALCSIZE_PARAMS ncp; - struct packed_MSG msg; - struct packed_MDINEXTMENU mnm; - struct packed_MDICREATESTRUCTW mcs; -}; - static inline void *get_buffer( void *static_buffer, size_t size, size_t need ) { if (size >= need) return static_buffer; @@ -754,21 +738,6 @@ static inline void *get_buffer_space( void **buffer, size_t size, size_t prev_si return *buffer; }
-/* unpack a potentially 64-bit pointer, returning 0 when truncated */ -static inline void *unpack_ptr( ULONGLONG ptr64 ) -{ - if ((ULONG_PTR)ptr64 != ptr64) return 0; - return (void *)(ULONG_PTR)ptr64; -} - -/* make sure that the buffer contains a valid null-terminated Unicode string */ -static inline BOOL check_string( LPCWSTR str, size_t size ) -{ - for (size /= sizeof(WCHAR); size; size--, str++) - if (!*str) return TRUE; - return FALSE; -} - static size_t string_size( const void *str, BOOL ansi ) { return ansi ? strlen( str ) + 1 : (wcslen( str ) + 1) * sizeof(WCHAR); @@ -783,7 +752,6 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, void **buffer, size_t size, BOOL ansi ) { size_t minsize = 0; - union packed_structs *ps = *buffer;
switch(message) { @@ -826,6 +794,22 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, *lparam = (LPARAM)ptr; return TRUE; } + case WM_MDICREATE: + { + MDICREATESTRUCTA *mcs = *buffer; + char *str = (char *)(mcs + 1); + + if (!IS_INTRESOURCE(mcs->szClass)) + { + mcs->szClass = str; + str += string_size( mcs->szClass, ansi ); + } + if (!IS_INTRESOURCE(mcs->szTitle)) + { + mcs->szTitle = str; + } + break; + } case WM_GETTEXT: case WM_ASKCBFORMATNAME: case WM_WININICHANGE: @@ -874,37 +858,6 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case WM_SIZING: case WM_MOVING: break; - case WM_MDICREATE: - { - MDICREATESTRUCTW mcs; - WCHAR *str = (WCHAR *)(&ps->mcs + 1); - if (size < sizeof(ps->mcs)) return FALSE; - size -= sizeof(ps->mcs); - - mcs.szClass = unpack_ptr( ps->mcs.szClass ); - mcs.szTitle = unpack_ptr( ps->mcs.szTitle ); - mcs.hOwner = unpack_ptr( ps->mcs.hOwner ); - mcs.x = ps->mcs.x; - mcs.y = ps->mcs.y; - mcs.cx = ps->mcs.cx; - mcs.cy = ps->mcs.cy; - mcs.style = ps->mcs.style; - mcs.lParam = (LPARAM)unpack_ptr( ps->mcs.lParam ); - if (ps->mcs.szClass >> 16) - { - if (!check_string( str, size )) return FALSE; - mcs.szClass = str; - size -= (lstrlenW(str) + 1) * sizeof(WCHAR); - str += lstrlenW(str) + 1; - } - if (ps->mcs.szTitle >> 16) - { - if (!check_string( str, size )) return FALSE; - mcs.szTitle = str; - } - memcpy( *buffer, &mcs, sizeof(mcs) ); - break; - } case WM_MDIGETACTIVE: if (!*lparam) return TRUE; if (!get_buffer_space( buffer, sizeof(BOOL), size )) return FALSE; @@ -1047,6 +1000,7 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) case WM_NEXTMENU: case WM_SIZING: case WM_MOVING: + case WM_MDICREATE: { LRESULT *result_ptr = (LRESULT *)buffer - 1; *result_ptr = result; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 47f4af53fc5..6cf507f5bee 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -649,6 +649,35 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa minsize = sizeof(RECT); if (!get_buffer_space( buffer, sizeof(RECT), size )) return FALSE; break; + case WM_MDICREATE: + { + MDICREATESTRUCTW mcs; + WCHAR *str = (WCHAR *)(&ps->mcs + 1); + if (size < sizeof(ps->mcs)) return FALSE; + size -= sizeof(ps->mcs); + + mcs.szClass = unpack_ptr( ps->mcs.szClass ); + mcs.szTitle = unpack_ptr( ps->mcs.szTitle ); + mcs.hOwner = unpack_ptr( ps->mcs.hOwner ); + mcs.x = ps->mcs.x; + mcs.y = ps->mcs.y; + mcs.cx = ps->mcs.cx; + mcs.cy = ps->mcs.cy; + mcs.style = ps->mcs.style; + mcs.lParam = (LPARAM)unpack_ptr( ps->mcs.lParam ); + if (ps->mcs.szClass >> 16) + { + mcs.szClass = str; + size -= (lstrlenW(str) + 1) * sizeof(WCHAR); + str += lstrlenW(str) + 1; + } + if (ps->mcs.szTitle >> 16) + { + mcs.szTitle = str; + } + memcpy( *buffer, &mcs, sizeof(mcs) ); + break; + } case WM_WINE_SETWINDOWPOS: { WINDOWPOS wp; @@ -1496,6 +1525,14 @@ size_t user_message_size( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, case WM_NEXTMENU: size = sizeof(MDINEXTMENU); break; + case WM_MDICREATE: + { + const MDICREATESTRUCTW *mcs = lparam_ptr; + size = sizeof(*mcs); + if (!IS_INTRESOURCE(mcs->szClass)) size += string_size( mcs->szClass, ansi ); + if (!IS_INTRESOURCE(mcs->szTitle)) size += string_size( mcs->szTitle, ansi ); + break; + } }
return size; @@ -1564,6 +1601,24 @@ void pack_user_message( void *buffer, size_t size, UINT message, case EM_GETLINE: size = sizeof(WORD); break; + case WM_MDICREATE: + { + MDICREATESTRUCTW *mcs = buffer; + char *ptr = (char *)(mcs + 1); + + memcpy( buffer, lparam_ptr, sizeof(*mcs) ); + if (!IS_INTRESOURCE(mcs->szClass)) + { + ptr += copy_string( ptr, mcs->szClass, ansi ); + mcs->szClass = inline_ptr; + } + if (!IS_INTRESOURCE(mcs->szTitle)) + { + copy_string( ptr, mcs->szTitle, ansi ); + mcs->szTitle = inline_ptr; + } + return; + } }
if (size) memcpy( buffer, lparam_ptr, size ); @@ -1700,9 +1755,6 @@ static void copy_reply( LRESULT result, HWND hwnd, UINT message, WPARAM wparam, case WM_MDIGETACTIVE: if (lparam) copy_size = sizeof(BOOL); break; - case WM_MDICREATE: - copy_size = sizeof(MDICREATESTRUCTW); - break; default: return; } diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index d31e53405a3..0acea87ac10 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -1684,6 +1684,7 @@ static void test_wndproc_hook(void) static const UINT32 items_out[2] = { 1, 2 }; static const MDINEXTMENU nm_in = { .hmenuIn = (HMENU)0xdeadbeef }; static const MDINEXTMENU nm_out = { .hmenuIn = (HMENU)1 }; + static const MDICREATESTRUCTW mcs_in = { .x = 1, .y = 2 };
static const struct lparam_hook_test lparam_hook_tests[] = { @@ -1908,6 +1909,11 @@ static void test_wndproc_hook(void) .lparam_size = sizeof(nm_in), .lparam = &nm_in, .change_lparam = &nm_out, .check_size = sizeof(nm_in) }, + { + "WM_MDICREATE", WM_MDICREATE, + .lparam_size = sizeof(mcs_in), .lparam = &mcs_in, .poison_lparam = TRUE, + .check_size = sizeof(mcs_in), + }, /* messages that don't change lparam */ { "WM_USER", WM_USER }, { "WM_NOTIFY", WM_NOTIFY }, diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 684c365d0df..6e86056cdb8 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -773,6 +773,26 @@ static size_t packed_message_64to32( UINT message, WPARAM wparam, next32->hwndNext = HandleToLong( next64->hwndNext ); return sizeof(*next32); } + + case WM_MDICREATE: + { + MDICREATESTRUCT32 mcs32; + const MDICREATESTRUCTW *mcs64 = params64; + + mcs32.szClass = PtrToUlong( mcs64->szClass ); + mcs32.szTitle = PtrToUlong( mcs64->szTitle ); + mcs32.hOwner = HandleToLong( mcs64->hOwner ); + mcs32.x = mcs64->x; + mcs32.y = mcs64->y; + mcs32.cx = mcs64->cx; + mcs32.cy = mcs64->cy; + mcs32.style = mcs64->style; + mcs32.lParam = mcs64->lParam; + size -= sizeof(*mcs64); + if (size) memmove( (char *)params32 + sizeof(mcs32), mcs64 + 1, size ); + memcpy( params32, &mcs32, sizeof(mcs32) ); + return sizeof(mcs32) + size; + } }
memmove( params32, params64, size );
From: Jacek Caban jacek@codeweavers.com
--- dlls/win32u/message.c | 163 ++++++++++++++++++++++++++++++++++++++++++ include/ntuser.h | 163 ------------------------------------------ 2 files changed, 163 insertions(+), 163 deletions(-)
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 6cf507f5bee..9ca3eab23b6 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -66,6 +66,169 @@ struct packed_hook_extra_info ULONGLONG lparam; };
+/* the various structures that can be sent in messages, in platform-independent layout */ +struct packed_CREATESTRUCTW +{ + ULONGLONG lpCreateParams; + ULONGLONG hInstance; + user_handle_t hMenu; + DWORD __pad1; + user_handle_t hwndParent; + DWORD __pad2; + INT cy; + INT cx; + INT y; + INT x; + LONG style; + ULONGLONG lpszName; + ULONGLONG lpszClass; + DWORD dwExStyle; + DWORD __pad3; +}; + +struct packed_DRAWITEMSTRUCT +{ + UINT CtlType; + UINT CtlID; + UINT itemID; + UINT itemAction; + UINT itemState; + user_handle_t hwndItem; + DWORD __pad1; + user_handle_t hDC; + DWORD __pad2; + RECT rcItem; + ULONGLONG itemData; +}; + +struct packed_MEASUREITEMSTRUCT +{ + UINT CtlType; + UINT CtlID; + UINT itemID; + UINT itemWidth; + UINT itemHeight; + ULONGLONG itemData; +}; + +struct packed_DELETEITEMSTRUCT +{ + UINT CtlType; + UINT CtlID; + UINT itemID; + user_handle_t hwndItem; + DWORD __pad; + ULONGLONG itemData; +}; + +struct packed_COMPAREITEMSTRUCT +{ + UINT CtlType; + UINT CtlID; + user_handle_t hwndItem; + DWORD __pad1; + UINT itemID1; + ULONGLONG itemData1; + UINT itemID2; + ULONGLONG itemData2; + DWORD dwLocaleId; + DWORD __pad2; +}; + +struct packed_WINDOWPOS +{ + UINT hwnd; + DWORD __pad1; + user_handle_t hwndInsertAfter; + DWORD __pad2; + INT x; + INT y; + INT cx; + INT cy; + UINT flags; + DWORD __pad3; +}; + +struct packed_COPYDATASTRUCT +{ + ULONGLONG dwData; + DWORD cbData; + ULONGLONG lpData; +}; + +struct packed_HELPINFO +{ + UINT cbSize; + INT iContextType; + INT iCtrlId; + user_handle_t hItemHandle; + DWORD __pad; + ULONGLONG dwContextId; + POINT MousePos; +}; + +struct packed_NCCALCSIZE_PARAMS +{ + RECT rgrc[3]; + ULONGLONG __pad1; + user_handle_t hwnd; + DWORD __pad2; + user_handle_t hwndInsertAfter; + DWORD __pad3; + INT x; + INT y; + INT cx; + INT cy; + UINT flags; + DWORD __pad4; +}; + +struct packed_MSG +{ + user_handle_t hwnd; + DWORD __pad1; + UINT message; + ULONGLONG wParam; + ULONGLONG lParam; + DWORD time; + POINT pt; + DWORD __pad2; +}; + +struct packed_MDINEXTMENU +{ + user_handle_t hmenuIn; + DWORD __pad1; + user_handle_t hmenuNext; + DWORD __pad2; + user_handle_t hwndNext; + DWORD __pad3; +}; + +struct packed_MDICREATESTRUCTW +{ + ULONGLONG szClass; + ULONGLONG szTitle; + ULONGLONG hOwner; + INT x; + INT y; + INT cx; + INT cy; + DWORD style; + ULONGLONG lParam; +}; + +struct packed_COMBOBOXINFO +{ + DWORD cbSize; + RECT rcItem; + RECT rcButton; + DWORD stateButton; + ULONGLONG hwndCombo; + ULONGLONG hwndItem; + ULONGLONG hwndList; +}; + /* the structures are unpacked on top of the packed ones, so make sure they fit */ C_ASSERT( sizeof(struct packed_CREATESTRUCTW) >= sizeof(CREATESTRUCTW) ); C_ASSERT( sizeof(struct packed_DRAWITEMSTRUCT) >= sizeof(DRAWITEMSTRUCT) ); diff --git a/include/ntuser.h b/include/ntuser.h index 7d679e9ede1..9077ebbb589 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -515,169 +515,6 @@ struct ime_driver_call_params
#define WM_SYSTIMER 0x0118
-/* the various structures that can be sent in messages, in platform-independent layout */ -struct packed_CREATESTRUCTW -{ - ULONGLONG lpCreateParams; - ULONGLONG hInstance; - UINT hMenu; - DWORD __pad1; - UINT hwndParent; - DWORD __pad2; - INT cy; - INT cx; - INT y; - INT x; - LONG style; - ULONGLONG lpszName; - ULONGLONG lpszClass; - DWORD dwExStyle; - DWORD __pad3; -}; - -struct packed_DRAWITEMSTRUCT -{ - UINT CtlType; - UINT CtlID; - UINT itemID; - UINT itemAction; - UINT itemState; - UINT hwndItem; - DWORD __pad1; - UINT hDC; - DWORD __pad2; - RECT rcItem; - ULONGLONG itemData; -}; - -struct packed_MEASUREITEMSTRUCT -{ - UINT CtlType; - UINT CtlID; - UINT itemID; - UINT itemWidth; - UINT itemHeight; - ULONGLONG itemData; -}; - -struct packed_DELETEITEMSTRUCT -{ - UINT CtlType; - UINT CtlID; - UINT itemID; - UINT hwndItem; - DWORD __pad; - ULONGLONG itemData; -}; - -struct packed_COMPAREITEMSTRUCT -{ - UINT CtlType; - UINT CtlID; - UINT hwndItem; - DWORD __pad1; - UINT itemID1; - ULONGLONG itemData1; - UINT itemID2; - ULONGLONG itemData2; - DWORD dwLocaleId; - DWORD __pad2; -}; - -struct packed_WINDOWPOS -{ - UINT hwnd; - DWORD __pad1; - UINT hwndInsertAfter; - DWORD __pad2; - INT x; - INT y; - INT cx; - INT cy; - UINT flags; - DWORD __pad3; -}; - -struct packed_COPYDATASTRUCT -{ - ULONGLONG dwData; - DWORD cbData; - ULONGLONG lpData; -}; - -struct packed_HELPINFO -{ - UINT cbSize; - INT iContextType; - INT iCtrlId; - UINT hItemHandle; - DWORD __pad; - ULONGLONG dwContextId; - POINT MousePos; -}; - -struct packed_NCCALCSIZE_PARAMS -{ - RECT rgrc[3]; - ULONGLONG __pad1; - UINT hwnd; - DWORD __pad2; - UINT hwndInsertAfter; - DWORD __pad3; - INT x; - INT y; - INT cx; - INT cy; - UINT flags; - DWORD __pad4; -}; - -struct packed_MSG -{ - UINT hwnd; - DWORD __pad1; - UINT message; - ULONGLONG wParam; - ULONGLONG lParam; - DWORD time; - POINT pt; - DWORD __pad2; -}; - -struct packed_MDINEXTMENU -{ - UINT hmenuIn; - DWORD __pad1; - UINT hmenuNext; - DWORD __pad2; - UINT hwndNext; - DWORD __pad3; -}; - -struct packed_MDICREATESTRUCTW -{ - ULONGLONG szClass; - ULONGLONG szTitle; - ULONGLONG hOwner; - INT x; - INT y; - INT cx; - INT cy; - DWORD style; - ULONGLONG lParam; -}; - -struct packed_COMBOBOXINFO -{ - DWORD cbSize; - RECT rcItem; - RECT rcButton; - DWORD stateButton; - ULONGLONG hwndCombo; - ULONGLONG hwndItem; - ULONGLONG hwndList; -}; -
HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags ); BOOL WINAPI NtUserAddClipboardFormatListener( HWND hwnd );
This merge request was approved by Huw Davies.