Jacek Caban : win32u: Use syscall interface for NtUserSystemParametersInfo.
Alexandre Julliard
julliard at winehq.org
Tue Jul 26 15:40:52 CDT 2022
Module: wine
Branch: master
Commit: 35a59e07b923e42d9bb391b0fef7acd25a9eb9d7
URL: https://gitlab.winehq.org/wine/wine/-/commit/35a59e07b923e42d9bb391b0fef7acd25a9eb9d7
Author: Jacek Caban <jacek at 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 );
More information about the wine-cvs
mailing list