winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
April 2022
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
1024 discussions
Start a n
N
ew thread
Jacek Caban : win32u: Introduce inline helpers for NtUserCallTwoParam calls.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: dae11519da7791bb0fe824111a65848816a31875 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=dae11519da7791bb0fe82411…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Apr 13 15:07:48 2022 +0200 win32u: Introduce inline helpers for NtUserCallTwoParam calls. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user.exe16/user.c | 4 ++-- dlls/user32/hook.c | 2 +- dlls/user32/message.c | 2 +- dlls/user32/sysparams.c | 6 ++--- dlls/user32/winproc.c | 2 +- dlls/win32u/sysparams.c | 20 ++++++++++++----- include/ntuser.h | 60 +++++++++++++++++++++++++++++++++++++------------ 7 files changed, 68 insertions(+), 28 deletions(-) diff --git a/dlls/user.exe16/user.c b/dlls/user.exe16/user.c index b94d5958ce0..75b81b0ea05 100644 --- a/dlls/user.exe16/user.c +++ b/dlls/user.exe16/user.c @@ -300,7 +300,7 @@ static HICON store_icon_32( HICON16 icon16, HICON icon ) { memcpy( &ret, (char *)(ptr + 1) + and_size + xor_size, sizeof(ret) ); memcpy( (char *)(ptr + 1) + and_size + xor_size, &icon, sizeof(icon) ); - NtUserCallTwoParam( HandleToUlong(icon), icon16, NtUserSetIconParam ); + NtUserSetIconParam( icon, icon16 ); } release_icon_ptr( icon16, ptr ); } @@ -342,7 +342,7 @@ HICON get_icon_32( HICON16 icon16 ) DeleteObject( iinfo.hbmMask ); DeleteObject( iinfo.hbmColor ); memcpy( (char *)(ptr + 1) + xor_size + and_size, &ret, sizeof(ret) ); - NtUserCallTwoParam( HandleToUlong(ret), icon16, NtUserSetIconParam ); + NtUserSetIconParam( ret, icon16 ); } } release_icon_ptr( icon16, ptr ); diff --git a/dlls/user32/hook.c b/dlls/user32/hook.c index e6db8590934..76033f0dee1 100644 --- a/dlls/user32/hook.c +++ b/dlls/user32/hook.c @@ -379,7 +379,7 @@ HHOOK WINAPI SetWindowsHookExW( INT id, HOOKPROC proc, HINSTANCE inst, DWORD tid */ BOOL WINAPI UnhookWindowsHook( INT id, HOOKPROC proc ) { - return NtUserCallTwoParam( id, (UINT_PTR)proc, NtUserUnhookWindowsHook ); + return NtUserUnhookWindowsHook( id, proc ); } diff --git a/dlls/user32/message.c b/dlls/user32/message.c index 72f5c084432..d2ab94dbf37 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -694,7 +694,7 @@ BOOL WINAPI SendMessageCallbackW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa */ BOOL WINAPI ReplyMessage( LRESULT result ) { - return NtUserCallTwoParam( result, 0, NtUserReplyMessage ); + return NtUserReplyMessage( result, NULL ); } diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index 4bfdde4bfcb..c2b570b6119 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -453,7 +453,7 @@ INT WINAPI GetSystemMetrics( INT index ) */ INT WINAPI GetSystemMetricsForDpi( INT index, UINT dpi ) { - return NtUserCallTwoParam( index, dpi, NtUserGetSystemMetricsForDpi ); + return NtUserGetSystemMetricsForDpi( index, dpi ); } @@ -994,7 +994,7 @@ BOOL WINAPI PhysicalToLogicalPointForPerMonitorDPI( HWND hwnd, POINT *pt ) */ HMONITOR WINAPI MonitorFromRect( const RECT *rect, DWORD flags ) { - return UlongToHandle( NtUserCallTwoParam( (LONG_PTR)rect, flags, NtUserMonitorFromRect )); + return NtUserMonitorFromRect( rect, flags ); } /*********************************************************************** @@ -1045,7 +1045,7 @@ BOOL WINAPI GetMonitorInfoA( HMONITOR monitor, LPMONITORINFO info ) */ BOOL WINAPI GetMonitorInfoW( HMONITOR monitor, LPMONITORINFO info ) { - return NtUserCallTwoParam( HandleToUlong(monitor), (ULONG_PTR)info, NtUserGetMonitorInfo ); + return NtUserGetMonitorInfo( monitor, info ); } #ifdef __i386__ diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 9ac57b5239a..7b9b2000c06 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -1268,7 +1268,7 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) msg.lParam = params->lparam; dispatch_win_proc_params( params ); - NtUserCallTwoParam( result, (UINT_PTR)&msg, NtUserReplyMessage ); + NtUserReplyMessage( result, &msg ); if (buffer != stack_buffer && buffer != params + 1) HeapFree( GetProcessHeap(), 0, buffer ); } diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 0a4fa4f524d..a760a2ca3a4 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -4762,23 +4762,31 @@ ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code { switch(code) { - case NtUserGetMonitorInfo: + case NtUserCallTwoParam_GetMonitorInfo: return get_monitor_info( UlongToHandle(arg1), (MONITORINFO *)arg2 ); - case NtUserGetSystemMetricsForDpi: + + case NtUserCallTwoParam_GetSystemMetricsForDpi: return get_system_metrics_for_dpi( arg1, arg2 ); - case NtUserMonitorFromRect: + + case NtUserCallTwoParam_MonitorFromRect: return HandleToUlong( monitor_from_rect( (const RECT *)arg1, arg2, get_thread_dpi() )); - case NtUserReplyMessage: + + case NtUserCallTwoParam_ReplyMessage: return reply_message_result( arg1, (MSG *)arg2 ); - case NtUserSetIconParam: + + case NtUserCallTwoParam_SetIconParam: return set_icon_param( UlongToHandle(arg1), arg2 ); - case NtUserUnhookWindowsHook: + + case NtUserCallTwoParam_UnhookWindowsHook: return unhook_windows_hook( arg1, (HOOKPROC)arg2 ); + /* temporary exports */ case NtUserAllocWinProc: return (UINT_PTR)alloc_winproc( (WNDPROC)arg1, arg2 ); + case NtUserGetHandlePtr: return (UINT_PTR)get_user_handle_ptr( UlongToHandle(arg1), arg2 ); + default: FIXME( "invalid code %u\n", code ); return 0; diff --git a/include/ntuser.h b/include/ntuser.h index 5cf25aca64f..8d94fc133da 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -131,20 +131,6 @@ struct win_hook_params #define NTUSER_DPI_PER_MONITOR_AWARE_V2 0x00000022 #define NTUSER_DPI_PER_UNAWARE_GDISCALED 0x40006010 -/* NtUserCallTwoParam codes, not compatible with Windows */ -enum -{ - NtUserGetMonitorInfo, - NtUserGetSystemMetricsForDpi, - NtUserMonitorFromRect, - NtUserReplyMessage, - NtUserSetIconParam, - NtUserUnhookWindowsHook, - /* temporary exports */ - NtUserAllocWinProc, - NtUserGetHandlePtr, -}; - /* NtUserCallHwnd codes, not compatible with Windows */ enum { @@ -778,4 +764,50 @@ static inline UINT NtUserRealizePalette( HDC hdc ) return NtUserCallOneParam( HandleToUlong(hdc), NtUserCallOneParam_RealizePalette ); } +/* NtUserCallTwoParam codes, not compatible with Windows */ +enum +{ + NtUserCallTwoParam_GetMonitorInfo, + NtUserCallTwoParam_GetSystemMetricsForDpi, + NtUserCallTwoParam_MonitorFromRect, + NtUserCallTwoParam_ReplyMessage, + NtUserCallTwoParam_SetIconParam, + NtUserCallTwoParam_UnhookWindowsHook, + /* temporary exports */ + NtUserAllocWinProc, + NtUserGetHandlePtr, +}; + +static inline BOOL NtUserGetMonitorInfo( HMONITOR monitor, MONITORINFO *info ) +{ + return NtUserCallTwoParam( HandleToUlong(monitor), (ULONG_PTR)info, + NtUserCallTwoParam_GetMonitorInfo ); +} + +static inline INT NtUserGetSystemMetricsForDpi( INT index, UINT dpi ) +{ + return NtUserCallTwoParam( index, dpi, NtUserCallTwoParam_GetSystemMetricsForDpi ); +} + +static inline HMONITOR NtUserMonitorFromRect( const RECT *rect, DWORD flags ) +{ + ULONG ret = NtUserCallTwoParam( (LONG_PTR)rect, flags, NtUserCallTwoParam_MonitorFromRect ); + return UlongToHandle( ret ); +} + +static inline BOOL NtUserReplyMessage( LRESULT result, MSG *msg ) +{ + return NtUserCallTwoParam( result, (UINT_PTR)msg, NtUserCallTwoParam_ReplyMessage ); +} + +static inline UINT_PTR NtUserSetIconParam( HICON icon, ULONG_PTR param ) +{ + return NtUserCallTwoParam( HandleToUlong(icon), param, NtUserCallTwoParam_SetIconParam ); +} + +static inline BOOL NtUserUnhookWindowsHook( INT id, HOOKPROC proc ) +{ + return NtUserCallTwoParam( id, (UINT_PTR)proc, NtUserCallTwoParam_UnhookWindowsHook ); +} + #endif /* _NTUSER_ */
1
0
0
0
Jacek Caban : win32u: Remove no longer needed NtUserCallOneParam exports.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: 322ee7938386e0c96ba5423ba92a45520dda3f60 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=322ee7938386e0c96ba5423b…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Apr 13 15:07:30 2022 +0200 win32u: Remove no longer needed NtUserCallOneParam exports. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/message.c | 15 --------------- dlls/user32/win.c | 11 ----------- dlls/user32/win.h | 1 - dlls/win32u/message.c | 2 +- dlls/win32u/ntuser_private.h | 3 --- dlls/win32u/sysparams.c | 10 ---------- include/ntuser.h | 2 -- 7 files changed, 1 insertion(+), 43 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c index e45c5fb0425..72f5c084432 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -266,21 +266,6 @@ static void map_wparam_WtoA( MSG *msg, BOOL remove ) } -/*********************************************************************** - * handle_internal_message - * - * Handle an internal Wine message instead of calling the window proc. - */ -LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) -{ - MSG m; - m.hwnd = hwnd; - m.message = msg; - m.wParam = wparam; - m.lParam = lparam; - return NtUserCallOneParam( (UINT_PTR)&m, NtUserHandleInternalMessage ); -} - /* since the WM_DDE_ACK response to a WM_DDE_EXECUTE message should contain the handle * to the memory handle, we keep track (in the server side) of all pairs of handle * used (the client passes its value and the content of the memory handle), and diff --git a/dlls/user32/win.c b/dlls/user32/win.c index ec5a964b3c2..24aeaaeadfd 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -142,17 +142,6 @@ BOOL is_desktop_window( HWND hwnd ) } -/******************************************************************* - * flush_window_surfaces - * - * Flush pending output from all window surfaces. - */ -void flush_window_surfaces( BOOL idle ) -{ - NtUserCallOneParam( idle, NtUserFlushWindowSurfaces ); -} - - /*********************************************************************** * WIN_GetPtr * diff --git a/dlls/user32/win.h b/dlls/user32/win.h index 8e0998e3715..d741965d2be 100644 --- a/dlls/user32/win.h +++ b/dlls/user32/win.h @@ -36,7 +36,6 @@ struct tagDIALOGINFO; /* Window functions */ extern HWND get_hwnd_message_parent(void) DECLSPEC_HIDDEN; extern BOOL is_desktop_window( HWND hwnd ) DECLSPEC_HIDDEN; -extern void flush_window_surfaces( BOOL idle ) DECLSPEC_HIDDEN; extern WND *WIN_GetPtr( HWND hwnd ) DECLSPEC_HIDDEN; extern HWND WIN_GetFullHandle( HWND hwnd ) DECLSPEC_HIDDEN; extern HWND WIN_IsCurrentProcess( HWND hwnd ) DECLSPEC_HIDDEN; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 9479595ae53..36bafccc9a4 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -1079,7 +1079,7 @@ BOOL reply_message_result( LRESULT result, MSG *msg ) * * Handle an internal Wine message instead of calling the window proc. */ -LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) +static LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch(msg) { diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 6ba47443dc7..5aee58fa1e3 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -292,9 +292,6 @@ HICON alloc_cursoricon_handle( BOOL is_icon ) DECLSPEC_HIDDEN; extern void free_dce( struct dce *dce, HWND hwnd ) DECLSPEC_HIDDEN; extern void invalidate_dce( WND *win, const RECT *extra_rect ) DECLSPEC_HIDDEN; -/* message.c */ -LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN; - /* window.c */ HANDLE alloc_user_handle( struct user_object *ptr, unsigned int type ) DECLSPEC_HIDDEN; void *free_user_handle( HANDLE handle, unsigned int type ) DECLSPEC_HIDDEN; diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 080efded675..0a4fa4f524d 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -4729,22 +4729,12 @@ ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code ) params->next_unicode ); } - case NtUserFlushWindowSurfaces: - flush_window_surfaces( arg ); - return 0; - case NtUserGetDeskPattern: return get_entry( &entry_DESKPATTERN, 256, (WCHAR *)arg ); case NtUserGetWinProcPtr: return (UINT_PTR)get_winproc_ptr( UlongToHandle(arg) ); - case NtUserHandleInternalMessage: - { - MSG *msg = (MSG *)arg; - return handle_internal_message( msg->hwnd, msg->message, msg->wParam, msg->lParam ); - } - case NtUserLock: switch( arg ) { diff --git a/include/ntuser.h b/include/ntuser.h index 1535a813a79..5cf25aca64f 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -687,10 +687,8 @@ enum NtUserCallOneParam_RealizePalette, /* temporary exports */ NtUserCallHooks, - NtUserFlushWindowSurfaces, NtUserGetDeskPattern, NtUserGetWinProcPtr, - NtUserHandleInternalMessage, NtUserLock, NtUserSetCallbacks, NtUserSpyGetVKeyName,
1
0
0
0
Jacek Caban : win32u: Introduce inline helpers for NtUserCallOneParam calls.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: 7f64eead50bc8e7a079a2a71986366d7fcad21e1 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=7f64eead50bc8e7a079a2a71…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Apr 13 15:07:13 2022 +0200 win32u: Introduce inline helpers for NtUserCallOneParam calls. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/gdi32/dc.c | 2 +- dlls/user.exe16/message.c | 2 +- dlls/user.exe16/user.c | 2 +- dlls/user.exe16/window.c | 2 +- dlls/user32/cursoricon.c | 4 +- dlls/user32/input.c | 2 +- dlls/user32/message.c | 4 +- dlls/user32/sysparams.c | 10 ++-- dlls/user32/user_main.c | 2 +- dlls/user32/winpos.c | 2 +- dlls/win32u/sysparams.c | 56 +++++++++++++----- dlls/winex11.drv/display.c | 8 +-- include/ntuser.h | 144 +++++++++++++++++++++++++++++++++++---------- 13 files changed, 172 insertions(+), 68 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=7f64eead50bc8e7a079a…
1
0
0
0
Jacek Caban : win32u: Use NtUserCallHwndParam for MirrorRgn implementation.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: dcca04606e83c5c6df8abe5cc183d734bb99e1b5 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=dcca04606e83c5c6df8abe5c…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Apr 13 15:06:51 2022 +0200 win32u: Use NtUserCallHwndParam for MirrorRgn implementation. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/gdi32/objects.c | 2 +- dlls/win32u/sysparams.c | 2 -- dlls/win32u/window.c | 2 ++ include/ntuser.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dlls/gdi32/objects.c b/dlls/gdi32/objects.c index 0260027a484..88b36f279a3 100644 --- a/dlls/gdi32/objects.c +++ b/dlls/gdi32/objects.c @@ -695,7 +695,7 @@ HRGN WINAPI CreatePolygonRgn( const POINT *points, INT count, INT mode ) */ BOOL WINAPI MirrorRgn( HWND hwnd, HRGN hrgn ) { - return NtUserCallTwoParam( HandleToUlong(hwnd), HandleToUlong(hrgn), NtUserMirrorRgn ); + return NtUserCallHwndParam( hwnd, HandleToUlong(hrgn), NtUserMirrorRgn ); } /*********************************************************************** diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 77a6a70e27f..36461d81fde 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -4752,8 +4752,6 @@ ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code return get_monitor_info( UlongToHandle(arg1), (MONITORINFO *)arg2 ); case NtUserGetSystemMetricsForDpi: return get_system_metrics_for_dpi( arg1, arg2 ); - case NtUserMirrorRgn: - return mirror_window_region( UlongToHandle(arg1), UlongToHandle(arg2) ); case NtUserMonitorFromRect: return HandleToUlong( monitor_from_rect( (const RECT *)arg1, arg2, get_thread_dpi() )); case NtUserReplyMessage: diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index f6fd52b9029..b2913b267c4 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -5048,6 +5048,8 @@ ULONG_PTR WINAPI NtUserCallHwndParam( HWND hwnd, DWORD_PTR param, DWORD code ) return is_child( hwnd, UlongToHandle(param) ); case NtUserKillSystemTimer: return kill_system_timer( hwnd, param ); + case NtUserMirrorRgn: + return mirror_window_region( hwnd, UlongToHandle(param) ); case NtUserMonitorFromWindow: return HandleToUlong( monitor_from_window( hwnd, param, NtUserMonitorFromWindow )); case NtUserScreenToClient: diff --git a/include/ntuser.h b/include/ntuser.h index 5190bec5560..e33855261ce 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -166,7 +166,6 @@ enum { NtUserGetMonitorInfo, NtUserGetSystemMetricsForDpi, - NtUserMirrorRgn, NtUserMonitorFromRect, NtUserReplyMessage, NtUserSetIconParam, @@ -213,6 +212,7 @@ enum NtUserGetWindowWord, NtUserIsChild, NtUserKillSystemTimer, + NtUserMirrorRgn, NtUserMonitorFromWindow, NtUserScreenToClient, NtUserSetCaptureWindow,
1
0
0
0
Jacek Caban : win32u: Introduce inline helpers for NtUserCallNoParam calls.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: 6f1e48f4242f817ed04c8db6c162fbd296486f31 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=6f1e48f4242f817ed04c8db6…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Apr 13 15:06:44 2022 +0200 win32u: Introduce inline helpers for NtUserCallNoParam calls. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/input.c | 4 ++-- dlls/user32/menu.c | 2 +- dlls/user32/win.c | 2 +- dlls/win32u/sysparams.c | 15 +++++++++++---- include/ntuser.h | 46 +++++++++++++++++++++++++++++++++------------- 5 files changed, 48 insertions(+), 21 deletions(-) diff --git a/dlls/user32/input.c b/dlls/user32/input.c index 39c215a0b09..2407b9d2960 100644 --- a/dlls/user32/input.c +++ b/dlls/user32/input.c @@ -173,7 +173,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetCursorPos( POINT *pt ) */ BOOL WINAPI DECLSPEC_HOTPATCH ReleaseCapture(void) { - return NtUserCallNoParam( NtUserReleaseCapture ); + return NtUserReleaseCapture(); } @@ -193,7 +193,7 @@ HWND WINAPI GetCapture(void) */ BOOL WINAPI GetInputState(void) { - return NtUserCallNoParam( NtUserGetInputState ); + return NtUserGetInputState(); } diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index c6fdb01c113..185d596fbb8 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -4213,7 +4213,7 @@ BOOL WINAPI SetMenuItemBitmaps( HMENU hMenu, UINT nPos, UINT wFlags, */ HMENU WINAPI CreateMenu(void) { - return UlongToHandle( NtUserCallNoParam( NtUserCreateMenu )); + return NtUserCreateMenu(); } diff --git a/dlls/user32/win.c b/dlls/user32/win.c index 881825b5510..ec5a964b3c2 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -871,7 +871,7 @@ HWND WINAPI GetDesktopWindow(void) struct user_thread_info *thread_info = get_user_thread_info(); if (thread_info->top_window) return thread_info->top_window; - return UlongToHandle( NtUserCallNoParam( NtUserGetDesktopWindow )); + return NtUserGetDesktopWindow(); } diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index c542de61451..77a6a70e27f 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -4632,24 +4632,31 @@ ULONG_PTR WINAPI NtUserCallNoParam( ULONG code ) { switch(code) { - case NtUserCreateMenu: + case NtUserCallNoParam_CreateMenu: return HandleToUlong( create_menu() ); - case NtUserGetDesktopWindow: + + case NtUserCallNoParam_GetDesktopWindow: return HandleToUlong( get_desktop_window() ); - case NtUserGetInputState: + + case NtUserCallNoParam_GetInputState: return get_input_state(); - case NtUserReleaseCapture: + + case NtUserCallNoParam_ReleaseCapture: return release_capture(); + /* temporary exports */ case NtUserExitingThread: exiting_thread_id = GetCurrentThreadId(); return 0; + case NtUserThreadDetach: thread_detach(); return 0; + case NtUserUpdateClipboard: user_driver->pUpdateClipboard(); return 0; + default: FIXME( "invalid code %u\n", code ); return 0; diff --git a/include/ntuser.h b/include/ntuser.h index 081760333e9..5190bec5560 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -131,19 +131,6 @@ struct win_hook_params #define NTUSER_DPI_PER_MONITOR_AWARE_V2 0x00000022 #define NTUSER_DPI_PER_UNAWARE_GDISCALED 0x40006010 -/* NtUserCallNoParam codes, not compatible with Windows */ -enum -{ - NtUserCreateMenu, - NtUserGetDesktopWindow, - NtUserGetInputState, - NtUserReleaseCapture, - /* temporary exports */ - NtUserExitingThread, - NtUserThreadDetach, - NtUserUpdateClipboard, -}; - /* NtUserCallOneParam codes, not compatible with Windows */ enum { @@ -676,4 +663,37 @@ DWORD WINAPI NtUserWaitForInputIdle( HANDLE process, DWORD timeout, BOOL wow ) HWND WINAPI NtUserWindowFromDC( HDC hdc ); HWND WINAPI NtUserWindowFromPoint( LONG x, LONG y ); +/* NtUserCallNoParam codes, not compatible with Windows */ +enum +{ + NtUserCallNoParam_CreateMenu, + NtUserCallNoParam_GetDesktopWindow, + NtUserCallNoParam_GetInputState, + NtUserCallNoParam_ReleaseCapture, + /* temporary exports */ + NtUserExitingThread, + NtUserThreadDetach, + NtUserUpdateClipboard, +}; + +static inline HMENU NtUserCreateMenu(void) +{ + return UlongToHandle( NtUserCallNoParam( NtUserCallNoParam_CreateMenu )); +} + +static inline HWND NtUserGetDesktopWindow(void) +{ + return UlongToHandle( NtUserCallNoParam( NtUserCallNoParam_GetDesktopWindow )); +} + +static inline BOOL NtUserGetInputState(void) +{ + return NtUserCallNoParam( NtUserCallNoParam_GetInputState ); +} + +static inline BOOL NtUserReleaseCapture(void) +{ + return NtUserCallNoParam( NtUserCallNoParam_ReleaseCapture ); +} + #endif /* _NTUSER_ */
1
0
0
0
Daniel Lehman : include: Add some math declarations.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: 47ce525c2b1edf38b58d56a0d9a13e7693ea5b18 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=47ce525c2b1edf38b58d56a0…
Author: Daniel Lehman <dlehman25(a)gmail.com> Date: Mon Apr 11 22:24:05 2022 -0700 include: Add some math declarations. Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- include/msvcrt/math.h | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/include/msvcrt/math.h b/include/msvcrt/math.h index da07303bcd9..dba2b07be37 100644 --- a/include/msvcrt/math.h +++ b/include/msvcrt/math.h @@ -69,12 +69,16 @@ _ACRTIMP double __cdecl fabs(double); _ACRTIMP double __cdecl ldexp(double, int); _ACRTIMP double __cdecl frexp(double, int*); _ACRTIMP double __cdecl modf(double, double*); +_ACRTIMP double __cdecl fdim(double, double); _ACRTIMP double __cdecl fmod(double, double); _ACRTIMP double __cdecl fmin(double, double); _ACRTIMP double __cdecl fmax(double, double); _ACRTIMP double __cdecl erf(double); +_ACRTIMP double __cdecl remainder(double, double); _ACRTIMP double __cdecl remquo(double, double, int*); _ACRTIMP float __cdecl remquof(float, float, int*); +_ACRTIMP double __cdecl lgamma(double); +_ACRTIMP double __cdecl tgamma(double); _ACRTIMP double __cdecl _hypot(double, double); _ACRTIMP double __cdecl _j0(double); @@ -86,18 +90,31 @@ _ACRTIMP double __cdecl _yn(int, double); _ACRTIMP double __cdecl cbrt(double); _ACRTIMP double __cdecl exp2(double); +_ACRTIMP double __cdecl expm1(double); +_ACRTIMP double __cdecl log1p(double); _ACRTIMP double __cdecl log2(double); +_ACRTIMP double __cdecl logb(double); _ACRTIMP double __cdecl rint(double); _ACRTIMP double __cdecl round(double); _ACRTIMP double __cdecl trunc(double); _ACRTIMP float __cdecl cbrtf(float); _ACRTIMP float __cdecl exp2f(float); +_ACRTIMP float __cdecl expm1f(float); +_ACRTIMP float __cdecl log1pf(float); _ACRTIMP float __cdecl log2f(float); +_ACRTIMP float __cdecl logbf(float); _ACRTIMP float __cdecl rintf(float); _ACRTIMP float __cdecl roundf(float); _ACRTIMP float __cdecl truncf(float); +_ACRTIMP int __cdecl ilogb(double); +_ACRTIMP int __cdecl ilogbf(float); + +_ACRTIMP __int64 __cdecl llrint(double); +_ACRTIMP __int64 __cdecl llrintf(float); +_ACRTIMP __int64 __cdecl llround(double); +_ACRTIMP __int64 __cdecl llroundf(float); _ACRTIMP __msvcrt_long __cdecl lrint(double); _ACRTIMP __msvcrt_long __cdecl lrintf(float); _ACRTIMP __msvcrt_long __cdecl lround(double); @@ -105,6 +122,8 @@ _ACRTIMP __msvcrt_long __cdecl lroundf(float); _ACRTIMP double __cdecl scalbn(double,int); _ACRTIMP float __cdecl scalbnf(float,int); +_ACRTIMP double __cdecl scalbln(double,__msvcrt_long); +_ACRTIMP float __cdecl scalblnf(float,__msvcrt_long); _ACRTIMP double __cdecl _copysign (double, double); _ACRTIMP double __cdecl _chgsign (double); @@ -115,6 +134,8 @@ _ACRTIMP int __cdecl _finite(double); _ACRTIMP int __cdecl _isnan(double); _ACRTIMP int __cdecl _fpclass(double); +_ACRTIMP double __cdecl nextafter(double, double); + #ifndef __i386__ _ACRTIMP float __cdecl sinf(float); @@ -199,15 +220,20 @@ _ACRTIMP float __cdecl _logbf(float); _ACRTIMP float __cdecl acoshf(float); _ACRTIMP float __cdecl asinhf(float); _ACRTIMP float __cdecl atanhf(float); +_ACRTIMP float __cdecl erff(float); +_ACRTIMP float __cdecl fdimf(float, float); +_ACRTIMP float __cdecl fmaxf(float, float); +_ACRTIMP float __cdecl fminf(float, float); +_ACRTIMP float __cdecl lgammaf(float); +_ACRTIMP float __cdecl nextafterf(float, float); +_ACRTIMP float __cdecl remainderf(float, float); +_ACRTIMP float __cdecl tgammaf(float); #else static inline float _chgsignf(float x) { return _chgsign(x); } static inline float _copysignf(float x, float y) { return _copysign(x, y); } static inline float _logbf(float x) { return _logb(x); } -static inline float acoshf(float x) { return acosh(x); } -static inline float asinhf(float x) { return asinh(x); } -static inline float atanhf(float x) { return atanh(x); } #endif
1
0
0
0
Zebediah Figura : ntdll: Write a null terminator in NtQueryDirectoryObject.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: 1e750b5b442f6cfbc5f38c8920e7ec1180d190ec URL:
https://source.winehq.org/git/wine.git/?a=commit;h=1e750b5b442f6cfbc5f38c89…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Tue Apr 12 22:00:50 2022 -0500 ntdll: Write a null terminator in NtQueryDirectoryObject. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/tests/om.c | 15 +++++++-------- dlls/ntdll/unix/sync.c | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c index 89cd2b8e3f4..2e03abd13ed 100644 --- a/dlls/ntdll/tests/om.c +++ b/dlls/ntdll/tests/om.c @@ -2532,7 +2532,7 @@ static void test_query_directory(void) status = NtQueryDirectoryObject( dir, info, 0, TRUE, TRUE, &context, &size ); ok( status == STATUS_NO_MORE_ENTRIES, "got %#lx\n", status ); ok( context == 0xdeadbeef, "got context %#lx\n", context ); - todo_wine ok( size == sizeof(*info) || broken(!size) /* WoW64 */, "got size %lu\n", size ); + ok( size == sizeof(*info) || broken(!size) /* WoW64 */, "got size %lu\n", size ); context = 0xdeadbeef; size = 0xdeadbeef; @@ -2547,7 +2547,7 @@ static void test_query_directory(void) status = NtQueryDirectoryObject( dir, info, sizeof(buffer), TRUE, TRUE, &context, &size ); ok( status == STATUS_NO_MORE_ENTRIES, "got %#lx\n", status ); ok( context == 0xdeadbeef, "got context %#lx\n", context ); - todo_wine ok( size == sizeof(*info) || broken(!size) /* WoW64 */, "got size %lu\n", size ); + ok( size == sizeof(*info) || broken(!size) /* WoW64 */, "got size %lu\n", size ); if (size == sizeof(*info)) ok( !memcmp( &info[0], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); @@ -2600,8 +2600,7 @@ static void test_query_directory(void) } check_unicode_string( &info[0].ObjectName, name1 ); check_unicode_string( &info[0].ObjectTypeName, L"Mutant" ); - todo_wine - ok( !memcmp( &info[1], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); + ok( !memcmp( &info[1], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); memset( buffer, 0xcc, sizeof(buffer) ); status = NtQueryDirectoryObject( dir, info, sizeof(buffer), TRUE, FALSE, &context, &size ); @@ -2609,13 +2608,13 @@ static void test_query_directory(void) ok( context == 2, "got context %#lx\n", context ); check_unicode_string( &info[0].ObjectName, name2 ); check_unicode_string( &info[0].ObjectTypeName, L"Mutant" ); - todo_wine ok( !memcmp( &info[1], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); + ok( !memcmp( &info[1], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); size = 0xdeadbeef; status = NtQueryDirectoryObject( dir, info, sizeof(buffer), TRUE, FALSE, &context, &size ); ok( status == STATUS_NO_MORE_ENTRIES, "got %#lx\n", status ); ok( context == 2, "got context %#lx\n", context ); - todo_wine ok( size == sizeof(*info) || broken(!size) /* WoW64 */, "got size %lu\n", size ); + ok( size == sizeof(*info) || broken(!size) /* WoW64 */, "got size %lu\n", size ); memset( buffer, 0xcc, sizeof(buffer) ); status = NtQueryDirectoryObject( dir, info, sizeof(buffer), TRUE, TRUE, &context, &size ); @@ -2623,7 +2622,7 @@ static void test_query_directory(void) ok( context == 1, "got context %#lx\n", context ); check_unicode_string( &info[0].ObjectName, name1 ); check_unicode_string( &info[0].ObjectTypeName, L"Mutant" ); - todo_wine ok( !memcmp( &info[1], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); + ok( !memcmp( &info[1], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); needed_size = size; @@ -2650,7 +2649,7 @@ static void test_query_directory(void) ok( context == 1, "got context %#lx\n", context ); check_unicode_string( &info[0].ObjectName, name1 ); check_unicode_string( &info[0].ObjectTypeName, L"Mutant" ); - todo_wine ok( !memcmp( &info[1], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); + ok( !memcmp( &info[1], &empty_info, sizeof(*info) ), "entry was not cleared\n" ); memset( buffer, 0xcc, sizeof(buffer) ); status = NtQueryDirectoryObject( dir, info, sizeof(buffer), FALSE, TRUE, &context, &size ); diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c index efbe363c210..1695e6ed570 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c @@ -1108,14 +1108,14 @@ NTSTATUS WINAPI NtQueryDirectoryObject( HANDLE handle, DIRECTORY_BASIC_INFORMATI { req->handle = wine_server_obj_handle( handle ); req->index = index; - if (size >= sizeof(*buffer) + 2 * sizeof(WCHAR)) - wine_server_set_reply( req, buffer + 1, size - sizeof(*buffer) - 2 * sizeof(WCHAR) ); + if (size >= 2 * sizeof(*buffer) + 2 * sizeof(WCHAR)) + wine_server_set_reply( req, buffer + 2, size - 2 * sizeof(*buffer) - 2 * sizeof(WCHAR) ); if (!(ret = wine_server_call( req ))) { - buffer->ObjectName.Buffer = (WCHAR *)(buffer + 1); + buffer->ObjectName.Buffer = (WCHAR *)(buffer + 2); buffer->ObjectName.Length = reply->name_len; buffer->ObjectName.MaximumLength = reply->name_len + sizeof(WCHAR); - buffer->ObjectTypeName.Buffer = (WCHAR *)(buffer + 1) + reply->name_len/sizeof(WCHAR) + 1; + buffer->ObjectTypeName.Buffer = (WCHAR *)(buffer + 2) + reply->name_len/sizeof(WCHAR) + 1; buffer->ObjectTypeName.Length = wine_server_reply_size( reply ) - reply->name_len; buffer->ObjectTypeName.MaximumLength = buffer->ObjectTypeName.Length + sizeof(WCHAR); /* make room for the terminating null */ @@ -1123,11 +1123,20 @@ NTSTATUS WINAPI NtQueryDirectoryObject( HANDLE handle, DIRECTORY_BASIC_INFORMATI buffer->ObjectTypeName.Length ); buffer->ObjectName.Buffer[buffer->ObjectName.Length/sizeof(WCHAR)] = 0; buffer->ObjectTypeName.Buffer[buffer->ObjectTypeName.Length/sizeof(WCHAR)] = 0; + + memset( &buffer[1], 0, sizeof(buffer[1]) ); + *context = index + 1; } + else if (ret == STATUS_NO_MORE_ENTRIES) + { + if (size > sizeof(*buffer)) + memset( buffer, 0, sizeof(*buffer) ); + if (ret_size) *ret_size = sizeof(*buffer); + } if (ret_size && (!ret || ret == STATUS_BUFFER_TOO_SMALL)) - *ret_size = sizeof(*buffer) + reply->total_len + 2 * sizeof(WCHAR); + *ret_size = 2 * sizeof(*buffer) + reply->total_len + 2 * sizeof(WCHAR); } SERVER_END_REQ; }
1
0
0
0
Zebediah Figura : ntdll: Don't return STATUS_BUFFER_OVERFLOW if the buffer is too small to hold one entry.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: 4b57ae1674f5ff9ee9380c2c02e43472ba7320c9 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=4b57ae1674f5ff9ee9380c2c…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Tue Apr 12 22:00:49 2022 -0500 ntdll: Don't return STATUS_BUFFER_OVERFLOW if the buffer is too small to hold one entry. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/tests/om.c | 6 +++--- dlls/ntdll/unix/sync.c | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c index 7d7b4b09e73..89cd2b8e3f4 100644 --- a/dlls/ntdll/tests/om.c +++ b/dlls/ntdll/tests/om.c @@ -2530,7 +2530,7 @@ static void test_query_directory(void) context = 0xdeadbeef; size = 0xdeadbeef; status = NtQueryDirectoryObject( dir, info, 0, TRUE, TRUE, &context, &size ); - todo_wine ok( status == STATUS_NO_MORE_ENTRIES, "got %#lx\n", status ); + ok( status == STATUS_NO_MORE_ENTRIES, "got %#lx\n", status ); ok( context == 0xdeadbeef, "got context %#lx\n", context ); todo_wine ok( size == sizeof(*info) || broken(!size) /* WoW64 */, "got size %lu\n", size ); @@ -2630,9 +2630,9 @@ static void test_query_directory(void) size = 0xdeadbeef; context = 0xdeadbeef; status = NtQueryDirectoryObject( dir, info, 0, TRUE, TRUE, &context, &size ); - todo_wine ok( status == STATUS_BUFFER_TOO_SMALL, "got %#lx\n", status ); + ok( status == STATUS_BUFFER_TOO_SMALL, "got %#lx\n", status ); ok( context == 0xdeadbeef, "got context %#lx\n", context ); - todo_wine ok( size == needed_size, "expected size %lu, got %lu\n", needed_size, size ); + ok( size == needed_size, "expected size %lu, got %lu\n", needed_size, size ); size = 0xdeadbeef; memset( buffer, 0xcc, sizeof(buffer) ); diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c index 46facdd2b0e..efbe363c210 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c @@ -1104,13 +1104,12 @@ NTSTATUS WINAPI NtQueryDirectoryObject( HANDLE handle, DIRECTORY_BASIC_INFORMATI if (single_entry) { - if (size <= sizeof(*buffer) + 2 * sizeof(WCHAR)) return STATUS_BUFFER_OVERFLOW; - SERVER_START_REQ( get_directory_entry ) { req->handle = wine_server_obj_handle( handle ); req->index = index; - wine_server_set_reply( req, buffer + 1, size - sizeof(*buffer) - 2*sizeof(WCHAR) ); + if (size >= sizeof(*buffer) + 2 * sizeof(WCHAR)) + wine_server_set_reply( req, buffer + 1, size - sizeof(*buffer) - 2 * sizeof(WCHAR) ); if (!(ret = wine_server_call( req ))) { buffer->ObjectName.Buffer = (WCHAR *)(buffer + 1);
1
0
0
0
Zebediah Figura : ntdll: Return the required length from NtQueryDirectoryObject().
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: 0c7dcd9088c139a41d210baac5edf148e3bde23d URL:
https://source.winehq.org/git/wine.git/?a=commit;h=0c7dcd9088c139a41d210baa…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Tue Apr 12 22:00:48 2022 -0500 ntdll: Return the required length from NtQueryDirectoryObject(). Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/tests/om.c | 2 +- dlls/ntdll/unix/sync.c | 6 +++--- include/wine/server_protocol.h | 4 ++-- server/directory.c | 6 ++++-- server/protocol.def | 1 + server/request.h | 3 ++- server/trace.c | 3 ++- 7 files changed, 15 insertions(+), 10 deletions(-) diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c index 91eb2919cb6..7d7b4b09e73 100644 --- a/dlls/ntdll/tests/om.c +++ b/dlls/ntdll/tests/om.c @@ -2638,7 +2638,7 @@ static void test_query_directory(void) memset( buffer, 0xcc, sizeof(buffer) ); status = NtQueryDirectoryObject( dir, info, needed_size - 1, TRUE, TRUE, &context, &size ); ok( status == STATUS_BUFFER_TOO_SMALL, "got %#lx\n", status ); - todo_wine ok( size == needed_size, "expected size %lu, got %lu\n", needed_size, size ); + ok( size == needed_size, "expected size %lu, got %lu\n", needed_size, size ); status = NtQueryDirectoryObject( dir, info, sizeof(buffer), TRUE, TRUE, &context, NULL ); ok( !status, "got %#lx\n", status ); diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c index e1cc2d818b4..46facdd2b0e 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c @@ -1125,10 +1125,10 @@ NTSTATUS WINAPI NtQueryDirectoryObject( HANDLE handle, DIRECTORY_BASIC_INFORMATI buffer->ObjectName.Buffer[buffer->ObjectName.Length/sizeof(WCHAR)] = 0; buffer->ObjectTypeName.Buffer[buffer->ObjectTypeName.Length/sizeof(WCHAR)] = 0; *context = index + 1; - - if (ret_size) - *ret_size = buffer->ObjectName.MaximumLength + buffer->ObjectTypeName.MaximumLength + sizeof(*buffer); } + + if (ret_size && (!ret || ret == STATUS_BUFFER_TOO_SMALL)) + *ret_size = sizeof(*buffer) + reply->total_len + 2 * sizeof(WCHAR); } SERVER_END_REQ; } diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 6cd901f1e56..8f883b2d97e 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -4646,10 +4646,10 @@ struct get_directory_entry_request struct get_directory_entry_reply { struct reply_header __header; + data_size_t total_len; data_size_t name_len; /* VARARG(name,unicode_str,name_len); */ /* VARARG(type,unicode_str); */ - char __pad_12[4]; }; @@ -6286,7 +6286,7 @@ union generic_reply /* ### protocol_version begin ### */ -#define SERVER_PROTOCOL_VERSION 749 +#define SERVER_PROTOCOL_VERSION 750 /* ### protocol_version end ### */ diff --git a/server/directory.c b/server/directory.c index caaf8c43d33..23d7eb0a2b7 100644 --- a/server/directory.c +++ b/server/directory.c @@ -546,9 +546,11 @@ DECL_HANDLER(get_directory_entry) const struct unicode_str *type_name = &obj->ops->type->name; const WCHAR *name = get_object_name( obj, &name_len ); - if (name_len + type_name->len <= get_reply_max_size()) + reply->total_len = name_len + type_name->len; + + if (reply->total_len <= get_reply_max_size()) { - void *ptr = set_reply_data_size( name_len + type_name->len ); + void *ptr = set_reply_data_size( reply->total_len ); if (ptr) { reply->name_len = name_len; diff --git a/server/protocol.def b/server/protocol.def index d9bed6855e9..9b7b99ae86a 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -3275,6 +3275,7 @@ struct handle_info obj_handle_t handle; /* handle to the directory */ unsigned int index; /* entry index */ @REPLY + data_size_t total_len; /* total length needed for strings */ data_size_t name_len; /* length of the entry name in bytes */ VARARG(name,unicode_str,name_len); /* entry name */ VARARG(type,unicode_str); /* entry type */ diff --git a/server/request.h b/server/request.h index ca99acbdbf6..9ed2f898e6d 100644 --- a/server/request.h +++ b/server/request.h @@ -2011,7 +2011,8 @@ C_ASSERT( sizeof(struct open_directory_reply) == 16 ); C_ASSERT( FIELD_OFFSET(struct get_directory_entry_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct get_directory_entry_request, index) == 16 ); C_ASSERT( sizeof(struct get_directory_entry_request) == 24 ); -C_ASSERT( FIELD_OFFSET(struct get_directory_entry_reply, name_len) == 8 ); +C_ASSERT( FIELD_OFFSET(struct get_directory_entry_reply, total_len) == 8 ); +C_ASSERT( FIELD_OFFSET(struct get_directory_entry_reply, name_len) == 12 ); C_ASSERT( sizeof(struct get_directory_entry_reply) == 16 ); C_ASSERT( FIELD_OFFSET(struct create_symlink_request, access) == 12 ); C_ASSERT( sizeof(struct create_symlink_request) == 16 ); diff --git a/server/trace.c b/server/trace.c index a792b74dc05..d71561e1247 100644 --- a/server/trace.c +++ b/server/trace.c @@ -3978,7 +3978,8 @@ static void dump_get_directory_entry_request( const struct get_directory_entry_r static void dump_get_directory_entry_reply( const struct get_directory_entry_reply *req ) { - fprintf( stderr, " name_len=%u", req->name_len ); + fprintf( stderr, " total_len=%u", req->total_len ); + fprintf( stderr, ", name_len=%u", req->name_len ); dump_varargs_unicode_str( ", name=", min(cur_size,req->name_len) ); dump_varargs_unicode_str( ", type=", cur_size ); }
1
0
0
0
Alexandre Julliard : ntdll: Support overriding the codepage from the manifest.
by Alexandre Julliard
13 Apr '22
13 Apr '22
Module: wine Branch: master Commit: 967ef0bf41fc6742398313ebdebd681c1b33dbc3 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=967ef0bf41fc6742398313eb…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Apr 13 15:58:59 2022 +0200 ntdll: Support overriding the codepage from the manifest. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=52223
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/loader.c | 2 +- dlls/ntdll/locale.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index b6cc53763af..d750f7a7579 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -4126,8 +4126,8 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR RtlInitAnsiString( &func_name, "CtrlRoutine" ); LdrGetProcedureAddress( kernel32->ldr.DllBase, &func_name, 0, (void **)&pCtrlRoutine ); - locale_init(); actctx_init(); + locale_init(); if (wm->ldr.Flags & LDR_COR_ILONLY) status = fixup_imports_ilonly( wm, NULL, entry ); else diff --git a/dlls/ntdll/locale.c b/dlls/ntdll/locale.c index 3c96a742e4e..b95b3522fce 100644 --- a/dlls/ntdll/locale.c +++ b/dlls/ntdll/locale.c @@ -209,6 +209,27 @@ void locale_init(void) oem_cp = get_locale_data( entry->idx )->idefaultcodepage; } + if (!RtlQueryActivationContextApplicationSettings( 0, NULL, L"
http://schemas.microsoft.com/SMI/2019/WindowsSettings
", + L"activeCodePage", locale, ARRAY_SIZE(locale), NULL )) + { + const NLS_LOCALE_LCNAME_INDEX *entry = find_lcname_entry( locale ); + + if (!wcsicmp( locale, L"utf-8" )) + { + ansi_cp = oem_cp = CP_UTF8; + } + else if (!wcsicmp( locale, L"legacy" )) + { + if (ansi_cp == CP_UTF8) ansi_cp = 1252; + if (oem_cp == CP_UTF8) oem_cp = 437; + } + else if ((entry = find_lcname_entry( locale ))) + { + ansi_cp = get_locale_data( entry->idx )->idefaultansicodepage; + oem_cp = get_locale_data( entry->idx )->idefaultcodepage; + } + } + NtGetNlsSectionPtr( 10, 0, NULL, &case_ptr, &size ); NtCurrentTeb()->Peb->UnicodeCaseTableData = case_ptr; if (ansi_cp != CP_UTF8)
1
0
0
0
← Newer
1
...
56
57
58
59
60
61
62
...
103
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Results per page:
10
25
50
100
200