Module: wine Branch: master Commit: 35a59e07b923e42d9bb391b0fef7acd25a9eb9d7 URL: https://gitlab.winehq.org/wine/wine/-/commit/35a59e07b923e42d9bb391b0fef7acd...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Jul 25 18:37:52 2022 +0200
win32u: Use syscall interface for NtUserSystemParametersInfo.
---
dlls/win32u/gdiobj.c | 2 - dlls/win32u/syscall.c | 2 + dlls/win32u/win32u.spec | 4 +- dlls/win32u/win32u_private.h | 3 -- dlls/win32u/wrappers.c | 12 ----- dlls/wow64win/syscall.h | 2 + dlls/wow64win/user.c | 110 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 116 insertions(+), 19 deletions(-)
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c index 0ace308c7ca..cb5297c5676 100644 --- a/dlls/win32u/gdiobj.c +++ b/dlls/win32u/gdiobj.c @@ -1143,8 +1143,6 @@ static struct unix_funcs unix_funcs = NtUserReleaseDC, NtUserScrollDC, NtUserSelectPalette, - NtUserSystemParametersInfo, - NtUserSystemParametersInfoForDpi, NtUserUpdateLayeredWindow,
SetDIBits, diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index 54a0e2436b7..532c08ef2e0 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -281,6 +281,8 @@ static void * const syscalls[] = NtUserShowScrollBar, NtUserShowWindow, NtUserShowWindowAsync, + NtUserSystemParametersInfo, + NtUserSystemParametersInfoForDpi, NtUserThunkedMenuInfo, NtUserThunkedMenuItemInfo, NtUserToUnicodeEx, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index e67db13f5c1..979fa8475b2 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1271,8 +1271,8 @@ @ stub NtUserSoundSentry @ stub NtUserStopAndEndInertia @ stub NtUserSwitchDesktop -@ stdcall NtUserSystemParametersInfo(long long ptr long) -@ stdcall NtUserSystemParametersInfoForDpi(long long ptr long long) +@ stdcall -syscall NtUserSystemParametersInfo(long long ptr long) +@ stdcall -syscall NtUserSystemParametersInfoForDpi(long long ptr long long) @ stub NtUserTestForInteractiveUser @ stdcall -syscall NtUserThunkedMenuInfo(long ptr) @ stdcall -syscall NtUserThunkedMenuItemInfo(long long long long ptr ptr) diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index e1f6b5ba155..d8509c83445 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -195,9 +195,6 @@ struct unix_funcs BOOL (WINAPI *pNtUserScrollDC)( HDC hdc, INT dx, INT dy, const RECT *scroll, const RECT *clip, HRGN ret_update_rgn, RECT *update_rect ); HPALETTE (WINAPI *pNtUserSelectPalette)( HDC hdc, HPALETTE hpal, WORD bkg ); - BOOL (WINAPI *pNtUserSystemParametersInfo)( UINT action, UINT val, PVOID ptr, UINT winini ); - BOOL (WINAPI *pNtUserSystemParametersInfoForDpi)( UINT action, UINT val, PVOID ptr, - UINT winini, UINT dpi ); BOOL (WINAPI *pNtUserUpdateLayeredWindow)( HWND hwnd, HDC hdc_dst, const POINT *pts_dst, const SIZE *size, HDC hdc_src, const POINT *pts_src, COLORREF key, const BLENDFUNCTION *blend, diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c index 57951643399..f331039714e 100644 --- a/dlls/win32u/wrappers.c +++ b/dlls/win32u/wrappers.c @@ -763,18 +763,6 @@ HPALETTE WINAPI NtUserSelectPalette( HDC hdc, HPALETTE hpal, WORD bkg ) return unix_funcs->pNtUserSelectPalette( hdc, hpal, bkg ); }
-BOOL WINAPI NtUserSystemParametersInfo( UINT action, UINT val, PVOID ptr, UINT winini ) -{ - if (!unix_funcs) return FALSE; - return unix_funcs->pNtUserSystemParametersInfo( action, val, ptr, winini ); -} - -BOOL WINAPI NtUserSystemParametersInfoForDpi( UINT action, UINT val, PVOID ptr, UINT winini, UINT dpi ) -{ - if (!unix_funcs) return FALSE; - return unix_funcs->pNtUserSystemParametersInfoForDpi( action, val, ptr, winini, dpi ); -} - BOOL WINAPI NtUserUpdateLayeredWindow( HWND hwnd, HDC hdc_dst, const POINT *pts_dst, const SIZE *size, HDC hdc_src, const POINT *pts_src, COLORREF key, const BLENDFUNCTION *blend, DWORD flags, const RECT *dirty ) diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index 16774a25165..3c59dd00b3e 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -268,6 +268,8 @@ SYSCALL_ENTRY( NtUserShowScrollBar ) \ SYSCALL_ENTRY( NtUserShowWindow ) \ SYSCALL_ENTRY( NtUserShowWindowAsync ) \ + SYSCALL_ENTRY( NtUserSystemParametersInfo ) \ + SYSCALL_ENTRY( NtUserSystemParametersInfoForDpi ) \ SYSCALL_ENTRY( NtUserThunkedMenuInfo ) \ SYSCALL_ENTRY( NtUserThunkedMenuItemInfo ) \ SYSCALL_ENTRY( NtUserToUnicodeEx ) \ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 5328edd5375..4f54921ff02 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -2286,6 +2286,116 @@ NTSTATUS WINAPI wow64_NtUserShowWindowAsync( UINT *args ) return NtUserShowWindowAsync( hwnd, cmd ); }
+NTSTATUS WINAPI wow64_NtUserSystemParametersInfo( UINT *args ) +{ + UINT action = get_ulong( &args ); + UINT val = get_ulong( &args ); + void *ptr = get_ptr( &args ); + UINT winini = get_ulong( &args ); + + switch (action) + { + case SPI_GETSERIALKEYS: + if (ptr) + { + struct + { + UINT cbSize; + DWORD dwFlags; + ULONG lpszActivePort; + ULONG lpszPort; + UINT iBaudRate; + UINT iPortState; + UINT iActive; + } *keys32 = ptr; + SERIALKEYSW keys; + + if (keys32->cbSize != sizeof(*keys32)) return FALSE; + keys.cbSize = sizeof(keys); + if (!NtUserSystemParametersInfo( action, val, &keys, winini )) return FALSE; + keys32->dwFlags = keys.dwFlags; + keys32->lpszActivePort = PtrToUlong( keys.lpszActivePort ); + keys32->lpszPort = PtrToUlong( keys.lpszPort ); + keys32->iBaudRate = keys.iBaudRate; + keys32->iPortState = keys.iPortState; + keys32->iActive = keys.iActive; + return TRUE; + } + break; + + case SPI_GETSOUNDSENTRY: + if (ptr) + { + struct + { + UINT cbSize; + DWORD dwFlags; + DWORD iFSTextEffect; + DWORD iFSTextEffectMSec; + DWORD iFSTextEffectColorBits; + DWORD iFSGrafEffect; + DWORD iFSGrafEffectMSec; + DWORD iFSGrafEffectColor; + DWORD iWindowsEffect; + DWORD iWindowsEffectMSec; + ULONG lpszWindowsEffectDLL; + DWORD iWindowsEffectOrdinal; + } *entry32 = ptr; + SOUNDSENTRYW entry; + + if (entry32->cbSize != sizeof(*entry32)) return FALSE; + entry.cbSize = sizeof(entry); + if (!NtUserSystemParametersInfo( action, val, &entry, winini )) return FALSE; + entry32->dwFlags = entry.dwFlags; + entry32->iFSTextEffect = entry.iFSTextEffect; + entry32->iFSTextEffectMSec = entry.iFSTextEffectMSec; + entry32->iFSTextEffectColorBits = entry.iFSTextEffectColorBits; + entry32->iFSGrafEffect = entry.iFSGrafEffect; + entry32->iFSGrafEffectMSec = entry.iFSGrafEffectMSec; + entry32->iFSGrafEffectColor = entry.iFSGrafEffectColor; + entry32->iWindowsEffect = entry.iWindowsEffect; + entry32->iWindowsEffectMSec = entry.iWindowsEffectMSec; + entry32->lpszWindowsEffectDLL = PtrToUlong( entry.lpszWindowsEffectDLL ); + entry32->iWindowsEffectOrdinal = entry.iWindowsEffectOrdinal; + return TRUE; + } + break; + + case SPI_GETHIGHCONTRAST: + if (ptr) + { + struct + { + UINT cbSize; + DWORD dwFlags; + ULONG lpszDefaultScheme; + } *info32 = ptr; + HIGHCONTRASTW info; + + if (info32->cbSize != sizeof(*info32)) return FALSE; + info.cbSize = sizeof(info); + if (!NtUserSystemParametersInfo( action, val, &info, winini )) return FALSE; + info32->dwFlags = info.dwFlags; + info32->lpszDefaultScheme = PtrToUlong( info.lpszDefaultScheme ); + return TRUE; + } + break; + } + + return NtUserSystemParametersInfo( action, val, ptr, winini ); +} + +NTSTATUS WINAPI wow64_NtUserSystemParametersInfoForDpi( UINT *args ) +{ + UINT action = get_ulong( &args ); + UINT val = get_ulong( &args ); + void *ptr = get_ptr( &args ); + UINT winini = get_ulong( &args ); + UINT dpi = get_ulong( &args ); + + return NtUserSystemParametersInfoForDpi( action, val, ptr, winini, dpi ); +} + NTSTATUS WINAPI wow64_NtUserThunkedMenuInfo( UINT *args ) { HMENU menu = get_handle( &args );