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