ReactOS 0.4.17-dev-804-g023d8af
sysparams.c File Reference
#include <win32k.h>
Include dependency graph for sysparams.c:

Go to the source code of this file.

Macros

#define dpi   96
 
#define REG2METRIC(reg)   (reg > 0 ? reg : ((-(reg) * dpi + 720) / 1440))
 
#define METRIC2REG(met)   (-((((met) * 1440)- 0) / dpi))
 
#define REQ_INTERACTIVE_WINSTA(err)
 

Functions

 DBG_DEFAULT_CHANNEL (UserSysparams)
 
static INT SpiLoadDWord (PCWSTR pwszKey, PCWSTR pwszValue, INT iValue)
 
static INT SpiLoadInt (PCWSTR pwszKey, PCWSTR pwszValue, INT iValue)
 
static DWORD SpiLoadUserPrefMask (DWORD dValue)
 
static DWORD SpiLoadTimeOut (VOID)
 
static INT SpiLoadMouse (PCWSTR pwszValue, INT iValue)
 
static INT SpiLoadMetric (PCWSTR pwszValue, INT iValue)
 
static VOID SpiLoadFont (PLOGFONTW plfOut, LPWSTR pwszValueName, PLOGFONTW plfDefault)
 
static VOID SpiFixupValues (VOID)
 
static VOID SpiUpdatePerUserSystemParameters (VOID)
 
BOOL InitSysParams (VOID)
 
BOOL APIENTRY NtUserUpdatePerUserSystemParameters (DWORD dwReserved, BOOL bEnable)
 
static VOID SpiStoreDWord (PCWSTR pwszKey, PCWSTR pwszValue, DWORD Value)
 
static VOID SpiStoreSz (PCWSTR pwszKey, PCWSTR pwszValue, PCWSTR pwsz)
 
static VOID SpiStoreSzInt (PCWSTR pwszKey, PCWSTR pwszValue, INT iValue)
 
static VOID SpiStoreMetric (LPCWSTR pwszValue, INT iValue)
 
static VOID SpiStoreFont (PCWSTR pwszValue, LOGFONTW *plogfont)
 
static UINT_PTR SpiMemCopy (PVOID pvDst, PVOID pvSrc, ULONG cbSize, BOOL bProtect)
 
static UINT_PTR SpiGet (PVOID pvParam, PVOID pvData, ULONG cbSize, FLONG fl)
 
static UINT_PTR SpiSet (PVOID pvData, PVOID pvParam, ULONG cbSize, FLONG fl)
 
static UINT_PTR SpiGetEx (PVOID pvParam, PVOID pvData, ULONG cbSize, FLONG fl)
 
static UINT_PTR SpiGetInt (PVOID pvParam, PVOID piValue, FLONG fl)
 
static UINT_PTR SpiSetYesNo (BOOL *pbData, BOOL bValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl)
 
static UINT_PTR SpiSetBool (BOOL *pbData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl)
 
static UINT_PTR SpiSetDWord (PVOID pvData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl)
 
static UINT_PTR SpiSetInt (PVOID pvData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl)
 
static UINT_PTR SpiSetMetric (PVOID pvData, INT iValue, PCWSTR pwszValue, FLONG fl)
 
static UINT_PTR SpiSetUserPref (DWORD dwMask, PVOID pvValue, FLONG fl)
 
static UINT_PTR SpiGetUserPref (DWORD dwMask, PVOID pvParam, FLONG fl)
 
HBITMAP IntStretchWallpaper (_In_ PWND pwndDesktop, _In_ HBITMAP hBitmap)
 
static UINT_PTR SpiSetWallpaper (PVOID pvParam, FLONG fl)
 
static BOOL SpiNotifyNCMetricsChanged (VOID)
 
static UINT_PTR SpiGetSet (UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl)
 
static BOOL SpiGetSetProbeBuffer (UINT uiAction, UINT uiParam, PVOID pvParam)
 
BOOL FASTCALL UserSystemParametersInfo (UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
 
BOOL APIENTRY NtUserSystemParametersInfo (UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
 

Variables

SPIVALUES gspv
 
BOOL gbSpiInitialized = FALSE
 
BOOL g_PaintDesktopVersion = FALSE
 
BOOL g_bWindowSnapEnabled = TRUE
 
static const WCHARKEY_MOUSE = L"Control Panel\\Mouse"
 
static const WCHARVAL_MOUSE1 = L"MouseThreshold1"
 
static const WCHARVAL_MOUSE2 = L"MouseThreshold2"
 
static const WCHARVAL_MOUSE3 = L"MouseSpeed"
 
static const WCHARVAL_MOUSETRAILS = L"MouseTrails"
 
static const WCHARVAL_DBLCLKWIDTH = L"DoubleClickWidth"
 
static const WCHARVAL_DBLCLKHEIGHT = L"DoubleClickHeight"
 
static const WCHARVAL_DBLCLKTIME = L"DoubleClickSpeed"
 
static const WCHARVAL_SNAPDEFBTN = L"SnapToDefaultButton"
 
static const WCHARVAL_SWAP = L"SwapMouseButtons"
 
static const WCHARVAL_HOVERTIME = L"MouseHoverTime"
 
static const WCHARVAL_HOVERWIDTH = L"MouseHoverWidth"
 
static const WCHARVAL_HOVERHEIGHT = L"MouseHoverHeight"
 
static const WCHARVAL_SENSITIVITY = L"MouseSensitivity"
 
static const WCHARKEY_DESKTOP = L"Control Panel\\Desktop"
 
static const WCHARVAL_SCRTO = L"ScreenSaveTimeOut"
 
static const WCHARVAL_SCRNSV = L"SCRNSAVE.EXE"
 
static const WCHARVAL_SCRACT = L"ScreenSaveActive"
 
static const WCHARVAL_GRID = L"GridGranularity"
 
static const WCHARVAL_DRAG = L"DragFullWindows"
 
static const WCHARVAL_DRAGHEIGHT = L"DragHeight"
 
static const WCHARVAL_DRAGWIDTH = L"DragWidth"
 
static const WCHARVAL_FONTSMOOTHING = L"FontSmoothing"
 
static const WCHARVAL_FONTSMOOTHINGTYPE = L"FontSmoothingType"
 
static const WCHARVAL_FONTSMOOTHINGCONTRAST = L"FontSmoothingGamma"
 
static const WCHARVAL_FONTSMOOTHINGORIENTATION = L"FontSmoothingOrientation"
 
static const WCHARVAL_SCRLLLINES = L"WheelScrollLines"
 
static const WCHARVAL_CLICKLOCKTIME = L"ClickLockTime"
 
static const WCHARVAL_PAINTDESKVER = L"PaintDesktopVersion"
 
static const WCHARVAL_CARETRATE = L"CursorBlinkRate"
 
static const WCHARVAL_CARETWIDTH = L"CaretWidth"
 
static const WCHARVAL_USERPREFMASK = L"UserPreferencesMask"
 
static const WCHARVAL_SNAP_ENABLED = L"WindowArrangementActive"
 
static const WCHARVAL_SNAP_DOCKMOVING = L"DockMoving"
 
static const WCHARKEY_MDALIGN = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
 
static const WCHARVAL_MDALIGN = L"MenuDropAlignment"
 
static const WCHARKEY_METRIC = L"Control Panel\\Desktop\\WindowMetrics"
 
static const WCHARVAL_BORDER = L"BorderWidth"
 
static const WCHARVAL_ICONSPC = L"IconSpacing"
 
static const WCHARVAL_ICONVSPC = L"IconVerticalspacing"
 
static const WCHARVAL_ITWRAP = L"IconTitleWrap"
 
static const WCHARKEY_SOUND = L"Control Panel\\Sound"
 
static const WCHARVAL_BEEP = L"Beep"
 
static const WCHARKEY_KBD = L"Control Panel\\Keyboard"
 
static const WCHARVAL_KBDSPD = L"KeyboardSpeed"
 
static const WCHARVAL_KBDDELAY = L"KeyboardDelay"
 
static const WCHARKEY_INPUT_METHOD = L"Control Panel\\Input Method"
 
static const WCHARKEY_SHOWSNDS = L"Control Panel\\Accessibility\\ShowSounds"
 
static const WCHARKEY_KDBPREF = L"Control Panel\\Accessibility\\Keyboard Preference"
 
static const WCHARKEY_SCRREAD = L"Control Panel\\Accessibility\\Blind Access"
 
static const WCHARVAL_ON = L"On"
 
static const WCHARKEY_MOUSEKEYS = L"Control Panel\\Accessibility\\MouseKeys"
 
static const WCHARVAL_MOUSEKEYS_FLAGS = L"Flags"
 
static const WCHARVAL_MOUSEKEYS_MAX = L"MaximumSpeed"
 
static const WCHARVAL_MOUSEKEYS_TIMETOMAX = L"TimeToMaximumSpeed"
 

Macro Definition Documentation

◆ dpi

#define dpi   96

Definition at line 23 of file sysparams.c.

◆ METRIC2REG

#define METRIC2REG (   met)    (-((((met) * 1440)- 0) / dpi))

Definition at line 26 of file sysparams.c.

◆ REG2METRIC

#define REG2METRIC (   reg)    (reg > 0 ? reg : ((-(reg) * dpi + 720) / 1440))

Definition at line 25 of file sysparams.c.

◆ REQ_INTERACTIVE_WINSTA

#define REQ_INTERACTIVE_WINSTA (   err)
Value:
do { \
if (GetW32ProcessInfo()->prpwinsta != InputWindowStation) \
{ \
if (GetW32ProcessInfo()->prpwinsta == NULL) \
{ \
ERR("NtUserSystemParametersInfo called without active window station, and it requires an interactive one\n"); \
} \
else \
{ \
ERR("NtUserSystemParametersInfo requires interactive window station (current is '%wZ')\n", \
} \
EngSetLastError(err); \
return 0; \
} \
} while (0)
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
struct _PROCESSINFO * GetW32ProcessInfo(VOID)
Definition: misc.c:800
#define OBJECT_HEADER_TO_NAME_INFO(h)
Definition: obtypes.h:100
#define OBJECT_TO_OBJECT_HEADER(o)
Definition: obtypes.h:97
PWINSTATION_OBJECT InputWindowStation
Definition: winsta.c:21
#define err(...)

Definition at line 28 of file sysparams.c.

Function Documentation

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( UserSysparams  )

◆ InitSysParams()

BOOL InitSysParams ( VOID  )

Definition at line 371 of file sysparams.c.

372{
375 return TRUE;
376}
#define TRUE
Definition: types.h:120
static VOID SpiUpdatePerUserSystemParameters(VOID)
Definition: sysparams.c:229
BOOL gbSpiInitialized
Definition: sysparams.c:18

◆ IntStretchWallpaper()

HBITMAP IntStretchWallpaper ( _In_ PWND  pwndDesktop,
_In_ HBITMAP  hBitmap 
)

Definition at line 1988 of file desktop.c.

1991{
1992 HDC hWallpaperDC;
1993 HBITMAP hNewBitmap;
1994 POINT ptSrc, ptDst;
1995 SIZE szDesk, szSrc, szDst;
1996
1997 if (!hBitmap)
1998 return NULL;
1999
2000 IntCalcWallpaperCoordinates(pwndDesktop, &szDesk, &szSrc, &szDst, &ptSrc, &ptDst);
2001
2003 if (hWallpaperDC)
2004 {
2005 hNewBitmap = NtGdiCreateCompatibleBitmap(ScreenDeviceContext, szDesk.cx, szDesk.cy);
2006 if (hNewBitmap)
2007 {
2008 HBITMAP hOldBitmap1, hOldBitmap2;
2009
2010 hOldBitmap1 = NtGdiSelectBitmap(hSystemBM, hNewBitmap);
2011 hOldBitmap2 = NtGdiSelectBitmap(hWallpaperDC, hBitmap);
2012
2013 /*
2014 * Stretch the bitmap to the required coordinates
2015 * on the system memory DC first,
2016 * and then simply blit the result to an ouput hDC
2017 * to show the bitmap on the desktop.
2018 * Fixes improper wallpaper painting.
2019 */
2021 ptDst.x,
2022 ptDst.y,
2023 szDst.cx,
2024 szDst.cy,
2025 hWallpaperDC,
2026 ptSrc.x,
2027 ptSrc.y,
2028 szSrc.cx,
2029 szSrc.cy,
2030 SRCCOPY,
2031 0);
2032
2033 NtGdiSelectBitmap(hSystemBM, hOldBitmap1);
2034 NtGdiSelectBitmap(hWallpaperDC, hOldBitmap2);
2035 NtGdiDeleteObjectApp(hWallpaperDC);
2038 return hNewBitmap;
2039 }
2040 NtGdiDeleteObjectApp(hWallpaperDC);
2041 }
2042 return NULL;
2043}
BOOL NTAPI GreSetBitmapOwner(_In_ HBITMAP hbmp, _In_ ULONG ulOwner)
Definition: bitmaps.c:17
static HBITMAP hBitmap
Definition: timezone.c:26
HDC hSystemBM
Definition: stockobj.c:52
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
#define GDI_OBJ_HMGR_PUBLIC
Definition: ntgdihdl.h:116
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiCreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
__kernel_entry W32KAPI HDC APIENTRY NtGdiCreateCompatibleDC(_In_opt_ HDC hdc)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiStretchBlt(_In_ HDC hdcDst, _In_ INT xDst, _In_ INT yDst, _In_ INT cxDst, _In_ INT cyDst, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_ DWORD dwRop, _In_ DWORD dwBackColor)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiSelectBitmap(_In_ HDC hdc, _In_ HBITMAP hbm)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiDeleteObjectApp(_In_ HANDLE hobj)
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
static VOID IntCalcWallpaperCoordinates(_In_ PWND pwndDesktop, _Out_ PSIZE pszDesk, _Out_ PSIZE pszSrc, _Out_ PSIZE pszDst, _Out_ PPOINT pptSrc, _Out_ PPOINT pptDst)
Definition: desktop.c:1857
HDC ScreenDeviceContext
Definition: desktop.c:52
#define SRCCOPY
Definition: wingdi.h:333

Referenced by SpiSetWallpaper().

◆ NtUserSystemParametersInfo()

BOOL APIENTRY NtUserSystemParametersInfo ( UINT  uiAction,
UINT  uiParam,
PVOID  pvParam,
UINT  fWinIni 
)

Definition at line 2200 of file sysparams.c.

2205{
2206 BOOL bResult;
2207
2208 TRACE("Enter NtUserSystemParametersInfo(%u)\n", uiAction);
2210
2211 // FIXME: Get rid of the flags and only use this from um. kernel can access data directly.
2212 /* Set UM memory protection flag */
2213 fWinIni |= SPIF_PROTECT;
2214
2215 /* Call internal function */
2216 bResult = UserSystemParametersInfo(uiAction, uiParam, pvParam, fWinIni);
2217
2218 TRACE("Leave NtUserSystemParametersInfo, returning %d\n", bResult);
2219 UserLeave();
2220
2221 return bResult;
2222}
unsigned int BOOL
Definition: ntddk_ex.h:94
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:255
VOID FASTCALL UserEnterExclusive(VOID)
Definition: ntuser.c:247
#define TRACE(s)
Definition: solgame.cpp:4
#define SPIF_PROTECT
Definition: sysparams.h:13
BOOL FASTCALL UserSystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
Definition: sysparams.c:2137

Referenced by DrawFocusRect(), RealSystemParametersInfoA(), RealSystemParametersInfoW(), SetDoubleClickTime(), START_TEST(), Test_NtUserSystemParametersInfo_fWinIni(), Test_NtUserSystemParametersInfo_Params(), Test_SPI_SETACCESSTIMEOUT(), Test_SPI_SETBEEP(), Test_SPI_SETBORDER(), Test_SPI_SETDESKWALLPAPER(), Test_SPI_SETFASTTASKSWITCH(), Test_SPI_SETICONMETRICS(), Test_SPI_SETICONTITLELOGFONT(), Test_SPI_SETMENUANIMATION(), Test_SPI_SETMINIMIZEDMETRICS(), Test_SPI_SETMOUSE(), Test_SPI_SETMOUSEBUTTONSWAP(), Test_SPI_SETNONCLIENTMETRICS(), Test_SPI_SETSTICKYKEYS(), Test_SPI_SETWORKAREA(), and Test_UserPref().

◆ NtUserUpdatePerUserSystemParameters()

BOOL APIENTRY NtUserUpdatePerUserSystemParameters ( DWORD  dwReserved,
BOOL  bEnable 
)

Definition at line 381 of file sysparams.c.

384{
385 BOOL bResult;
386
387 TRACE("Enter NtUserUpdatePerUserSystemParameters\n");
389
391 if(bEnable)
393 else
395 bResult = TRUE;
396
397 TRACE("Leave NtUserUpdatePerUserSystemParameters, returning %d\n", bResult);
398 UserLeave();
399
400 return bResult;
401}
#define FALSE
Definition: types.h:117
static const WCHAR * KEY_DESKTOP
Definition: sysparams.c:61
BOOL g_PaintDesktopVersion
Definition: sysparams.c:19
static INT SpiLoadDWord(PCWSTR pwszKey, PCWSTR pwszValue, INT iValue)
Definition: sysparams.c:118
static const WCHAR * VAL_PAINTDESKVER
Definition: sysparams.c:75
_In_ BOOL bEnable
Definition: winddi.h:3426

Referenced by START_TEST(), UpdatePerUserSystemParameters(), and UserInitialize().

◆ SpiFixupValues()

static VOID SpiFixupValues ( VOID  )
static

Definition at line 205 of file sysparams.c.

206{
207 /* Fixup values */
208 gspv.ncm.iCaptionWidth = max(gspv.ncm.iCaptionWidth, 8);
209 gspv.ncm.iBorderWidth = max(gspv.ncm.iBorderWidth, 1);
210 gspv.ncm.iScrollWidth = max(gspv.ncm.iScrollWidth, 8);
211 gspv.ncm.iScrollHeight = max(gspv.ncm.iScrollHeight, 8);
212// gspv.ncm.iMenuHeight = max(gspv.ncm.iMenuHeight, gspv.tmMenuFont.tmHeight);
213// gspv.ncm.iMenuHeight = max(gspv.ncm.iMenuHeight,
214// 2 + gspv.tmMenuFont.tmHeight +
215// gspv.tmMenuFont.tmExternalLeading);
216 if (gspv.iDblClickTime == 0) gspv.iDblClickTime = 500;
217
218 // FIXME: Hack!!!
221
224
225}
TEXTMETRICW tmCaptionFont
Definition: sysparams.h:139
NONCLIENTMETRICSW ncm
Definition: sysparams.h:51
INT iDblClickTime
Definition: sysparams.h:90
TEXTMETRICW tmMenuFont
Definition: sysparams.h:138
LONG tmExternalLeading
Definition: wingdi.h:2833
LONG tmHeight
Definition: wingdi.h:2829
#define max(a, b)
Definition: svc.c:63
SPIVALUES gspv
Definition: sysparams.c:17

Referenced by SpiUpdatePerUserSystemParameters(), and UserSystemParametersInfo().

◆ SpiGet()

static UINT_PTR SpiGet ( PVOID  pvParam,
PVOID  pvData,
ULONG  cbSize,
FLONG  fl 
)
inlinestatic

Definition at line 498 of file sysparams.c.

499{
501 return SpiMemCopy(pvParam, pvData, cbSize, fl & SPIF_PROTECT);
502}
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
Definition: netsh.h:116
#define REQ_INTERACTIVE_WINSTA(err)
Definition: sysparams.c:28
static UINT_PTR SpiMemCopy(PVOID pvDst, PVOID pvSrc, ULONG cbSize, BOOL bProtect)
Definition: sysparams.c:466
_In_ FLONG fl
Definition: winddi.h:1279

Referenced by SpiGetEx(), SpiGetInt(), and SpiGetSet().

◆ SpiGetEx()

static UINT_PTR SpiGetEx ( PVOID  pvParam,
PVOID  pvData,
ULONG  cbSize,
FLONG  fl 
)
inlinestatic

Definition at line 514 of file sysparams.c.

515{
517 /* Get the cbSite member from UM memory */
518 if (!SpiSet(&cbBufSize, pvParam, sizeof(ULONG), fl))
519 return 0;
520 /* Verify the correct size */
521 if (cbBufSize != cbSize)
522 return 0;
523 return SpiGet(pvParam, pvData, cbSize, fl);
524}
_In_ DWORD _In_ DWORD cbBufSize
Definition: winsvc.h:430
uint32_t ULONG
Definition: typedefs.h:59
static UINT_PTR SpiSet(PVOID pvData, PVOID pvParam, ULONG cbSize, FLONG fl)
Definition: sysparams.c:506
static UINT_PTR SpiGet(PVOID pvParam, PVOID pvData, ULONG cbSize, FLONG fl)
Definition: sysparams.c:498

Referenced by SpiGetSet().

◆ SpiGetInt()

static UINT_PTR SpiGetInt ( PVOID  pvParam,
PVOID  piValue,
FLONG  fl 
)
inlinestatic

Definition at line 528 of file sysparams.c.

529{
530 return SpiGet(pvParam, piValue, sizeof(INT), fl);
531}
int32_t INT
Definition: typedefs.h:58

Referenced by SpiGetSet(), and SpiGetUserPref().

◆ SpiGetSet()

static UINT_PTR SpiGetSet ( UINT  uiAction,
UINT  uiParam,
PVOID  pvParam,
FLONG  fl 
)
static

Definition at line 837 of file sysparams.c.

838{
839 switch (uiAction)
840 {
841 case SPI_GETBEEP:
842 return SpiGetInt(pvParam, &gspv.bBeep, fl);
843
844 case SPI_SETBEEP:
845 return SpiSetYesNo(&gspv.bBeep, uiParam, KEY_SOUND, VAL_BEEP, fl);
846
847 case SPI_GETMOUSE:
848 return SpiGet(pvParam, &gspv.caiMouse, 3 * sizeof(INT), fl);
849
850 case SPI_SETMOUSE:
851 if (!SpiSet(&gspv.caiMouse, pvParam, 3 * sizeof(INT), fl))
852 return 0;
854 {
858 }
859 return (UINT_PTR)KEY_MOUSE;
860
861 case SPI_GETBORDER:
862 return SpiGetInt(pvParam, &gspv.ncm.iBorderWidth, fl);
863
864 case SPI_SETBORDER:
865 uiParam = max(uiParam, 1);
866 return SpiSetInt(&gspv.ncm.iBorderWidth, uiParam, KEY_METRIC, VAL_BORDER, fl);
867
869 return SpiGetInt(pvParam, &gspv.dwKbdSpeed, fl);
870
872 return SpiSetInt(&gspv.dwKbdSpeed, uiParam, KEY_KBD, VAL_KBDSPD, fl);
873
874 case SPI_LANGDRIVER:
875 ERR("SPI_LANGDRIVER is unimplemented\n");
876 break;
877
879 return SpiGetInt(pvParam, &gspv.iScrSaverTimeout, fl);
880
883
885 return SpiGetInt(pvParam, &gspv.bScrSaverActive, fl);
886
889
891 return SpiGetInt(pvParam, &gspv.uiGridGranularity, fl);
892
895
896 case SPI_GETDESKWALLPAPER:
897 uiParam = min(uiParam, gspv.ustrWallpaper.Length + 1UL);
898 return SpiGet(pvParam, gspv.awcWallpaper, uiParam, fl);
899
901 return SpiSetWallpaper(pvParam, fl);
902
904 ERR("SPI_SETDESKPATTERN is unimplemented\n");
905 break;
906
908 return SpiGetInt(pvParam, &gspv.iKbdDelay, fl);
909
911 return SpiSetInt(&gspv.iKbdDelay, uiParam, KEY_KBD, VAL_KBDDELAY, fl);
912
914 if (pvParam)
915 {
916 return SpiGetInt(pvParam, &gspv.im.iHorzSpacing, fl);
917 }
918 uiParam = max(uiParam, 32);
919 return SpiSetMetric(&gspv.im.iHorzSpacing, uiParam, VAL_ICONSPC, fl);
920
922 if (pvParam)
923 {
924 return SpiGetInt(pvParam, &gspv.im.iVertSpacing, fl);
925 }
926 uiParam = max(uiParam, 32);
927 return SpiSetMetric(&gspv.im.iVertSpacing, uiParam, VAL_ICONVSPC, fl);
928
930 return SpiGetInt(pvParam, &gspv.im.iTitleWrap, fl);
931
933 return SpiSetInt(&gspv.im.iTitleWrap, uiParam, KEY_METRIC, VAL_ITWRAP, fl);
934
936 return SpiGetInt(pvParam, &gspv.bMenuDropAlign, fl);
937
940
943
946
948 return SpiGet(pvParam, &gspv.im.lfFont, sizeof(LOGFONTW), fl);
949
951 if (!SpiSet(&gspv.im.lfFont, pvParam, sizeof(LOGFONTW), fl))
952 return 0;
954 {
955 SpiStoreFont(L"IconFont", &gspv.im.lfFont);
956 }
957 return (UINT_PTR)KEY_METRIC;
958
961
963 return SpiSetInt(&gspv.bMouseBtnSwap, uiParam, KEY_MOUSE, VAL_SWAP, fl);
964
966 return SpiGetInt(pvParam, &gspv.bFastTaskSwitch, fl);
967
969 /* According to Winetest this one is unimplemented */
970 return 1;
971
972 case SPI_GETDRAGFULLWINDOWS:
973 return SpiGetInt(pvParam, &gspv.bDragFullWindows, fl);
974
975 case SPI_SETDRAGFULLWINDOWS:
977
978 case SPI_GETNONCLIENTMETRICS:
979 {
980 return SpiGet(pvParam, &gspv.ncm, sizeof(NONCLIENTMETRICSW), fl);
981 }
982
983 case SPI_SETNONCLIENTMETRICS:
984 {
985 LPNONCLIENTMETRICSW metrics = (LPNONCLIENTMETRICSW)pvParam;
986
987 /* Fixup user's structure size */
988 metrics->cbSize = sizeof(NONCLIENTMETRICSW);
989
990 if (!SpiSet(&gspv.ncm, metrics, sizeof(NONCLIENTMETRICSW), fl))
991 return 0;
992
994 {
995 SpiStoreMetric(VAL_BORDER, gspv.ncm.iBorderWidth);
996 SpiStoreMetric(L"ScrollWidth", gspv.ncm.iScrollWidth);
997 SpiStoreMetric(L"ScrollHeight", gspv.ncm.iScrollHeight);
998 SpiStoreMetric(L"CaptionWidth", gspv.ncm.iCaptionWidth);
999 SpiStoreMetric(L"CaptionHeight", gspv.ncm.iCaptionHeight);
1000 SpiStoreMetric(L"SmCaptionWidth", gspv.ncm.iSmCaptionWidth);
1001 SpiStoreMetric(L"SmCaptionHeight", gspv.ncm.iSmCaptionHeight);
1002 SpiStoreMetric(L"MenuWidth", gspv.ncm.iMenuWidth);
1003 SpiStoreMetric(L"MenuHeight", gspv.ncm.iMenuHeight);
1004#if (WINVER >= 0x0600)
1005 SpiStoreMetric(L"PaddedBorderWidth", gspv.ncm.iPaddedBorderWidth);
1006#endif
1007 SpiStoreFont(L"CaptionFont", &gspv.ncm.lfCaptionFont);
1008 SpiStoreFont(L"SmCaptionFont", &gspv.ncm.lfSmCaptionFont);
1009 SpiStoreFont(L"MenuFont", &gspv.ncm.lfMenuFont);
1010 SpiStoreFont(L"StatusFont", &gspv.ncm.lfStatusFont);
1011 SpiStoreFont(L"MessageFont", &gspv.ncm.lfMessageFont);
1012 }
1013
1015 return 0;
1016
1017 return (UINT_PTR)KEY_METRIC;
1018 }
1019
1020 case SPI_GETMINIMIZEDMETRICS:
1021 {
1022 return SpiGet(pvParam, &gspv.mm, sizeof(MINIMIZEDMETRICS), fl);
1023 }
1024
1025 case SPI_SETMINIMIZEDMETRICS:
1026 {
1028
1029 /* Fixup user's structure size */
1030 metrics->cbSize = sizeof(MINIMIZEDMETRICS);
1031
1032 if (!SpiSet(&gspv.mm, metrics, sizeof(MINIMIZEDMETRICS), fl))
1033 return 0;
1034
1035 gspv.mm.iWidth = max(0, gspv.mm.iWidth);
1038 gspv.mm.iArrange = gspv.mm.iArrange & 0xf;
1039
1040 if (fl & SPIF_UPDATEINIFILE)
1041 {
1042 SpiStoreMetric(L"MinWidth", gspv.mm.iWidth);
1043 SpiStoreMetric(L"MinHorzGap", gspv.mm.iHorzGap);
1044 SpiStoreMetric(L"MinVertGap", gspv.mm.iVertGap);
1045 SpiStoreMetric(L"MinArrange", gspv.mm.iArrange);
1046 }
1047
1048 return (UINT_PTR)KEY_METRIC;
1049 }
1050
1051 case SPI_GETICONMETRICS:
1052 {
1053 return SpiGet(pvParam, &gspv.im, sizeof(ICONMETRICSW), fl);
1054 }
1055
1056 case SPI_SETICONMETRICS:
1057 {
1058 LPICONMETRICSW metrics = (LPICONMETRICSW)pvParam;
1059
1060 /* Fixup user's structure size */
1061 metrics->cbSize = sizeof(ICONMETRICSW);
1062
1063 if (!SpiSet(&gspv.im, metrics, sizeof(ICONMETRICSW), fl))
1064 return 0;
1065
1066 if (fl & SPIF_UPDATEINIFILE)
1067 {
1068 SpiStoreMetric(VAL_ICONSPC, gspv.im.iHorzSpacing);
1069 SpiStoreMetric(VAL_ICONVSPC, gspv.im.iVertSpacing);
1070 SpiStoreMetric(VAL_ITWRAP, gspv.im.iTitleWrap);
1071 SpiStoreFont(L"IconFont", &gspv.im.lfFont);
1072 }
1073 return (UINT_PTR)KEY_METRIC;
1074 }
1075
1076 case SPI_GETWORKAREA:
1077 {
1078 PMONITOR pmonitor = UserGetPrimaryMonitor();
1079
1080 if(!pmonitor)
1081 return 0;
1082
1083 return SpiGet(pvParam, &pmonitor->rcWork, sizeof(RECTL), fl);
1084 }
1085
1086 case SPI_SETWORKAREA:
1087 {
1088 PMONITOR pmonitor;
1089 RECTL rcWorkArea, rcIntersect;
1090
1091 if (!pvParam)
1092 return 0;
1093
1094 RtlCopyMemory(&rcWorkArea, pvParam, sizeof(rcWorkArea));
1095
1096 /* fail if empty */
1097 if (RECTL_bIsEmptyRect(&rcWorkArea))
1098 return 0;
1099
1100 /* get the nearest monitor */
1101 pmonitor = UserMonitorFromRect(&rcWorkArea, MONITOR_DEFAULTTONEAREST);
1102 if (!pmonitor)
1103 return 0;
1104
1105 /* fail unless work area is completely in monitor */
1106 if (!RECTL_bIntersectRect(&rcIntersect, &pmonitor->rcMonitor, &rcWorkArea) ||
1107 !RtlEqualMemory(&rcIntersect, &rcWorkArea, sizeof(rcIntersect)))
1108 {
1109 return 0;
1110 }
1111
1112 if (!SpiSet(&pmonitor->rcWork, pvParam, sizeof(RECTL), fl))
1113 return 0;
1114
1115 if (fl & SPIF_UPDATEINIFILE)
1116 {
1117 // FIXME: What to do?
1118 }
1119 return (UINT_PTR)KEY_DESKTOP;
1120 }
1121
1122 case SPI_SETPENWINDOWS:
1123 ERR("SPI_SETPENWINDOWS is unimplemented\n");
1124 break;
1125
1126 case SPI_GETFILTERKEYS:
1127 {
1128 LPFILTERKEYS FilterKeys = (LPFILTERKEYS)pvParam;
1129
1130 if (uiParam != 0 && uiParam != sizeof(FILTERKEYS))
1131 return 0;
1132
1133 if (!FilterKeys || FilterKeys->cbSize != sizeof(FILTERKEYS))
1134 return 0;
1135
1136 return SpiGet(pvParam, &gspv.filterkeys, sizeof(FILTERKEYS), fl);
1137 }
1138
1139 case SPI_SETFILTERKEYS:
1140 {
1141 LPFILTERKEYS FilterKeys = (LPFILTERKEYS)pvParam;
1142
1143 if (uiParam != 0 && uiParam != sizeof(FILTERKEYS))
1144 return 0;
1145
1146 if (!FilterKeys || FilterKeys->cbSize != sizeof(FILTERKEYS))
1147 return 0;
1148
1149 if (!SpiSet(&gspv.filterkeys, pvParam, sizeof(FILTERKEYS), fl))
1150 return 0;
1151
1152 if (fl & SPIF_UPDATEINIFILE)
1153 {
1154 // FIXME: What to do?
1155 }
1156 return (UINT_PTR)KEY_DESKTOP;
1157 }
1158
1159 case SPI_GETTOGGLEKEYS:
1160 {
1161 LPTOGGLEKEYS ToggleKeys = (LPTOGGLEKEYS)pvParam;
1162
1163 if (uiParam != 0 && uiParam != sizeof(TOGGLEKEYS))
1164 return 0;
1165
1166 if (!ToggleKeys || ToggleKeys->cbSize != sizeof(TOGGLEKEYS))
1167 return 0;
1168
1169 return SpiGet(pvParam, &gspv.togglekeys, sizeof(TOGGLEKEYS), fl);
1170 }
1171
1172 case SPI_SETTOGGLEKEYS:
1173 {
1174 LPTOGGLEKEYS ToggleKeys = (LPTOGGLEKEYS)pvParam;
1175
1176 if (uiParam != 0 && uiParam != sizeof(TOGGLEKEYS))
1177 return 0;
1178
1179 if (!ToggleKeys || ToggleKeys->cbSize != sizeof(TOGGLEKEYS))
1180 return 0;
1181
1182 if (!SpiSet(&gspv.togglekeys, pvParam, sizeof(TOGGLEKEYS), fl))
1183 return 0;
1184
1185 if (fl & SPIF_UPDATEINIFILE)
1186 {
1187 // FIXME: What to do?
1188 }
1189 return (UINT_PTR)KEY_DESKTOP;
1190 }
1191
1192 case SPI_GETMOUSEKEYS:
1193 {
1194 LPMOUSEKEYS MouseKeys = (LPMOUSEKEYS)pvParam;
1195
1196 if (uiParam != 0 && uiParam != sizeof(MOUSEKEYS))
1197 return 0;
1198
1199 if (!MouseKeys || MouseKeys->cbSize != sizeof(MOUSEKEYS))
1200 return 0;
1201
1202 return SpiGet(pvParam, &gspv.mousekeys, sizeof(MOUSEKEYS), fl);
1203 }
1204
1205 case SPI_SETMOUSEKEYS:
1206 {
1207 LPMOUSEKEYS MouseKeys = (LPMOUSEKEYS)pvParam;
1208
1209 if (uiParam != 0 && uiParam != sizeof(MOUSEKEYS))
1210 return 0;
1211
1212 if (!MouseKeys || MouseKeys->cbSize != sizeof(MOUSEKEYS))
1213 return 0;
1214
1215 if (!SpiSet(&gspv.mousekeys, pvParam, sizeof(MOUSEKEYS), fl))
1216 return 0;
1217
1218 if (fl & SPIF_UPDATEINIFILE)
1219 {
1223 }
1224 return (UINT_PTR)KEY_DESKTOP;
1225 }
1226
1227 case SPI_GETSHOWSOUNDS:
1228 return SpiGetInt(pvParam, &gspv.bShowSounds, fl);
1229
1230 case SPI_SETSHOWSOUNDS:
1231 return SpiSetBool(&gspv.bShowSounds, uiParam, KEY_SHOWSNDS, VAL_ON, fl);
1232
1233 case SPI_GETSTICKYKEYS:
1234 {
1235 LPSTICKYKEYS StickyKeys = (LPSTICKYKEYS)pvParam;
1236
1237 if (uiParam != 0 && uiParam != sizeof(STICKYKEYS))
1238 return 0;
1239
1240 if (!StickyKeys || StickyKeys->cbSize != sizeof(STICKYKEYS))
1241 return 0;
1242
1243 return SpiGetEx(pvParam, &gspv.stickykeys, sizeof(STICKYKEYS), fl);
1244 }
1245
1246 case SPI_SETSTICKYKEYS:
1247 {
1248 LPSTICKYKEYS StickyKeys = (LPSTICKYKEYS)pvParam;
1249
1250 if (uiParam != 0 && uiParam != sizeof(STICKYKEYS))
1251 return 0;
1252
1253 if (!StickyKeys || StickyKeys->cbSize != sizeof(STICKYKEYS))
1254 return 0;
1255
1256 if (!SpiSet(&gspv.stickykeys, pvParam, sizeof(STICKYKEYS), fl))
1257 return 0;
1258
1259 if (fl & SPIF_UPDATEINIFILE)
1260 {
1261 // FIXME: What to do?
1262 }
1263 return (UINT_PTR)KEY_DESKTOP;
1264 }
1265
1267 {
1268 LPACCESSTIMEOUT AccessTimeout = (LPACCESSTIMEOUT)pvParam;
1269
1270 if (uiParam != 0 && uiParam != sizeof(ACCESSTIMEOUT))
1271 return 0;
1272
1273 if (!AccessTimeout || AccessTimeout->cbSize != sizeof(ACCESSTIMEOUT))
1274 return 0;
1275
1276 return SpiGetEx(pvParam, &gspv.accesstimeout, sizeof(ACCESSTIMEOUT), fl);
1277 }
1278
1280 {
1281 LPACCESSTIMEOUT AccessTimeout = (LPACCESSTIMEOUT)pvParam;
1282
1283 if (uiParam != 0 && uiParam != sizeof(ACCESSTIMEOUT))
1284 {
1285 return 0;
1286 }
1287
1288 if (!AccessTimeout || AccessTimeout->cbSize != sizeof(ACCESSTIMEOUT))
1289 {
1290 return 0;
1291 }
1292
1293 if (!SpiSet(&gspv.accesstimeout, pvParam, sizeof(ACCESSTIMEOUT), fl))
1294 return 0;
1295
1296 if (fl & SPIF_UPDATEINIFILE)
1297 {
1298 // FIXME: What to do?
1299 }
1300 return (UINT_PTR)KEY_DESKTOP;
1301 }
1302
1303 case SPI_GETSERIALKEYS:
1304 {
1305 LPSERIALKEYS SerialKeys = (LPSERIALKEYS)pvParam;
1306
1307 if (uiParam != 0 && uiParam != sizeof(SERIALKEYS))
1308 return 0;
1309
1310 if (!SerialKeys || SerialKeys->cbSize != sizeof(SERIALKEYS))
1311 return 0;
1312
1313 return SpiGet(pvParam, &gspv.serialkeys, sizeof(SERIALKEYS), fl);
1314 }
1315
1316 case SPI_SETSERIALKEYS:
1317 {
1318 LPSERIALKEYS SerialKeys = (LPSERIALKEYS)pvParam;
1319
1320 if (uiParam != 0 && uiParam != sizeof(SERIALKEYS))
1321 return 0;
1322
1323 if (!SerialKeys || SerialKeys->cbSize != sizeof(SERIALKEYS))
1324 return 0;
1325
1326 if (!SpiSet(&gspv.serialkeys, pvParam, sizeof(SERIALKEYS), fl))
1327 return 0;
1328
1329 if (fl & SPIF_UPDATEINIFILE)
1330 {
1331 // FIXME: What to do?
1332 }
1333 return (UINT_PTR)KEY_DESKTOP;
1334 }
1335
1336 case SPI_GETSOUNDSENTRY:
1337 {
1338 LPSOUNDSENTRYW SoundsEntry = (LPSOUNDSENTRYW)pvParam;
1339
1340 if (uiParam != 0 && uiParam != sizeof(SOUNDSENTRYW))
1341 return 0;
1342
1343 if (!SoundsEntry || SoundsEntry->cbSize != sizeof(SOUNDSENTRYW))
1344 return 0;
1345
1346 return SpiGet(pvParam, &gspv.soundsentry, sizeof(SOUNDSENTRYW), fl);
1347 }
1348
1349 case SPI_SETSOUNDSENTRY:
1350 {
1351 LPSOUNDSENTRYW SoundsEntry = (LPSOUNDSENTRYW)pvParam;
1352
1353 if (uiParam != 0 && uiParam != sizeof(SOUNDSENTRYW))
1354 return 0;
1355
1356 if (!SoundsEntry || SoundsEntry->cbSize != sizeof(SOUNDSENTRYW))
1357 return 0;
1358
1359 if (!SpiSet(&gspv.soundsentry, pvParam, sizeof(SOUNDSENTRYW), fl))
1360 return 0;
1361
1362 if (fl & SPIF_UPDATEINIFILE)
1363 {
1364 // FIXME: What to do?
1365 }
1366 return (UINT_PTR)KEY_DESKTOP;
1367 }
1368
1369 case SPI_GETHIGHCONTRAST:
1370 {
1371 LPHIGHCONTRASTW highcontrast = (LPHIGHCONTRASTW)pvParam;
1372
1373 if (uiParam != 0 && uiParam != sizeof(HIGHCONTRASTW))
1374 return 0;
1375
1376 if (!highcontrast || highcontrast->cbSize != sizeof(HIGHCONTRASTW))
1377 return 0;
1378
1379 return SpiGet(pvParam, &gspv.highcontrast, sizeof(HIGHCONTRASTW), fl);
1380 }
1381
1382 case SPI_SETHIGHCONTRAST:
1383 {
1384 LPHIGHCONTRASTW highcontrast = (LPHIGHCONTRASTW)pvParam;
1385
1386 if (uiParam != 0 && uiParam != sizeof(HIGHCONTRASTW))
1387 return 0;
1388
1389 if (!highcontrast || highcontrast->cbSize != sizeof(HIGHCONTRASTW))
1390 return 0;
1391
1392 if (!SpiSet(&gspv.highcontrast, pvParam, sizeof(HIGHCONTRASTW), fl))
1393 return 0;
1394
1395 if (fl & SPIF_UPDATEINIFILE)
1396 {
1397 // FIXME: What to do?
1398 }
1399 return (UINT_PTR)KEY_DESKTOP;
1400 }
1401
1402 case SPI_GETKEYBOARDPREF:
1403 return SpiGetInt(pvParam, &gspv.bKbdPref, fl);
1404
1405 case SPI_SETKEYBOARDPREF:
1406 return SpiSetBool(&gspv.bKbdPref, uiParam, KEY_KDBPREF, VAL_ON, fl);
1407
1408 case SPI_GETSCREENREADER:
1409 return SpiGetInt(pvParam, &gspv.bScreenReader, fl);
1410
1411 case SPI_SETSCREENREADER:
1412 return SpiSetBool(&gspv.bScreenReader, uiParam, KEY_SCRREAD, VAL_ON, fl);
1413
1414 case SPI_GETANIMATION:
1415 return SpiGet(pvParam, &gspv.animationinfo, sizeof(ANIMATIONINFO), fl);
1416
1417 case SPI_SETANIMATION:
1418 if (!SpiSet(&gspv.animationinfo, pvParam, sizeof(ANIMATIONINFO), fl))
1419 return 0;
1420 if (fl & SPIF_UPDATEINIFILE)
1421 {
1422 // FIXME: What to do?
1423 }
1424 return (UINT_PTR)KEY_DESKTOP;
1425
1426 case SPI_GETFONTSMOOTHING:
1427 return SpiGetInt(pvParam, &gspv.bFontSmoothing, fl);
1428
1429 case SPI_SETFONTSMOOTHING:
1430 gspv.bFontSmoothing = !!uiParam;
1431 if (fl & SPIF_UPDATEINIFILE)
1432 {
1434 }
1435 return (UINT_PTR)KEY_DESKTOP;
1436
1437 case SPI_SETDRAGWIDTH:
1438 return SpiSetInt(&gspv.iDragWidth, uiParam, KEY_DESKTOP, VAL_DRAGWIDTH, fl);
1439
1440 case SPI_SETDRAGHEIGHT:
1442
1443 case SPI_SETHANDHELD:
1444 return SpiSetBool(&gspv.bHandHeld, uiParam, KEY_DESKTOP, L"HandHeld", fl);
1445
1446 case SPI_GETLOWPOWERTIMEOUT:
1447 return SpiGetInt(pvParam, &gspv.iLowPwrTimeout, fl);
1448
1449 case SPI_GETPOWEROFFTIMEOUT:
1450 return SpiGetInt(pvParam, &gspv.iPwrOffTimeout, fl);
1451
1452 case SPI_SETLOWPOWERTIMEOUT:
1453 return SpiSetInt(&gspv.iLowPwrTimeout, uiParam, KEY_DESKTOP, L"LowPowerTimeOut", fl);
1454
1455 case SPI_SETPOWEROFFTIMEOUT:
1456 return SpiSetInt(&gspv.iPwrOffTimeout, uiParam, KEY_DESKTOP, L"PowerOffTimeOut", fl);
1457
1458 case SPI_GETLOWPOWERACTIVE:
1459 return SpiGetInt(pvParam, &gspv.bLowPwrActive, fl);
1460
1461 case SPI_GETPOWEROFFACTIVE:
1462 return SpiGetInt(pvParam, &gspv.bPwrOffActive, fl);
1463
1464 case SPI_SETLOWPOWERACTIVE:
1465 return SpiSetBool(&gspv.bLowPwrActive, uiParam, KEY_DESKTOP, L"LowPowerActive", fl);
1466
1467 case SPI_SETPOWEROFFACTIVE:
1468 return SpiSetBool(&gspv.bPwrOffActive, uiParam, KEY_DESKTOP, L"PowerOffActive", fl);
1469
1470 case SPI_SETCURSORS:
1471 ERR("SPI_SETCURSORS is unimplemented\n");
1472 break;
1473
1474 case SPI_SETICONS:
1475 ERR("SPI_SETICONS is unimplemented\n");
1476 break;
1477
1478 case SPI_GETDEFAULTINPUTLANG:
1479 if (!gspklBaseLayout)
1480 return FALSE;
1481
1482 return SpiGet(pvParam, &gspklBaseLayout->hkl, sizeof(HKL), fl);
1483
1484 case SPI_SETDEFAULTINPUTLANG:
1485 {
1486 HKL hkl;
1487
1488 /* Note: SPIF_UPDATEINIFILE is not supported */
1489 if ((fl & SPIF_UPDATEINIFILE) || !SpiSet(&hkl, pvParam, sizeof(hkl), fl))
1490 return FALSE;
1491
1493 }
1494
1495 case SPI_SETLANGTOGGLE:
1496 gdwLayoutToggleKey = UserGetLanguageToggle(L"Layout Hotkey", 2);
1497 gdwLanguageToggleKey = UserGetLanguageToggle(L"Language Hotkey", 1);
1498 return gdwLanguageToggleKey;
1499
1500 case SPI_GETWINDOWSEXTENSION:
1501 ERR("SPI_GETWINDOWSEXTENSION is unimplemented\n");
1502 break;
1503
1504 case SPI_GETMOUSETRAILS:
1505 return SpiGetInt(pvParam, &gspv.iMouseTrails, fl);
1506
1507 case SPI_SETMOUSETRAILS:
1509
1510 case SPI_GETSNAPTODEFBUTTON:
1511 return SpiGetInt(pvParam, &gspv.bSnapToDefBtn, fl);
1512
1513 case SPI_SETSNAPTODEFBUTTON:
1515
1516 case SPI_GETMOUSEHOVERWIDTH:
1517 return SpiGetInt(pvParam, &gspv.iMouseHoverWidth, fl);
1518
1519 case SPI_SETMOUSEHOVERWIDTH:
1521
1522 case SPI_GETMOUSEHOVERHEIGHT:
1523 return SpiGetInt(pvParam, &gspv.iMouseHoverHeight, fl);
1524
1525 case SPI_SETMOUSEHOVERHEIGHT:
1527
1528 case SPI_GETMOUSEHOVERTIME:
1529 return SpiGetInt(pvParam, &gspv.iMouseHoverTime, fl);
1530
1531 case SPI_SETMOUSEHOVERTIME:
1532 /* See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoa
1533 * copy text from it, if some agument why xp and 2003 behovir diffent
1534 * only if they do not have SP install
1535 * " Windows Server 2003 and Windows XP: The operating system does not
1536 * enforce the use of USER_TIMER_MAXIMUM and USER_TIMER_MINIMUM until
1537 * Windows Server 2003 SP1 and Windows XP SP2 "
1538 */
1540
1541 case SPI_GETWHEELSCROLLLINES:
1542 return SpiGetInt(pvParam, &gspv.iWheelScrollLines, fl);
1543
1546
1547 case SPI_GETMENUSHOWDELAY:
1548 return SpiGetInt(pvParam, &gspv.dwMenuShowDelay, fl);
1549
1550 case SPI_SETMENUSHOWDELAY:
1551 return SpiSetInt(&gspv.dwMenuShowDelay, uiParam, KEY_DESKTOP, L"MenuShowDelay", fl);
1552
1553#if (_WIN32_WINNT >= 0x0600)
1555 return SpiGetInt(pvParam, &gspv.uiWheelScrollChars, fl);
1556
1557 case SPI_SETWHEELSCROLLCHARS:
1558 return SpiSetInt(&gspv.uiWheelScrollChars, uiParam, KEY_DESKTOP, VAL_SCRLLCHARS, fl);
1559#endif
1560 case SPI_GETSHOWIMEUI:
1561 return SpiGetInt(pvParam, &gspv.bShowImeUi, fl);
1562
1563 case SPI_SETSHOWIMEUI:
1564 return SpiSetBool(&gspv.bShowImeUi, uiParam, KEY_DESKTOP, L"", fl);
1565
1566 case SPI_GETMOUSESPEED:
1567 return SpiGetInt(pvParam, &gspv.iMouseSpeed, fl);
1568
1569 case SPI_SETMOUSESPEED:
1570 {
1571 /* Allowed range is [1:20] */
1572 if ((INT_PTR)pvParam < 1 || (INT_PTR)pvParam > 20)
1573 return 0;
1574 else
1576 }
1577
1578 case SPI_GETSCREENSAVERRUNNING:
1579 return SpiGetInt(pvParam, &gspv.bScrSaverRunning, fl);
1580
1581 case SPI_SETSCREENSAVERRUNNING:
1582 // FIXME: also return value?
1583 return SpiSetBool(&gspv.bScrSaverRunning, uiParam, KEY_MOUSE, L"", fl);
1584
1585#if(WINVER >= 0x0600)
1586 case SPI_GETAUDIODESCRIPTION:
1587 return SpiGet(pvParam, &gspv.audiodescription, sizeof(AUDIODESCRIPTION), fl);
1588
1589 case SPI_SETAUDIODESCRIPTION:
1590 ERR("SPI_SETAUDIODESCRIPTION is unimplemented\n");
1591 break;
1592
1593 case SPI_GETSCREENSAVESECURE:
1594 return SpiGetInt(pvParam, &gspv.bScrSaverSecure, fl);
1595
1596 case SPI_SETSCREENSAVESECURE:
1597 return SpiSetBool(&gspv.bScrSaverSecure, uiParam, KEY_DESKTOP, L"ScreenSaverIsSecure", fl);
1598#endif
1599
1600 case SPI_GETACTIVEWINDOWTRACKING:
1601 return SpiGetUserPref(UPM_ACTIVEWINDOWTRACKING, pvParam, fl);
1602
1603 case SPI_SETACTIVEWINDOWTRACKING:
1604 return SpiSetUserPref(UPM_ACTIVEWINDOWTRACKING, pvParam, fl);
1605
1606 case SPI_GETMENUANIMATION:
1607 return SpiGetUserPref(UPM_MENUANIMATION, pvParam, fl);
1608
1609 case SPI_SETMENUANIMATION:
1610 return SpiSetUserPref(UPM_MENUANIMATION, pvParam, fl);
1611
1612 case SPI_GETCOMBOBOXANIMATION:
1613 return SpiGetUserPref(UPM_COMBOBOXANIMATION, pvParam, fl);
1614
1615 case SPI_SETCOMBOBOXANIMATION:
1616 return SpiSetUserPref(UPM_COMBOBOXANIMATION, pvParam, fl);
1617
1618 case SPI_GETLISTBOXSMOOTHSCROLLING:
1620
1621 case SPI_SETLISTBOXSMOOTHSCROLLING:
1623
1624 case SPI_GETGRADIENTCAPTIONS:
1625 {
1627 {
1628 INT iValue = 0;
1629 return SpiGetInt(pvParam, &iValue, fl);
1630 }
1631 else
1632 {
1633 return SpiGetUserPref(UPM_GRADIENTCAPTIONS, pvParam, fl);
1634 }
1635 }
1636
1637 case SPI_SETGRADIENTCAPTIONS:
1638 return SpiSetUserPref(UPM_GRADIENTCAPTIONS, pvParam, fl);
1639
1640 case SPI_GETKEYBOARDCUES:
1641 return SpiGetUserPref(UPM_KEYBOARDCUES, pvParam, fl);
1642
1643 case SPI_SETKEYBOARDCUES:
1644 return SpiSetUserPref(UPM_KEYBOARDCUES, pvParam, fl);
1645
1646 case SPI_GETACTIVEWNDTRKZORDER:
1647 return SpiGetUserPref(UPM_ACTIVEWNDTRKZORDER, pvParam, fl);
1648
1649 case SPI_SETACTIVEWNDTRKZORDER:
1650 return SpiSetUserPref(UPM_ACTIVEWNDTRKZORDER, pvParam, fl);
1651
1652 case SPI_GETHOTTRACKING:
1653 return SpiGetUserPref(UPM_HOTTRACKING, pvParam, fl);
1654
1655 case SPI_SETHOTTRACKING:
1656 return SpiSetUserPref(UPM_HOTTRACKING, pvParam, fl);
1657
1658 case SPI_GETMENUFADE:
1659 return SpiGetUserPref(UPM_MENUFADE, pvParam, fl);
1660
1661 case SPI_SETMENUFADE:
1662 return SpiSetUserPref(UPM_MENUFADE, pvParam, fl);
1663
1664 case SPI_GETSELECTIONFADE:
1665 return SpiGetUserPref(UPM_SELECTIONFADE, pvParam, fl);
1666
1667 case SPI_SETSELECTIONFADE:
1668 return SpiSetUserPref(UPM_SELECTIONFADE, pvParam, fl);
1669
1670 case SPI_GETTOOLTIPANIMATION:
1671 return SpiGetUserPref(UPM_TOOLTIPANIMATION, pvParam, fl);
1672
1673 case SPI_SETTOOLTIPANIMATION:
1674 return SpiSetUserPref(UPM_TOOLTIPANIMATION, pvParam, fl);
1675
1676 case SPI_GETTOOLTIPFADE:
1677 return SpiGetUserPref(UPM_TOOLTIPFADE, pvParam, fl);
1678
1679 case SPI_SETTOOLTIPFADE:
1680 return SpiSetUserPref(UPM_TOOLTIPFADE, pvParam, fl);
1681
1682 case SPI_GETCURSORSHADOW:
1683 return SpiGetUserPref(UPM_CURSORSHADOW, pvParam, fl);
1684
1685 case SPI_SETCURSORSHADOW:
1687 return SpiSetUserPref(UPM_CURSORSHADOW, pvParam, fl);
1688
1689 case SPI_GETUIEFFECTS:
1690 return SpiGetUserPref(UPM_UIEFFECTS, pvParam, fl);
1691
1692 case SPI_SETUIEFFECTS:
1693 return SpiSetUserPref(UPM_UIEFFECTS, pvParam, fl);
1694
1695 case SPI_GETMOUSESONAR:
1696 return SpiGetInt(pvParam, &gspv.bMouseSonar, fl);
1697
1698 case SPI_SETMOUSESONAR:
1699 return SpiSetBool(&gspv.bMouseSonar, uiParam, KEY_MOUSE, L"", fl);
1700
1701 case SPI_GETMOUSECLICKLOCK:
1702 return SpiGetUserPref(UPM_CLICKLOCK, pvParam, fl);
1703
1704 case SPI_SETMOUSECLICKLOCK:
1705 gspv.bMouseClickLock = PtrToUlong(pvParam);
1706 return SpiSetUserPref(UPM_CLICKLOCK, pvParam, fl);
1707
1708 case SPI_GETMOUSEVANISH:
1709 return SpiGetInt(pvParam, &gspv.bMouseVanish, fl);
1710
1711 case SPI_SETMOUSEVANISH:
1712 return SpiSetBool(&gspv.bMouseVanish, uiParam, KEY_MOUSE, L"", fl);
1713
1714 case SPI_GETFLATMENU:
1715 return SpiGetUserPref(UPM_FLATMENU, pvParam, fl);
1716
1717 case SPI_SETFLATMENU:
1718 return SpiSetUserPref(UPM_FLATMENU, pvParam, fl);
1719
1720 case SPI_GETDROPSHADOW:
1721 return SpiGetUserPref(UPM_DROPSHADOW, pvParam, fl);
1722
1723 case SPI_SETDROPSHADOW:
1724 return SpiSetUserPref(UPM_DROPSHADOW, pvParam, fl);
1725
1726 case SPI_GETBLOCKSENDINPUTRESETS:
1727 return SpiGetInt(pvParam, &gspv.bBlockSendInputResets, fl);
1728
1729 case SPI_SETBLOCKSENDINPUTRESETS:
1730 return SpiSetBool(&gspv.bBlockSendInputResets, uiParam, KEY_MOUSE, L"", fl);
1731
1732#if(_WIN32_WINNT >= 0x0600)
1733 case SPI_GETDISABLEOVERLAPPEDCONTENT:
1734 return SpiGetInt(pvParam, &gspv.bDisableOverlappedContent, fl);
1735
1736 case SPI_SETDISABLEOVERLAPPEDCONTENT:
1737 return SpiSetBool(&gspv.bDisableOverlappedContent, uiParam, KEY_MOUSE, L"", fl);
1738
1739 case SPI_GETCLIENTAREAANIMATION:
1740 return SpiGetInt(pvParam, &gspv.bClientAreaAnimation, fl);
1741
1742 case SPI_SETCLIENTAREAANIMATION:
1743 return SpiSetBool(&gspv.bClientAreaAnimation, uiParam, KEY_MOUSE, L"", fl);
1744
1745 case SPI_GETCLEARTYPE:
1746 return SpiGetInt(pvParam, &gspv.bClearType, fl);
1747
1748 case SPI_SETCLEARTYPE:
1749 return SpiSetBool(&gspv.bClearType, uiParam, KEY_MOUSE, L"", fl);
1750
1751 case SPI_GETSPEECHRECOGNITION:
1752 return SpiGetInt(pvParam, &gspv.bSpeechRecognition, fl);
1753
1754 case SPI_SETSPEECHRECOGNITION:
1755 return SpiSetBool(&gspv.bSpeechRecognition, uiParam, KEY_MOUSE, L"", fl);
1756#endif
1757
1758 case SPI_GETFOREGROUNDLOCKTIMEOUT:
1759 return SpiGetInt(pvParam, &gspv.dwForegroundLockTimeout, fl);
1760
1761 case SPI_SETFOREGROUNDLOCKTIMEOUT:
1762 return SpiSetInt(&gspv.dwForegroundLockTimeout, uiParam, KEY_MOUSE, L"", fl);
1763
1764 case SPI_GETACTIVEWNDTRKTIMEOUT:
1765 return SpiGetInt(pvParam, &gspv.dwActiveTrackingTimeout, fl);
1766
1767 case SPI_SETACTIVEWNDTRKTIMEOUT:
1768 return SpiSetInt(&gspv.dwActiveTrackingTimeout, uiParam, KEY_MOUSE, L"", fl);
1769
1770 case SPI_GETFOREGROUNDFLASHCOUNT:
1771 return SpiGetInt(pvParam, &gspv.dwForegroundFlashCount, fl);
1772
1773 case SPI_SETFOREGROUNDFLASHCOUNT:
1774 return SpiSetInt(&gspv.dwForegroundFlashCount, uiParam, KEY_MOUSE, L"", fl);
1775
1776 case SPI_GETCARETWIDTH:
1777 return SpiGetInt(pvParam, &gspv.dwCaretWidth, fl);
1778
1779 case SPI_SETCARETWIDTH:
1781
1782 case SPI_GETMOUSECLICKLOCKTIME:
1783 return SpiGetInt(pvParam, &gspv.dwMouseClickLockTime, fl);
1784
1785 case SPI_SETMOUSECLICKLOCKTIME:
1787
1788 case SPI_GETFONTSMOOTHINGTYPE:
1789 return SpiGetInt(pvParam, &gspv.uiFontSmoothingType, fl);
1790
1791 case SPI_SETFONTSMOOTHINGTYPE:
1793
1794 case SPI_GETFONTSMOOTHINGCONTRAST:
1795 return SpiGetInt(pvParam, &gspv.uiFontSmoothingContrast, fl);
1796
1797 case SPI_SETFONTSMOOTHINGCONTRAST:
1799
1800 case SPI_GETFOCUSBORDERWIDTH:
1801 return SpiGetInt(pvParam, &gspv.uiFocusBorderWidth, fl);
1802
1803 case SPI_SETFOCUSBORDERWIDTH:
1804 return SpiSetInt(&gspv.uiFocusBorderWidth, uiParam, KEY_MOUSE, L"", fl);
1805
1806 case SPI_GETFOCUSBORDERHEIGHT:
1807 return SpiGetInt(pvParam, &gspv.uiFocusBorderHeight, fl);
1808
1809 case SPI_SETFOCUSBORDERHEIGHT:
1810 return SpiSetInt(&gspv.uiFocusBorderHeight, uiParam, KEY_MOUSE, L"", fl);
1811
1812 case SPI_GETFONTSMOOTHINGORIENTATION:
1813 return SpiGetInt(pvParam, &gspv.uiFontSmoothingOrientation, fl);
1814
1815 case SPI_SETFONTSMOOTHINGORIENTATION:
1817
1818 case SPI_GETWINARRANGING:
1819 return SpiGetInt(pvParam, &g_bWindowSnapEnabled, fl);
1820 case SPI_SETWINARRANGING:
1822
1823 case SPI_GETDOCKMOVING:
1824 return SpiGetInt(pvParam, &gspv.bDockMoving, fl);
1825 case SPI_SETDOCKMOVING:
1827
1828 /* The following are undocumented, but valid SPI values */
1829 case 0x1010:
1830 case 0x1011:
1831 case 0x1028:
1832 case 0x1029:
1833 case 0x102A:
1834 case 0x102B:
1835 case 0x102C:
1836 case 0x102D:
1837 case 0x102E:
1838 case 0x102F:
1839 case 0x1030:
1840 case 0x1031:
1841 case 0x1032:
1842 case 0x1033:
1843 case 0x1034:
1844 case 0x1035:
1845 case 0x1036:
1846 case 0x1037:
1847 case 0x1038:
1848 case 0x1039:
1849 case 0x103A:
1850 case 0x103B:
1851 case 0x103C:
1852 case 0x103D:
1853 ERR("Undocumented SPI value %x is unimplemented\n", uiAction);
1854 break;
1855
1856 default:
1857 ERR("Invalid SPI value: %u\n", uiAction);
1859 return 0;
1860 }
1861
1862 return 0;
1863}
@ UPM_TOOLTIPANIMATION
@ UPM_COMBOBOXANIMATION
@ UPM_ACTIVEWINDOWTRACKING
@ UPM_GRADIENTCAPTIONS
@ UPM_LISTBOXSMOOTHSCROLLING
@ UPM_ACTIVEWNDTRKZORDER
#define SPI_GETWHEELSCROLLCHARS
#define ERR(fmt,...)
Definition: precomp.h:57
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define L(x)
Definition: resources.c:13
#define PtrToUlong(u)
Definition: config.h:107
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
Definition: glext.h:11745
#define RtlEqualMemory(dst, src, len)
Definition: kdvm.h:18
#define min(a, b)
Definition: monoChain.cc:55
HKL hkl
Definition: msctf.idl:632
UINT_PTR HKL
Definition: msctf.idl:125
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
__kernel_entry W32KAPI INT APIENTRY NtGdiGetDeviceCaps(_In_ HDC hdc, _In_ INT i)
RECT rcWork
Definition: monitor.h:19
RECT rcMonitor
Definition: monitor.h:18
INT iMouseHoverWidth
Definition: sysparams.h:85
BOOL bDockMoving
Definition: sysparams.h:162
INT iDragHeight
Definition: sysparams.h:92
MINIMIZEDMETRICS mm
Definition: sysparams.h:52
BOOL bFontSmoothing
Definition: sysparams.h:125
BOOL bScreenReader
Definition: sysparams.h:60
FILTERKEYS filterkeys
Definition: sysparams.h:100
UINT uiFocusBorderHeight
Definition: sysparams.h:55
UINT uiFocusBorderWidth
Definition: sysparams.h:54
DWORD dwMenuShowDelay
Definition: sysparams.h:131
MOUSEKEYS mousekeys
Definition: sysparams.h:76
BOOL bHandHeld
Definition: sysparams.h:148
INT iWheelScrollLines
Definition: sysparams.h:94
INT iKbdDelay
Definition: sysparams.h:107
INT iDblClickHeight
Definition: sysparams.h:89
BOOL bMouseBtnSwap
Definition: sysparams.h:82
SOUNDSENTRYW soundsentry
Definition: sysparams.h:70
UNICODE_STRING ustrWallpaper
Definition: sysparams.h:145
SERIALKEYS serialkeys
Definition: sysparams.h:101
DWORD dwForegroundLockTimeout
Definition: sysparams.h:155
STICKYKEYS stickykeys
Definition: sysparams.h:102
INT iLowPwrTimeout
Definition: sysparams.h:118
INT iScrSaverTimeout
Definition: sysparams.h:110
BOOL bSnapToDefBtn
Definition: sysparams.h:153
ICONMETRICSW im
Definition: sysparams.h:53
DWORD dwMouseClickLockTime
Definition: sysparams.h:79
BOOL bMouseClickLock
Definition: sysparams.h:77
BOOL bBeep
Definition: sysparams.h:72
DWORD dwKbdSpeed
Definition: sysparams.h:104
BOOL bMenuDropAlign
Definition: sysparams.h:130
INT iMouseHoverHeight
Definition: sysparams.h:86
ANIMATIONINFO animationinfo
Definition: sysparams.h:152
BOOL bLowPwrActive
Definition: sysparams.h:120
HIGHCONTRASTW highcontrast
Definition: sysparams.h:59
BOOL bMouseCursorShadow
Definition: sysparams.h:78
DWORD dwCaretWidth
Definition: sysparams.h:158
BOOL bShowSounds
Definition: sysparams.h:71
INT iDragWidth
Definition: sysparams.h:91
WCHAR awcWallpaper[MAX_PATH+1]
Definition: sysparams.h:146
INT iDblClickWidth
Definition: sysparams.h:88
BOOL bScrSaverRunning
Definition: sysparams.h:112
ACCESSTIMEOUT accesstimeout
Definition: sysparams.h:58
DWORD dwActiveTrackingTimeout
Definition: sysparams.h:156
UINT uiFontSmoothingContrast
Definition: sysparams.h:127
UINT uiGridGranularity
Definition: sysparams.h:150
BOOL bKbdPref
Definition: sysparams.h:105
DWORD dwForegroundFlashCount
Definition: sysparams.h:157
INT iMouseSpeed
Definition: sysparams.h:84
UINT uiFontSmoothingType
Definition: sysparams.h:126
CURSORACCELERATION_INFO caiMouse
Definition: sysparams.h:75
BOOL bMouseVanish
Definition: sysparams.h:81
BOOL bScrSaverActive
Definition: sysparams.h:111
BOOL bBlockSendInputResets
Definition: sysparams.h:132
BOOL bPwrOffActive
Definition: sysparams.h:121
UINT uiFontSmoothingOrientation
Definition: sysparams.h:128
BOOL bDragFullWindows
Definition: sysparams.h:129
BOOL bMouseSonar
Definition: sysparams.h:80
INT iMouseTrails
Definition: sysparams.h:93
TOGGLEKEYS togglekeys
Definition: sysparams.h:103
INT iMouseHoverTime
Definition: sysparams.h:87
BOOL bFastTaskSwitch
Definition: sysparams.h:149
INT iPwrOffTimeout
Definition: sysparams.h:119
BOOL bShowImeUi
Definition: sysparams.h:154
HKL hkl
Definition: input.h:33
DWORD iMaxSpeed
Definition: winuser.h:3521
DWORD iTimeToMaxSpeed
Definition: winuser.h:3522
UINT cbSize
Definition: winuser.h:3519
DWORD dwFlags
Definition: winuser.h:3520
DWORD cbSize
Definition: winuser.h:3637
DWORD cbSize
Definition: winuser.h:3642
@ UPM_FLATMENU
Definition: sysparams.h:32
@ UPM_DROPSHADOW
Definition: sysparams.h:33
int32_t INT_PTR
Definition: typedefs.h:64
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
BOOL FASTCALL RECTL_bIntersectRect(_Out_ RECTL *prclDst, _In_ const RECTL *prcl1, _In_ const RECTL *prcl2)
Definition: rect.c:55
FORCEINLINE BOOL RECTL_bIsEmptyRect(_In_ const RECTL *prcl)
Definition: rect.h:44
PKL gspklBaseLayout
Definition: kbdlayout.c:22
DWORD gdwLanguageToggleKey
Definition: keyboard.c:19
DWORD gdwLayoutToggleKey
Definition: keyboard.c:21
BOOL NTAPI UserSetDefaultInputLang(HKL hKl)
Definition: kbdlayout.c:583
DWORD FASTCALL UserGetLanguageToggle(_In_ PCWSTR pszType, _In_ DWORD dwDefaultValue)
Definition: misc.c:83
PMONITOR NTAPI UserMonitorFromRect(PRECTL pRect, DWORD dwFlags)
Definition: monitor.c:469
PMONITOR NTAPI UserGetPrimaryMonitor(VOID)
Definition: monitor.c:102
static const WCHAR * VAL_DBLCLKHEIGHT
Definition: sysparams.c:52
static const WCHAR * KEY_MDALIGN
Definition: sysparams.c:85
static const WCHAR * VAL_CLICKLOCKTIME
Definition: sysparams.c:74
static const WCHAR * KEY_MOUSE
Definition: sysparams.c:46
static VOID SpiStoreFont(PCWSTR pwszValue, LOGFONTW *plogfont)
Definition: sysparams.c:451
static UINT_PTR SpiSetYesNo(BOOL *pbData, BOOL bValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl)
Definition: sysparams.c:535
static const WCHAR * VAL_MOUSETRAILS
Definition: sysparams.c:50
static const WCHAR * VAL_FONTSMOOTHING
Definition: sysparams.c:69
static const WCHAR * VAL_BEEP
Definition: sysparams.c:95
static const WCHAR * VAL_SCRTO
Definition: sysparams.c:62
BOOL g_bWindowSnapEnabled
Definition: sysparams.c:20
static const WCHAR * VAL_FONTSMOOTHINGCONTRAST
Definition: sysparams.c:71
static const WCHAR * VAL_SWAP
Definition: sysparams.c:55
static const WCHAR * KEY_SOUND
Definition: sysparams.c:94
static const WCHAR * VAL_HOVERWIDTH
Definition: sysparams.c:57
static const WCHAR * KEY_SHOWSNDS
Definition: sysparams.c:104
static const WCHAR * VAL_SNAP_ENABLED
Definition: sysparams.c:82
static const WCHAR * VAL_MOUSE3
Definition: sysparams.c:49
static UINT_PTR SpiGetInt(PVOID pvParam, PVOID piValue, FLONG fl)
Definition: sysparams.c:528
static const WCHAR * VAL_HOVERTIME
Definition: sysparams.c:56
static const WCHAR * VAL_HOVERHEIGHT
Definition: sysparams.c:58
static const WCHAR * VAL_DRAGHEIGHT
Definition: sysparams.c:67
static const WCHAR * VAL_SNAP_DOCKMOVING
Definition: sysparams.c:83
static const WCHAR * VAL_MOUSE2
Definition: sysparams.c:48
static const WCHAR * VAL_FONTSMOOTHINGORIENTATION
Definition: sysparams.c:72
static UINT_PTR SpiSetDWord(PVOID pvData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl)
Definition: sysparams.c:561
static UINT_PTR SpiGetUserPref(DWORD dwMask, PVOID pvParam, FLONG fl)
Definition: sysparams.c:640
static const WCHAR * KEY_METRIC
Definition: sysparams.c:88
static const WCHAR * VAL_DBLCLKWIDTH
Definition: sysparams.c:51
static const WCHAR * VAL_MOUSEKEYS_TIMETOMAX
Definition: sysparams.c:112
static const WCHAR * VAL_ON
Definition: sysparams.c:107
static const WCHAR * KEY_SCRREAD
Definition: sysparams.c:106
static const WCHAR * VAL_MDALIGN
Definition: sysparams.c:86
static VOID SpiStoreMetric(LPCWSTR pwszValue, INT iValue)
Definition: sysparams.c:444
static const WCHAR * VAL_DRAG
Definition: sysparams.c:66
static const WCHAR * KEY_MOUSEKEYS
Definition: sysparams.c:109
static const WCHAR * VAL_KBDDELAY
Definition: sysparams.c:99
static UINT_PTR SpiSetBool(BOOL *pbData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl)
Definition: sysparams.c:548
static const WCHAR * VAL_SCRACT
Definition: sysparams.c:64
static const WCHAR * VAL_SNAPDEFBTN
Definition: sysparams.c:54
static const WCHAR * VAL_ICONVSPC
Definition: sysparams.c:91
static VOID SpiStoreSzInt(PCWSTR pwszKey, PCWSTR pwszValue, INT iValue)
Definition: sysparams.c:430
static const WCHAR * VAL_SENSITIVITY
Definition: sysparams.c:59
static UINT_PTR SpiGetEx(PVOID pvParam, PVOID pvData, ULONG cbSize, FLONG fl)
Definition: sysparams.c:514
static UINT_PTR SpiSetUserPref(DWORD dwMask, PVOID pvValue, FLONG fl)
Definition: sysparams.c:600
static const WCHAR * VAL_DBLCLKTIME
Definition: sysparams.c:53
static const WCHAR * VAL_SCRLLLINES
Definition: sysparams.c:73
static const WCHAR * KEY_KBD
Definition: sysparams.c:97
static const WCHAR * KEY_KDBPREF
Definition: sysparams.c:105
static const WCHAR * VAL_KBDSPD
Definition: sysparams.c:98
static const WCHAR * VAL_ICONSPC
Definition: sysparams.c:90
static const WCHAR * VAL_DRAGWIDTH
Definition: sysparams.c:68
static const WCHAR * VAL_FONTSMOOTHINGTYPE
Definition: sysparams.c:70
static const WCHAR * VAL_GRID
Definition: sysparams.c:65
static const WCHAR * VAL_MOUSE1
Definition: sysparams.c:47
static BOOL SpiNotifyNCMetricsChanged(VOID)
Definition: sysparams.c:801
static const WCHAR * VAL_MOUSEKEYS_MAX
Definition: sysparams.c:111
static const WCHAR * VAL_ITWRAP
Definition: sysparams.c:92
static const WCHAR * VAL_CARETWIDTH
Definition: sysparams.c:77
static UINT_PTR SpiSetWallpaper(PVOID pvParam, FLONG fl)
Definition: sysparams.c:653
static const WCHAR * VAL_MOUSEKEYS_FLAGS
Definition: sysparams.c:110
static const WCHAR * VAL_BORDER
Definition: sysparams.c:89
static UINT_PTR SpiSetMetric(PVOID pvData, INT iValue, PCWSTR pwszValue, FLONG fl)
Definition: sysparams.c:587
static UINT_PTR SpiSetInt(PVOID pvData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl)
Definition: sysparams.c:574
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:21
#define BITSPIXEL
Definition: wingdi.h:720
#define SPI_SETSTICKYKEYS
Definition: winuser.h:1419
#define SPI_GETFILTERKEYS
Definition: winuser.h:1410
#define SPI_GETACCESSTIMEOUT
Definition: winuser.h:1420
#define SPI_GETMOUSEKEYS
Definition: winuser.h:1414
#define SPI_SETBORDER
Definition: winuser.h:1369
#define SPI_GETSHOWSOUNDS
Definition: winuser.h:1416
#define SPI_GETBORDER
Definition: winuser.h:1368
#define SPI_SETMOUSEKEYS
Definition: winuser.h:1415
struct tagHIGHCONTRASTW * LPHIGHCONTRASTW
#define SPI_SETMENUDROPALIGNMENT
Definition: winuser.h:1388
#define SPI_SETDESKWALLPAPER
Definition: winuser.h:1380
#define SPI_GETTOGGLEKEYS
Definition: winuser.h:1412
#define SPI_SETFASTTASKSWITCH
Definition: winuser.h:1396
#define SPI_ICONVERTICALSPACING
Definition: winuser.h:1384
#define SPI_SETDOUBLECLKWIDTH
Definition: winuser.h:1389
#define SPI_SETBEEP
Definition: winuser.h:1365
#define SPI_SETACCESSTIMEOUT
Definition: winuser.h:1421
#define SPI_GETGRIDGRANULARITY
Definition: winuser.h:1378
#define SPI_SETSCREENSAVEACTIVE
Definition: winuser.h:1377
#define SPI_SETDOUBLECLKHEIGHT
Definition: winuser.h:1390
#define SPI_GETFASTTASKSWITCH
Definition: winuser.h:1395
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1391
struct tagFILTERKEYS * LPFILTERKEYS
#define SPI_SETFILTERKEYS
Definition: winuser.h:1411
#define SPI_GETMOUSE
Definition: winuser.h:1366
struct tagACCESSTIMEOUT * LPACCESSTIMEOUT
#define SPI_LANGDRIVER
Definition: winuser.h:1372
#define SPI_SETDESKPATTERN
Definition: winuser.h:1381
#define SPI_SETKEYBOARDSPEED
Definition: winuser.h:1371
#define SPIF_UPDATEINIFILE
Definition: winuser.h:1599
struct tagSTICKYKEYS * LPSTICKYKEYS
#define SPI_SETICONTITLELOGFONT
Definition: winuser.h:1394
#define SPI_SETTOGGLEKEYS
Definition: winuser.h:1413
struct tagMINIMIZEDMETRICS MINIMIZEDMETRICS
#define SPI_GETKEYBOARDSPEED
Definition: winuser.h:1370
#define SPI_GETSTICKYKEYS
Definition: winuser.h:1418
struct tagTOGGLEKEYS * LPTOGGLEKEYS
#define SPI_SETDOUBLECLICKTIME
Definition: winuser.h:1392
#define SPI_GETICONTITLEWRAP
Definition: winuser.h:1385
#define SPI_SETMOUSEBUTTONSWAP
Definition: winuser.h:1393
struct tagSOUNDSENTRYW * LPSOUNDSENTRYW
#define SPI_ICONHORIZONTALSPACING
Definition: winuser.h:1373
struct tagMOUSEKEYS * LPMOUSEKEYS
struct tagMINIMIZEDMETRICS * LPMINIMIZEDMETRICS
#define SPI_GETBEEP
Definition: winuser.h:1364
#define SPI_SETMOUSE
Definition: winuser.h:1367
#define SPI_GETKEYBOARDDELAY
Definition: winuser.h:1382
#define SPI_SETICONTITLEWRAP
Definition: winuser.h:1386
#define SPI_SETSOUNDSENTRY
Definition: winuser.h:1427
#define SPI_SETKEYBOARDDELAY
Definition: winuser.h:1383
#define SPI_GETSOUNDSENTRY
Definition: winuser.h:1426
SERIALKEYSA * LPSERIALKEYS
Definition: winuser.h:5890
#define SPI_SETSCREENSAVETIMEOUT
Definition: winuser.h:1375
#define SPI_SETSHOWSOUNDS
Definition: winuser.h:1417
#define SPI_SETGRIDGRANULARITY
Definition: winuser.h:1379
#define SPI_GETSCREENSAVETIMEOUT
Definition: winuser.h:1374
#define SPI_GETSCREENSAVEACTIVE
Definition: winuser.h:1376
#define SPI_GETMENUDROPALIGNMENT
Definition: winuser.h:1387
#define SPI_SETWHEELSCROLLLINES
Definition: zmouse.h:30

Referenced by UserSystemParametersInfo().

◆ SpiGetSetProbeBuffer()

static BOOL SpiGetSetProbeBuffer ( UINT  uiAction,
UINT  uiParam,
PVOID  pvParam 
)
static

Definition at line 1866 of file sysparams.c.

1867{
1868 BOOL bToUser = TRUE;
1869 ULONG cbSize = 0;
1870
1871 switch (uiAction)
1872 {
1873 case SPI_GETBEEP:
1874 case SPI_GETBORDER:
1883 case SPI_GETDRAGFULLWINDOWS:
1884 case SPI_GETSHOWSOUNDS:
1885 case SPI_GETKEYBOARDPREF:
1886 case SPI_GETSCREENREADER:
1887 case SPI_GETFONTSMOOTHING:
1888 case SPI_GETLOWPOWERTIMEOUT:
1889 case SPI_GETPOWEROFFTIMEOUT:
1890 case SPI_GETLOWPOWERACTIVE:
1891 case SPI_GETPOWEROFFACTIVE:
1892 case SPI_GETMOUSETRAILS:
1893 case SPI_GETSNAPTODEFBUTTON:
1894 case SPI_GETMOUSEHOVERWIDTH:
1895 case SPI_GETMOUSEHOVERHEIGHT:
1896 case SPI_GETMOUSEHOVERTIME:
1897 case SPI_GETWHEELSCROLLLINES:
1898 case SPI_GETMENUSHOWDELAY:
1899#if (_WIN32_WINNT >= 0x0600)
1901#endif
1902 case SPI_GETSHOWIMEUI:
1903 case SPI_GETMOUSESPEED:
1904 case SPI_GETSCREENSAVERRUNNING:
1905#if(WINVER >= 0x0600)
1906 case SPI_GETSCREENSAVESECURE:
1907#endif
1908 case SPI_GETACTIVEWINDOWTRACKING:
1909 case SPI_GETMENUANIMATION:
1910 case SPI_GETCOMBOBOXANIMATION:
1911 case SPI_GETLISTBOXSMOOTHSCROLLING:
1912 case SPI_GETGRADIENTCAPTIONS:
1913 case SPI_GETKEYBOARDCUES:
1914 case SPI_GETACTIVEWNDTRKZORDER:
1915 case SPI_GETHOTTRACKING:
1916 case SPI_GETMENUFADE:
1917 case SPI_GETSELECTIONFADE:
1918 case SPI_GETTOOLTIPANIMATION:
1919 case SPI_GETTOOLTIPFADE:
1920 case SPI_GETCURSORSHADOW:
1921 case SPI_GETUIEFFECTS:
1922 case SPI_GETMOUSESONAR:
1923 case SPI_GETMOUSECLICKLOCK:
1924 case SPI_GETMOUSEVANISH:
1925 case SPI_GETFLATMENU:
1926 case SPI_GETDROPSHADOW:
1927 case SPI_GETBLOCKSENDINPUTRESETS:
1928#if(_WIN32_WINNT >= 0x0600)
1929 case SPI_GETDISABLEOVERLAPPEDCONTENT:
1930 case SPI_GETCLIENTAREAANIMATION:
1931 case SPI_GETCLEARTYPE:
1932 case SPI_GETSPEECHRECOGNITION:
1933#endif
1934 case SPI_GETFOREGROUNDLOCKTIMEOUT:
1935 case SPI_GETACTIVEWNDTRKTIMEOUT:
1936 case SPI_GETFOREGROUNDFLASHCOUNT:
1937 case SPI_GETCARETWIDTH:
1938 case SPI_GETMOUSECLICKLOCKTIME:
1939 case SPI_GETFONTSMOOTHINGTYPE:
1940 case SPI_GETFONTSMOOTHINGCONTRAST:
1941 case SPI_GETFOCUSBORDERWIDTH:
1942 case SPI_GETFOCUSBORDERHEIGHT:
1943 case SPI_GETFONTSMOOTHINGORIENTATION:
1944 cbSize = sizeof(INT);
1945 break;
1946
1949 if (pvParam) cbSize = sizeof(INT);
1950 break;
1951
1952 case SPI_GETMOUSE:
1953 cbSize = 3 * sizeof(INT);
1954 break;
1955
1956 case SPI_GETDESKWALLPAPER:
1957 cbSize = min(uiParam, gspv.ustrWallpaper.Length + 1UL);
1958 break;
1959
1961 cbSize = sizeof(LOGFONTW);
1962 break;
1963
1964 case SPI_GETNONCLIENTMETRICS:
1965 cbSize = sizeof(NONCLIENTMETRICSW);
1966 break;
1967
1968 case SPI_GETMINIMIZEDMETRICS:
1969 cbSize = sizeof(MINIMIZEDMETRICS);
1970 break;
1971
1972 case SPI_GETICONMETRICS:
1973 cbSize = sizeof(ICONMETRICSW);
1974 break;
1975
1976 case SPI_GETWORKAREA:
1977 cbSize = sizeof(RECTL);
1978 break;
1979
1980 case SPI_GETFILTERKEYS:
1981 cbSize = sizeof(FILTERKEYS);
1982 break;
1983
1984 case SPI_GETTOGGLEKEYS:
1985 cbSize = sizeof(TOGGLEKEYS);
1986 break;
1987
1988 case SPI_GETMOUSEKEYS:
1989 cbSize = sizeof(MOUSEKEYS);
1990 break;
1991
1992 case SPI_GETSTICKYKEYS:
1993 cbSize = sizeof(STICKYKEYS);
1994 break;
1995
1997 cbSize = sizeof(ACCESSTIMEOUT);
1998 break;
1999
2000 case SPI_GETSERIALKEYS:
2001 cbSize = sizeof(SERIALKEYS);
2002 break;
2003
2004 case SPI_GETSOUNDSENTRY:
2005 cbSize = sizeof(SOUNDSENTRYW);
2006 break;
2007
2008 case SPI_GETHIGHCONTRAST:
2009 cbSize = sizeof(HIGHCONTRASTW);
2010 break;
2011
2012 case SPI_GETANIMATION:
2013 cbSize = sizeof(ANIMATIONINFO);
2014 break;
2015
2016 case SPI_GETDEFAULTINPUTLANG:
2017 cbSize = sizeof(HKL);
2018 break;
2019
2020#if(WINVER >= 0x0600)
2021 case SPI_GETAUDIODESCRIPTION:
2022 cbSize = sizeof(AUDIODESCRIPTION);
2023 break;
2024#endif
2025
2026 case SPI_SETMOUSE:
2027 cbSize = 3 * sizeof(INT);
2028 bToUser = FALSE;
2029 break;
2030
2032 cbSize = sizeof(LOGFONTW);
2033 bToUser = FALSE;
2034 break;
2035
2036 case SPI_SETNONCLIENTMETRICS:
2037 cbSize = sizeof(NONCLIENTMETRICSW);
2038 bToUser = FALSE;
2039 break;
2040
2041 case SPI_SETMINIMIZEDMETRICS:
2042 cbSize = sizeof(MINIMIZEDMETRICS);
2043 bToUser = FALSE;
2044 break;
2045
2046 case SPI_SETICONMETRICS:
2047 cbSize = sizeof(ICONMETRICSW);
2048 bToUser = FALSE;
2049 break;
2050
2051 case SPI_SETWORKAREA:
2052 cbSize = sizeof(RECTL);
2053 bToUser = FALSE;
2054 break;
2055
2056 case SPI_SETFILTERKEYS:
2057 cbSize = sizeof(FILTERKEYS);
2058 bToUser = FALSE;
2059 break;
2060
2061 case SPI_SETTOGGLEKEYS:
2062 cbSize = sizeof(TOGGLEKEYS);
2063 bToUser = FALSE;
2064 break;
2065
2066 case SPI_SETMOUSEKEYS:
2067 cbSize = sizeof(MOUSEKEYS);
2068 bToUser = FALSE;
2069 break;
2070
2071 case SPI_SETSTICKYKEYS:
2072 cbSize = sizeof(STICKYKEYS);
2073 bToUser = FALSE;
2074 break;
2075
2077 cbSize = sizeof(ACCESSTIMEOUT);
2078 bToUser = FALSE;
2079 break;
2080
2081 case SPI_SETSERIALKEYS:
2082 cbSize = sizeof(SERIALKEYS);
2083 bToUser = FALSE;
2084 break;
2085
2086 case SPI_SETSOUNDSENTRY:
2087 cbSize = sizeof(SOUNDSENTRYW);
2088 bToUser = FALSE;
2089 break;
2090
2091 case SPI_SETHIGHCONTRAST:
2092 cbSize = sizeof(HIGHCONTRASTW);
2093 bToUser = FALSE;
2094 break;
2095
2096 case SPI_SETANIMATION:
2097 cbSize = sizeof(ANIMATIONINFO);
2098 bToUser = FALSE;
2099 break;
2100
2101 case SPI_SETDEFAULTINPUTLANG:
2102 cbSize = sizeof(HKL);
2103 bToUser = FALSE;
2104 break;
2105
2106 case SPI_SETMOUSESPEED:
2107 cbSize = sizeof(INT);
2108 bToUser = FALSE;
2109 break;
2110 }
2111
2112 if (cbSize)
2113 {
2114 _SEH2_TRY
2115 {
2116 if (bToUser)
2117 {
2118 ProbeForWrite(pvParam, cbSize, sizeof(UCHAR));
2119 }
2120 else
2121 {
2122 ProbeForRead(pvParam, cbSize, sizeof(UCHAR));
2123 }
2124 }
2126 {
2127 _SEH2_YIELD(return FALSE);
2128 }
2129 _SEH2_END;
2130 }
2131
2132 return TRUE;
2133}
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
Definition: exintrin.c:102
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
Definition: exintrin.c:143
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
#define INT
Definition: polytest.cpp:20
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:104
#define _SEH2_END
Definition: pseh2_64.h:194
#define _SEH2_TRY
Definition: pseh2_64.h:93
#define _SEH2_YIELD(__stmt)
Definition: pseh2_64.h:207
unsigned char UCHAR
Definition: typedefs.h:53
SERIALKEYSA SERIALKEYS
Definition: winuser.h:5890
struct tagSTICKYKEYS STICKYKEYS
struct tagMOUSEKEYS MOUSEKEYS
struct tagFILTERKEYS FILTERKEYS
struct tagSOUNDSENTRYW SOUNDSENTRYW
struct tagHIGHCONTRASTW HIGHCONTRASTW
struct tagACCESSTIMEOUT ACCESSTIMEOUT
struct tagANIMATIONINFO ANIMATIONINFO
struct tagTOGGLEKEYS TOGGLEKEYS

Referenced by UserSystemParametersInfo().

◆ SpiGetUserPref()

static UINT_PTR SpiGetUserPref ( DWORD  dwMask,
PVOID  pvParam,
FLONG  fl 
)
inlinestatic

Definition at line 640 of file sysparams.c.

641{
642 INT iValue = gspv.dwUserPrefMask & dwMask ? 1 : 0;
643 return SpiGetInt(pvParam, &iValue, fl);
644}
DWORD dwUserPrefMask
Definition: sysparams.h:124

Referenced by SpiGetSet().

◆ SpiLoadDWord()

static INT SpiLoadDWord ( PCWSTR  pwszKey,
PCWSTR  pwszValue,
INT  iValue 
)
static

Loading the settings

Definition at line 118 of file sysparams.c.

119{
121 if (!RegReadUserSetting(pwszKey, pwszValue, REG_DWORD, &Result, sizeof(Result)))
122 {
123 return iValue;
124 }
125 return Result;
126}
unsigned long DWORD
Definition: ntddk_ex.h:95
#define REG_DWORD
Definition: sdbapi.c:615
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409

Referenced by NtUserUpdatePerUserSystemParameters(), and SpiUpdatePerUserSystemParameters().

◆ SpiLoadFont()

static VOID SpiLoadFont ( PLOGFONTW  plfOut,
LPWSTR  pwszValueName,
PLOGFONTW  plfDefault 
)
static

Definition at line 190 of file sysparams.c.

191{
192 BOOL bResult;
193
194 bResult = RegReadUserSetting(KEY_METRIC,
197 plfOut,
198 sizeof(LOGFONTW));
199 if (!bResult)
200 *plfOut = *plfDefault;
201}
#define REG_BINARY
Definition: nt_native.h:1499
_In_z_ PCWSTR pwszValueName
Definition: ntuser.h:42

Referenced by SpiUpdatePerUserSystemParameters().

◆ SpiLoadInt()

static INT SpiLoadInt ( PCWSTR  pwszKey,
PCWSTR  pwszValue,
INT  iValue 
)
static

Definition at line 130 of file sysparams.c.

131{
132 WCHAR awcBuffer[12];
133 ULONG cbSize;
134
135 cbSize = sizeof(awcBuffer);
136 if (!RegReadUserSetting(pwszKey, pwszValue, REG_SZ, awcBuffer, cbSize))
137 {
138 return iValue;
139 }
140 return _wtoi(awcBuffer);
141}
_ACRTIMP int __cdecl _wtoi(const wchar_t *)
Definition: wcs.c:2778
#define REG_SZ
Definition: layer.c:22
short WCHAR
Definition: pedump.c:58

Referenced by SpiLoadMetric(), SpiLoadMouse(), SpiLoadTimeOut(), SpiSetWallpaper(), and SpiUpdatePerUserSystemParameters().

◆ SpiLoadMetric()

static INT SpiLoadMetric ( PCWSTR  pwszValue,
INT  iValue 
)
static

Definition at line 178 of file sysparams.c.

179{
180 INT iRegVal;
181
182 iRegVal = SpiLoadInt(KEY_METRIC, pwszValue, METRIC2REG(iValue));
183 TRACE("Loaded metric setting '%S', iValue=%d(reg:%d), ret=%d(reg:%d)\n",
184 pwszValue, iValue, METRIC2REG(iValue), REG2METRIC(iRegVal), iRegVal);
185 return REG2METRIC(iRegVal);
186}
static INT SpiLoadInt(PCWSTR pwszKey, PCWSTR pwszValue, INT iValue)
Definition: sysparams.c:130
#define REG2METRIC(reg)
Definition: sysparams.c:25
#define METRIC2REG(met)
Definition: sysparams.c:26

Referenced by SpiUpdatePerUserSystemParameters().

◆ SpiLoadMouse()

static INT SpiLoadMouse ( PCWSTR  pwszValue,
INT  iValue 
)
static

Definition at line 171 of file sysparams.c.

172{
173 return SpiLoadInt(KEY_MOUSE, pwszValue, iValue);
174}

Referenced by SpiUpdatePerUserSystemParameters().

◆ SpiLoadTimeOut()

static DWORD SpiLoadTimeOut ( VOID  )
static

Definition at line 157 of file sysparams.c.

158{ // Must have the string!
159 WCHAR szApplicationName[MAX_PATH];
160 RtlZeroMemory(&szApplicationName, sizeof(szApplicationName));
161 if (!RegReadUserSetting(KEY_DESKTOP, VAL_SCRNSV, REG_SZ, &szApplicationName, sizeof(szApplicationName)))
162 {
163 return 0;
164 }
165 if (szApplicationName[0] == 0) return 0;
166 return SpiLoadInt(KEY_DESKTOP, VAL_SCRTO, 600);
167}
#define MAX_PATH
Definition: compat.h:34
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
static const WCHAR * VAL_SCRNSV
Definition: sysparams.c:63

Referenced by SpiUpdatePerUserSystemParameters().

◆ SpiLoadUserPrefMask()

static DWORD SpiLoadUserPrefMask ( DWORD  dValue)
static

Definition at line 145 of file sysparams.c.

146{
148 if (!RegReadUserSetting(KEY_DESKTOP, VAL_USERPREFMASK, REG_BINARY, &Result, sizeof(Result)))
149 {
150 return dValue;
151 }
152 return Result;
153}
static const WCHAR * VAL_USERPREFMASK
Definition: sysparams.c:81

Referenced by SpiUpdatePerUserSystemParameters().

◆ SpiMemCopy()

static UINT_PTR SpiMemCopy ( PVOID  pvDst,
PVOID  pvSrc,
ULONG  cbSize,
BOOL  bProtect 
)
static

Get/Set value

Definition at line 466 of file sysparams.c.

467{
469
470 if (bProtect)
471 {
473 {
474 RtlCopyMemory(pvDst, pvSrc, cbSize);
475 }
477 {
479 }
480 _SEH2_END;
481 }
482 else
483 {
484 RtlCopyMemory(pvDst, pvSrc, cbSize);
485 }
486
487 if (!NT_SUCCESS(Status))
488 {
490 ERR("SpiMemCopy failed, pvDst=%p, pvSrc=%p, bProtect=%d\n", pvDst, pvSrc, bProtect);
491 }
492
493 return NT_SUCCESS(Status);
494}
LONG NTSTATUS
Definition: precomp.h:26
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
Status
Definition: gdiplustypes.h:24
#define _SEH2_GetExceptionCode()
Definition: pseh2_64.h:204
#define STATUS_SUCCESS
Definition: shellext.h:65
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
Definition: error.c:30

Referenced by SpiGet(), SpiSet(), and SpiSetWallpaper().

◆ SpiNotifyNCMetricsChanged()

static BOOL SpiNotifyNCMetricsChanged ( VOID  )
static

Definition at line 801 of file sysparams.c.

802{
803 PWND pwndDesktop, pwndCurrent;
804 HWND *ahwnd;
806 int i;
807
808 pwndDesktop = UserGetDesktopWindow();
809 ASSERT(pwndDesktop);
810
811 ahwnd = IntWinListChildren(pwndDesktop);
812 if(!ahwnd)
813 return FALSE;
814
815 for (i = 0; ahwnd[i]; i++)
816 {
817 pwndCurrent = UserGetWindowObject(ahwnd[i]);
818 if(!pwndCurrent)
819 continue;
820
821 UserRefObjectCo(pwndCurrent, &Ref);
822 co_WinPosSetWindowPos(pwndCurrent, 0, pwndCurrent->rcWindow.left,pwndCurrent->rcWindow.top,
823 pwndCurrent->rcWindow.right-pwndCurrent->rcWindow.left
824 ,pwndCurrent->rcWindow.bottom - pwndCurrent->rcWindow.top,
827 UserDerefObjectCo(pwndCurrent);
828 }
829
831
832 return TRUE;
833}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define ASSERT(a)
Definition: mode.c:44
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
BOOLEAN FASTCALL co_WinPosSetWindowPos(PWND Window, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
Definition: winpos.c:1792
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:44
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:28
Definition: object.h:4
Definition: ntuser.h:698
RECT rcWindow
Definition: ntuser.h:720
LONG right
Definition: windef.h:108
LONG bottom
Definition: windef.h:109
LONG top
Definition: windef.h:107
LONG left
Definition: windef.h:106
PWND FASTCALL UserGetWindowObject(HWND hWnd)
Definition: window.c:123
PWND FASTCALL UserGetDesktopWindow(VOID)
Definition: desktop.c:1413
#define USERTAG_WINDOWLIST
Definition: tags.h:298
HWND *FASTCALL IntWinListChildren(PWND Window)
Definition: window.c:275
#define SWP_NOACTIVATE
Definition: winuser.h:1253
#define SWP_NOREDRAW
Definition: winuser.h:1257
#define SWP_FRAMECHANGED
Definition: winuser.h:1251
#define SWP_NOMOVE
Definition: winuser.h:1255
#define SWP_NOCOPYBITS
Definition: winuser.h:1254
#define SWP_NOZORDER
Definition: winuser.h:1258

Referenced by SpiGetSet().

◆ SpiSet()

static UINT_PTR SpiSet ( PVOID  pvData,
PVOID  pvParam,
ULONG  cbSize,
FLONG  fl 
)
inlinestatic

Definition at line 506 of file sysparams.c.

507{
509 return SpiMemCopy(pvData, pvParam, cbSize, fl & SPIF_PROTECT);
510}
#define ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION
Definition: winerror.h:1285

Referenced by SpiGetEx(), and SpiGetSet().

◆ SpiSetBool()

static UINT_PTR SpiSetBool ( BOOL pbData,
INT  iValue,
PCWSTR  pwszKey,
PCWSTR  pwszValue,
FLONG  fl 
)
inlinestatic

Definition at line 548 of file sysparams.c.

549{
551 *pbData = iValue ? TRUE : FALSE;
553 {
554 SpiStoreSzInt(pwszKey, pwszValue, iValue);
555 }
556 return (UINT_PTR)pwszKey;
557}

Referenced by SpiGetSet().

◆ SpiSetDWord()

static UINT_PTR SpiSetDWord ( PVOID  pvData,
INT  iValue,
PCWSTR  pwszKey,
PCWSTR  pwszValue,
FLONG  fl 
)
inlinestatic

Definition at line 561 of file sysparams.c.

562{
564 *(INT*)pvData = iValue;
566 {
567 SpiStoreDWord(pwszKey, pwszValue, iValue);
568 }
569 return (UINT_PTR)pwszKey;
570}
static VOID SpiStoreDWord(PCWSTR pwszKey, PCWSTR pwszValue, DWORD Value)
Definition: sysparams.c:408

Referenced by SpiGetSet().

◆ SpiSetInt()

static UINT_PTR SpiSetInt ( PVOID  pvData,
INT  iValue,
PCWSTR  pwszKey,
PCWSTR  pwszValue,
FLONG  fl 
)
inlinestatic

Definition at line 574 of file sysparams.c.

575{
577 *(INT*)pvData = iValue;
579 {
580 SpiStoreSzInt(pwszKey, pwszValue, iValue);
581 }
582 return (UINT_PTR)pwszKey;
583}

Referenced by SpiGetSet().

◆ SpiSetMetric()

static UINT_PTR SpiSetMetric ( PVOID  pvData,
INT  iValue,
PCWSTR  pwszValue,
FLONG  fl 
)
inlinestatic

Definition at line 587 of file sysparams.c.

588{
590 *(INT*)pvData = iValue;
592 {
593 SpiStoreMetric(pwszValue, iValue);
594 }
595 return (UINT_PTR)KEY_METRIC;
596}

Referenced by SpiGetSet().

◆ SpiSetUserPref()

static UINT_PTR SpiSetUserPref ( DWORD  dwMask,
PVOID  pvValue,
FLONG  fl 
)
inlinestatic

Definition at line 600 of file sysparams.c.

601{
602 DWORD dwRegMask;
603 BOOL bValue = PtrToUlong(pvValue);
604
606
607 /* Set or clear bit according to bValue */
608 gspv.dwUserPrefMask = bValue ? gspv.dwUserPrefMask | dwMask :
609 gspv.dwUserPrefMask & ~dwMask;
610
612 {
613 /* Read current value */
614 if (!RegReadUserSetting(KEY_DESKTOP,
617 &dwRegMask,
618 sizeof(DWORD)))
619 {
620 WARN("Failed to read UserPreferencesMask setting\n");
621 dwRegMask = 0;
622 }
623
624 /* Set or clear bit according to bValue */
625 dwRegMask = bValue ? (dwRegMask | dwMask) : (dwRegMask & ~dwMask);
626
627 /* write back value */
628 RegWriteUserSetting(KEY_DESKTOP,
631 &dwRegMask,
632 sizeof(DWORD));
633 }
634
635 return (UINT_PTR)KEY_DESKTOP;
636}
#define WARN(fmt,...)
Definition: precomp.h:61

Referenced by SpiGetSet().

◆ SpiSetWallpaper()

static UINT_PTR SpiSetWallpaper ( PVOID  pvParam,
FLONG  fl 
)
static

Definition at line 653 of file sysparams.c.

654{
655 UNICODE_STRING ustr;
656 WCHAR awc[MAX_PATH];
657 BOOL bResult;
658 HBITMAP hbmp, hOldBitmap;
659 SURFACE *psurfBmp;
660 ULONG ulTile, ulStyle;
661
663
664 if (!pvParam)
665 {
666 /* FIXME: Reset Wallpaper to registry value */
667 return (UINT_PTR)KEY_DESKTOP;
668 }
669
670 /* Capture UNICODE_STRING */
671 bResult = SpiMemCopy(&ustr, pvParam, sizeof(ustr), fl & SPIF_PROTECT);
672 if (!bResult)
673 {
674 return 0;
675 }
676 if (ustr.Length > MAX_PATH * sizeof(WCHAR))
677 {
678 return 0;
679 }
680
681 /* Copy the string buffer name */
682 bResult = SpiMemCopy(gspv.awcWallpaper, ustr.Buffer, ustr.Length, fl & SPIF_PROTECT);
683 if (!bResult)
684 {
685 return 0;
686 }
687
688 /* Update the UNICODE_STRING */
692 gspv.awcWallpaper[ustr.Length / sizeof(WCHAR)] = 0;
693
694 TRACE("SpiSetWallpaper, name=%S\n", gspv.awcWallpaper);
695
696 /* Update registry */
698 {
700 }
701
702 /* Got a filename? */
703 if (gspv.awcWallpaper[0] != 0)
704 {
705 /* Convert file name to nt file name */
706 ustr.Buffer = awc;
707 ustr.MaximumLength = MAX_PATH * sizeof(WCHAR);
708 ustr.Length = 0;
710 {
711 ERR("W32kDosPathNameToNtPathName failed\n");
712 return 0;
713 }
714
715 /* Load the Bitmap */
716 hbmp = UserLoadImage(ustr.Buffer);
717 if (!hbmp)
718 {
719 ERR("UserLoadImage failed\n");
720 return 0;
721 }
722
723 /* Try to get the size of the wallpaper */
724 if (!(psurfBmp = SURFACE_ShareLockSurface(hbmp)))
725 {
727 return 0;
728 }
729
733
735
736 /* Change the bitmap's ownership */
738
739 /* Yes, Windows really loads the current setting from the registry. */
740 ulTile = SpiLoadInt(KEY_DESKTOP, L"TileWallpaper", 0);
741 ulStyle = SpiLoadInt(KEY_DESKTOP, L"WallpaperStyle", 0);
742 TRACE("SpiSetWallpaper: ulTile=%lu, ulStyle=%lu\n", ulTile, ulStyle);
743
744 /* Check the values we found in the registry */
745 if (ulTile && !ulStyle)
746 {
748 }
749 else if (!ulTile && ulStyle)
750 {
751 if (ulStyle == 2)
752 {
754 }
755 else if (ulStyle == 6)
756 {
758 }
759 else if (ulStyle == 10)
760 {
762 }
763 }
764 }
765 else
766 {
767 /* Remove wallpaper */
768 gspv.cxWallpaper = 0;
769 gspv.cyWallpaper = 0;
770 hbmp = NULL;
771 }
772
773 /* Take care of the old wallpaper, if any */
774 hOldBitmap = gspv.hbmWallpaper;
775 if(hOldBitmap != NULL)
776 {
777 /* Delete the old wallpaper */
779 GreDeleteObject(hOldBitmap);
780 }
781
782 /* Set the new wallpaper */
786 {
788 }
789 else
790 {
792 }
793
795
796
797 return (UINT_PTR)KEY_DESKTOP;
798}
HBITMAP hbmp
BOOL NTAPI NtUserRedrawWindow(HWND hWnd, CONST RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags)
Definition: painting.c:2002
#define GDI_OBJ_HMGR_POWNED
Definition: ntgdihdl.h:117
WALLPAPER_MODE WallpaperMode
Definition: sysparams.h:144
ULONG cxWallpaper
Definition: sysparams.h:143
ULONG cyWallpaper
Definition: sysparams.h:143
HANDLE hbmWallpaper
Definition: sysparams.h:142
SURFOBJ SurfObj
Definition: surface.h:8
SIZEL sizlBitmap
Definition: winddi.h:1209
USHORT MaximumLength
Definition: env_spec_w32.h:370
@ wmCenter
Definition: sysparams.h:41
@ wmFill
Definition: sysparams.h:45
@ wmTile
Definition: sysparams.h:42
@ wmStretch
Definition: sysparams.h:43
@ wmFit
Definition: sysparams.h:44
HWND FASTCALL UserGetShellWindow(VOID)
Definition: window.c:3684
#define SURFACE_ShareUnlockSurface(pBMObj)
Definition: surface.h:102
#define SURFACE_ShareLockSurface(hBMObj)
Definition: surface.h:91
BOOL NTAPI GreSetObjectOwner(HGDIOBJ hobj, ULONG ulOwner)
Definition: gdiobj.c:1261
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1158
HBITMAP NTAPI UserLoadImage(PCWSTR)
Definition: file.c:159
BOOL NTAPI W32kDosPathNameToNtPathName(PCWSTR, PUNICODE_STRING)
static VOID SpiStoreSz(PCWSTR pwszKey, PCWSTR pwszValue, PCWSTR pwsz)
Definition: sysparams.c:419
HBITMAP IntStretchWallpaper(_In_ PWND pwndDesktop, _In_ HBITMAP hBitmap)
Definition: desktop.c:1988
#define RDW_ERASE
Definition: winuser.h:1222
#define RDW_INVALIDATE
Definition: winuser.h:1225

Referenced by SpiGetSet().

◆ SpiSetYesNo()

static UINT_PTR SpiSetYesNo ( BOOL pbData,
BOOL  bValue,
PCWSTR  pwszKey,
PCWSTR  pwszValue,
FLONG  fl 
)
inlinestatic

Definition at line 535 of file sysparams.c.

536{
538 *pbData = bValue ? TRUE : FALSE;
540 {
541 SpiStoreSz(pwszKey, pwszValue, bValue ? L"Yes" : L"No");
542 }
543 return (UINT_PTR)pwszKey;
544}

Referenced by SpiGetSet().

◆ SpiStoreDWord()

static VOID SpiStoreDWord ( PCWSTR  pwszKey,
PCWSTR  pwszValue,
DWORD  Value 
)
static

Storing the settings

Definition at line 408 of file sysparams.c.

409{
410 RegWriteUserSetting(pwszKey,
411 pwszValue,
412 REG_DWORD,
413 &Value,
414 sizeof(Value));
415}
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

Referenced by SpiSetDWord().

◆ SpiStoreFont()

static VOID SpiStoreFont ( PCWSTR  pwszValue,
LOGFONTW plogfont 
)
static

Definition at line 451 of file sysparams.c.

452{
453 RegWriteUserSetting(KEY_METRIC,
454 pwszValue,
456 plogfont,
457 sizeof(LOGFONTW));
458}

Referenced by SpiGetSet().

◆ SpiStoreMetric()

static VOID SpiStoreMetric ( LPCWSTR  pwszValue,
INT  iValue 
)
static

Definition at line 444 of file sysparams.c.

445{
446 SpiStoreSzInt(KEY_METRIC, pwszValue, METRIC2REG(iValue));
447}

Referenced by SpiGetSet(), and SpiSetMetric().

◆ SpiStoreSz()

static VOID SpiStoreSz ( PCWSTR  pwszKey,
PCWSTR  pwszValue,
PCWSTR  pwsz 
)
static

Definition at line 419 of file sysparams.c.

420{
421 RegWriteUserSetting(pwszKey,
422 pwszValue,
423 REG_SZ,
424 pwsz,
425 (wcslen(pwsz) + 1) * sizeof(WCHAR));
426}
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988

Referenced by SpiSetWallpaper(), and SpiSetYesNo().

◆ SpiStoreSzInt()

static VOID SpiStoreSzInt ( PCWSTR  pwszKey,
PCWSTR  pwszValue,
INT  iValue 
)
static

Definition at line 430 of file sysparams.c.

431{
432 WCHAR awcBuffer[15];
433
434 _itow(iValue, awcBuffer, 10);
435 RegWriteUserSetting(pwszKey,
436 pwszValue,
437 REG_SZ,
438 awcBuffer,
439 (wcslen(awcBuffer) + 1) * sizeof(WCHAR));
440}
_ACRTIMP wchar_t *__cdecl _itow(int, wchar_t *, int)
Definition: string.c:2140

Referenced by SpiGetSet(), SpiSetBool(), SpiSetInt(), and SpiStoreMetric().

◆ SpiUpdatePerUserSystemParameters()

static VOID SpiUpdatePerUserSystemParameters ( VOID  )
static

Definition at line 229 of file sysparams.c.

230{
231 static LOGFONTW lf1 = {-11, 0, 0, 0, FW_NORMAL, FALSE, FALSE,
233 VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif"};
234 static LOGFONTW lf2 = {-11, 0, 0, 0, FW_BOLD, FALSE, FALSE,
236 VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif"};
237
238 TRACE("Enter SpiUpdatePerUserSystemParameters\n");
239
240 /* Clear the structure */
241 RtlZeroMemory(&gspv, sizeof(gspv));
242
243 /* Load mouse settings */
257
258 /* Load keyboard settings */
261
262 /* Load NONCLIENTMETRICS */
263 gspv.ncm.cbSize = sizeof(NONCLIENTMETRICSW);
264 gspv.ncm.iBorderWidth = SpiLoadMetric(VAL_BORDER, 1);
265 gspv.ncm.iScrollWidth = SpiLoadMetric(L"ScrollWidth", 16);
266 gspv.ncm.iScrollHeight = SpiLoadMetric(L"ScrollHeight", 16);
267 gspv.ncm.iCaptionWidth = SpiLoadMetric(L"CaptionWidth", 19);
268 gspv.ncm.iCaptionHeight = SpiLoadMetric(L"CaptionHeight", 19);
269 gspv.ncm.iSmCaptionWidth = SpiLoadMetric(L"SmCaptionWidth", 12);
270 gspv.ncm.iSmCaptionHeight = SpiLoadMetric(L"SmCaptionHeight", 15);
271 gspv.ncm.iMenuWidth = SpiLoadMetric(L"MenuWidth", 18);
272 gspv.ncm.iMenuHeight = SpiLoadMetric(L"MenuHeight", 18);
273#if (WINVER >= 0x0600)
274 gspv.ncm.iPaddedBorderWidth = SpiLoadMetric(L"PaddedBorderWidth", 18);
275#endif
276 SpiLoadFont(&gspv.ncm.lfCaptionFont, L"CaptionFont", &lf2);
277 SpiLoadFont(&gspv.ncm.lfSmCaptionFont, L"SmCaptionFont", &lf1);
278 SpiLoadFont(&gspv.ncm.lfMenuFont, L"MenuFont", &lf1);
279 SpiLoadFont(&gspv.ncm.lfStatusFont, L"StatusFont", &lf1);
280 SpiLoadFont(&gspv.ncm.lfMessageFont, L"MessageFont", &lf1);
281
282 /* Load MINIMIZEDMETRICS */
283 gspv.mm.cbSize = sizeof(MINIMIZEDMETRICS);
284 gspv.mm.iWidth = SpiLoadMetric(L"MinWidth", 160);
285 gspv.mm.iHorzGap = SpiLoadMetric(L"MinHorzGap", 160);
286 gspv.mm.iVertGap = SpiLoadMetric(L"MinVertGap", 24);
287 gspv.mm.iArrange = SpiLoadInt(KEY_METRIC, L"MinArrange", ARW_HIDE);
288
289 /* Load ICONMETRICS */
290 gspv.im.cbSize = sizeof(ICONMETRICSW);
291 gspv.im.iHorzSpacing = SpiLoadMetric(VAL_ICONSPC, 64);
292 gspv.im.iVertSpacing = SpiLoadMetric(VAL_ICONVSPC, 64);
293 gspv.im.iTitleWrap = SpiLoadMetric(VAL_ITWRAP, 1);
294 SpiLoadFont(&gspv.im.lfFont, L"IconFont", &lf1);
295
296 /* Load desktop settings */
300 if (gpsi)
301 gpsi->dtCaretBlink = SpiLoadInt(KEY_DESKTOP, VAL_CARETRATE, 530);
310#if (_WIN32_WINNT >= 0x0600)
311 gspv.uiWheelScrollChars = SpiLoadInt(KEY_DESKTOP, VAL_SCRLLCHARS, 3);
312#endif
313
314 /* Some hardcoded values for now */
315
317 gspv.bBeep = TRUE;
321 gspv.dwMenuShowDelay = SpiLoadInt(KEY_DESKTOP, L"MenuShowDelay", 400);
323
327#if(WINVER >= 0x0600)
328 gspv.bScrSaverSecure = FALSE;
329#endif
330
332
336 gspv.mousekeys.cbSize = sizeof(MOUSEKEYS);
340 gspv.mousekeys.iCtrlSpeed = 8; // FIXME
346
349
350 /* Make sure we don't use broken values */
352
353 /* Update SystemMetrics */
354 InitMetrics();
355
356 if (gbSpiInitialized && gpsi)
357 {
362 }
363
365
366 gdwLanguageToggleKey = UserGetLanguageToggle(L"Language Hotkey", 1);
367 gdwLayoutToggleKey = UserGetLanguageToggle(L"Layout Hotkey", 2);
368}
PSERVERINFO gpsi
Definition: imm.c:18
#define SRVINFO_KBDPREF
Definition: ntuser.h:956
#define PUSIF_COMBOBOXANIMATION
Definition: ntuser.h:999
#define PUSIF_KEYBOARDCUES
Definition: ntuser.h:1001
#define PUSIF_LISTBOXSMOOTHSCROLLING
Definition: ntuser.h:1000
DWORD iCtrlSpeed
Definition: winuser.h:3523
DWORD dwSRVIFlags
Definition: ntuser.h:1055
LONG tmAveCharWidth
Definition: wingdi.h:2834
#define SPITESTPREF(x)
Definition: sysparams.h:201
BOOL gbEnableHexNumpad
Definition: keyboard.c:36
BOOL NTAPI InitMetrics(VOID)
Definition: metric.c:40
static DWORD SpiLoadUserPrefMask(DWORD dValue)
Definition: sysparams.c:145
static VOID SpiFixupValues(VOID)
Definition: sysparams.c:205
static INT SpiLoadMouse(PCWSTR pwszValue, INT iValue)
Definition: sysparams.c:171
static INT SpiLoadMetric(PCWSTR pwszValue, INT iValue)
Definition: sysparams.c:178
static DWORD SpiLoadTimeOut(VOID)
Definition: sysparams.c:157
static const WCHAR * KEY_INPUT_METHOD
Definition: sysparams.c:101
static const WCHAR * VAL_CARETRATE
Definition: sysparams.c:76
static VOID SpiLoadFont(PLOGFONTW plfOut, LPWSTR pwszValueName, PLOGFONTW plfDefault)
Definition: sysparams.c:190
#define VARIABLE_PITCH
Definition: wingdi.h:445
#define DEFAULT_QUALITY
Definition: wingdi.h:436
#define FW_BOLD
Definition: wingdi.h:378
#define ANSI_CHARSET
Definition: wingdi.h:383
#define FW_NORMAL
Definition: wingdi.h:373
#define FF_SWISS
Definition: wingdi.h:452
#define ARW_HIDE
Definition: winuser.h:1087

Referenced by InitSysParams(), and NtUserUpdatePerUserSystemParameters().

◆ UserSystemParametersInfo()

BOOL FASTCALL UserSystemParametersInfo ( UINT  uiAction,
UINT  uiParam,
PVOID  pvParam,
UINT  fWinIni 
)

Definition at line 2137 of file sysparams.c.

2142{
2143 ULONG_PTR ulResult;
2145
2146 ASSERT(ppi);
2147
2148 if (!gbSpiInitialized)
2149 {
2151 //ASSERT(FALSE);
2152 return FALSE;
2153 }
2154
2155 /* Get a pointer to the current Windowstation */
2156 if (!ppi->prpwinsta)
2157 {
2158 ERR("UserSystemParametersInfo called without active window station.\n");
2159 //ASSERT(FALSE);
2160 //return FALSE;
2161 }
2162
2163 if ((fWinIni & SPIF_PROTECT) && !SpiGetSetProbeBuffer(uiAction, uiParam, pvParam))
2164 {
2166 return FALSE;
2167 }
2168
2169 /* Do the actual operation */
2170 ulResult = SpiGetSet(uiAction, uiParam, pvParam, fWinIni);
2171
2172 /* Did we change something? */
2173 if (ulResult > 1)
2174 {
2176
2177 /* Update system metrics */
2178 InitMetrics();
2179
2180 /* Send notification to toplevel windows, if requested */
2181 if (fWinIni & SPIF_SENDCHANGE)
2182 {
2183 /* Send WM_SETTINGCHANGE to all toplevel windows */
2186 (WPARAM)uiAction,
2187 (LPARAM)ulResult,
2189 100,
2190 &ulResult);
2191 }
2192 ulResult = 1;
2193 }
2194
2195 return ulResult;
2196}
#define KeRosDumpStackFrames(Frames, Count)
Definition: gdidebug.h:11
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
Definition: process.c:1213
struct _WINSTATION_OBJECT * prpwinsta
Definition: win32.h:268
uint32_t ULONG_PTR
Definition: typedefs.h:65
LRESULT FASTCALL co_IntSendMessageTimeout(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT uFlags, UINT uTimeout, ULONG_PTR *uResult)
Definition: message.c:1707
static UINT_PTR SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl)
Definition: sysparams.c:837
static BOOL SpiGetSetProbeBuffer(UINT uiAction, UINT uiParam, PVOID pvParam)
Definition: sysparams.c:1866
#define ERROR_NOACCESS
Definition: winerror.h:902
#define HWND_BROADCAST
Definition: winuser.h:1215
#define SPIF_SENDCHANGE
Definition: winuser.h:1600
#define WM_SETTINGCHANGE
Definition: winuser.h:1657
#define SMTO_NORMAL
Definition: winuser.h:1236

Referenced by co_IntCalculateSnapPosition(), DefWndDoSizeMove(), GetSnapActivationPoint(), IntDrawMenuBarTemp(), IntPaintDesktop(), MENU_DrawBitmapItem(), MENU_DrawMenuItem(), MenuInit(), NC_DoNCPaint(), NC_HandleNCLButtonDblClk(), NtUserSystemParametersInfo(), UserDrawCaptionBar(), and UserDrawCaptionText().

Variable Documentation

◆ g_bWindowSnapEnabled

BOOL g_bWindowSnapEnabled = TRUE

◆ g_PaintDesktopVersion

BOOL g_PaintDesktopVersion = FALSE

Definition at line 19 of file sysparams.c.

Referenced by IntPaintDesktop(), and NtUserUpdatePerUserSystemParameters().

◆ gbSpiInitialized

BOOL gbSpiInitialized = FALSE

◆ gspv

◆ KEY_DESKTOP

◆ KEY_INPUT_METHOD

const WCHAR* KEY_INPUT_METHOD = L"Control Panel\\Input Method"
static

Definition at line 101 of file sysparams.c.

Referenced by SpiUpdatePerUserSystemParameters().

◆ KEY_KBD

const WCHAR* KEY_KBD = L"Control Panel\\Keyboard"
static

Definition at line 97 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ KEY_KDBPREF

const WCHAR* KEY_KDBPREF = L"Control Panel\\Accessibility\\Keyboard Preference"
static

Definition at line 105 of file sysparams.c.

Referenced by SpiGetSet().

◆ KEY_MDALIGN

const WCHAR* KEY_MDALIGN = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
static

Definition at line 85 of file sysparams.c.

Referenced by SpiGetSet().

◆ KEY_METRIC

const WCHAR* KEY_METRIC = L"Control Panel\\Desktop\\WindowMetrics"
static

◆ KEY_MOUSE

const WCHAR* KEY_MOUSE = L"Control Panel\\Mouse"
static

Definition at line 46 of file sysparams.c.

Referenced by SpiGetSet(), and SpiLoadMouse().

◆ KEY_MOUSEKEYS

const WCHAR* KEY_MOUSEKEYS = L"Control Panel\\Accessibility\\MouseKeys"
static

Definition at line 109 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ KEY_SCRREAD

const WCHAR* KEY_SCRREAD = L"Control Panel\\Accessibility\\Blind Access"
static

Definition at line 106 of file sysparams.c.

Referenced by SpiGetSet().

◆ KEY_SHOWSNDS

const WCHAR* KEY_SHOWSNDS = L"Control Panel\\Accessibility\\ShowSounds"
static

Definition at line 104 of file sysparams.c.

Referenced by SpiGetSet().

◆ KEY_SOUND

const WCHAR* KEY_SOUND = L"Control Panel\\Sound"
static

Definition at line 94 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_BEEP

const WCHAR* VAL_BEEP = L"Beep"
static

Definition at line 95 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_BORDER

const WCHAR* VAL_BORDER = L"BorderWidth"
static

Definition at line 89 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_CARETRATE

const WCHAR* VAL_CARETRATE = L"CursorBlinkRate"
static

Definition at line 76 of file sysparams.c.

Referenced by SpiUpdatePerUserSystemParameters().

◆ VAL_CARETWIDTH

const WCHAR* VAL_CARETWIDTH = L"CaretWidth"
static

Definition at line 77 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_CLICKLOCKTIME

const WCHAR* VAL_CLICKLOCKTIME = L"ClickLockTime"
static

Definition at line 74 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_DBLCLKHEIGHT

const WCHAR* VAL_DBLCLKHEIGHT = L"DoubleClickHeight"
static

Definition at line 52 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_DBLCLKTIME

const WCHAR* VAL_DBLCLKTIME = L"DoubleClickSpeed"
static

Definition at line 53 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_DBLCLKWIDTH

const WCHAR* VAL_DBLCLKWIDTH = L"DoubleClickWidth"
static

Definition at line 51 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_DRAG

const WCHAR* VAL_DRAG = L"DragFullWindows"
static

Definition at line 66 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_DRAGHEIGHT

const WCHAR* VAL_DRAGHEIGHT = L"DragHeight"
static

Definition at line 67 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_DRAGWIDTH

const WCHAR* VAL_DRAGWIDTH = L"DragWidth"
static

Definition at line 68 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_FONTSMOOTHING

const WCHAR* VAL_FONTSMOOTHING = L"FontSmoothing"
static

Definition at line 69 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_FONTSMOOTHINGCONTRAST

const WCHAR* VAL_FONTSMOOTHINGCONTRAST = L"FontSmoothingGamma"
static

Definition at line 71 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_FONTSMOOTHINGORIENTATION

const WCHAR* VAL_FONTSMOOTHINGORIENTATION = L"FontSmoothingOrientation"
static

Definition at line 72 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_FONTSMOOTHINGTYPE

const WCHAR* VAL_FONTSMOOTHINGTYPE = L"FontSmoothingType"
static

Definition at line 70 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_GRID

const WCHAR* VAL_GRID = L"GridGranularity"
static

Definition at line 65 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_HOVERHEIGHT

const WCHAR* VAL_HOVERHEIGHT = L"MouseHoverHeight"
static

Definition at line 58 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_HOVERTIME

const WCHAR* VAL_HOVERTIME = L"MouseHoverTime"
static

Definition at line 56 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_HOVERWIDTH

const WCHAR* VAL_HOVERWIDTH = L"MouseHoverWidth"
static

Definition at line 57 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_ICONSPC

const WCHAR* VAL_ICONSPC = L"IconSpacing"
static

Definition at line 90 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_ICONVSPC

const WCHAR* VAL_ICONVSPC = L"IconVerticalspacing"
static

Definition at line 91 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_ITWRAP

const WCHAR* VAL_ITWRAP = L"IconTitleWrap"
static

Definition at line 92 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_KBDDELAY

const WCHAR* VAL_KBDDELAY = L"KeyboardDelay"
static

Definition at line 99 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_KBDSPD

const WCHAR* VAL_KBDSPD = L"KeyboardSpeed"
static

Definition at line 98 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_MDALIGN

const WCHAR* VAL_MDALIGN = L"MenuDropAlignment"
static

Definition at line 86 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_MOUSE1

const WCHAR* VAL_MOUSE1 = L"MouseThreshold1"
static

Definition at line 47 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_MOUSE2

const WCHAR* VAL_MOUSE2 = L"MouseThreshold2"
static

Definition at line 48 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_MOUSE3

const WCHAR* VAL_MOUSE3 = L"MouseSpeed"
static

Definition at line 49 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_MOUSEKEYS_FLAGS

const WCHAR* VAL_MOUSEKEYS_FLAGS = L"Flags"
static

Definition at line 110 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_MOUSEKEYS_MAX

const WCHAR* VAL_MOUSEKEYS_MAX = L"MaximumSpeed"
static

Definition at line 111 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_MOUSEKEYS_TIMETOMAX

const WCHAR* VAL_MOUSEKEYS_TIMETOMAX = L"TimeToMaximumSpeed"
static

Definition at line 112 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_MOUSETRAILS

const WCHAR* VAL_MOUSETRAILS = L"MouseTrails"
static

Definition at line 50 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_ON

const WCHAR* VAL_ON = L"On"
static

Definition at line 107 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_PAINTDESKVER

const WCHAR* VAL_PAINTDESKVER = L"PaintDesktopVersion"
static

Definition at line 75 of file sysparams.c.

Referenced by NtUserUpdatePerUserSystemParameters().

◆ VAL_SCRACT

const WCHAR* VAL_SCRACT = L"ScreenSaveActive"
static

Definition at line 64 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_SCRLLLINES

const WCHAR* VAL_SCRLLLINES = L"WheelScrollLines"
static

Definition at line 73 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_SCRNSV

const WCHAR* VAL_SCRNSV = L"SCRNSAVE.EXE"
static

Definition at line 63 of file sysparams.c.

Referenced by SpiLoadTimeOut().

◆ VAL_SCRTO

const WCHAR* VAL_SCRTO = L"ScreenSaveTimeOut"
static

Definition at line 62 of file sysparams.c.

Referenced by SpiGetSet(), and SpiLoadTimeOut().

◆ VAL_SENSITIVITY

const WCHAR* VAL_SENSITIVITY = L"MouseSensitivity"
static

Definition at line 59 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_SNAP_DOCKMOVING

const WCHAR* VAL_SNAP_DOCKMOVING = L"DockMoving"
static

Definition at line 83 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_SNAP_ENABLED

const WCHAR* VAL_SNAP_ENABLED = L"WindowArrangementActive"
static

Definition at line 82 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_SNAPDEFBTN

const WCHAR* VAL_SNAPDEFBTN = L"SnapToDefaultButton"
static

Definition at line 54 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_SWAP

const WCHAR* VAL_SWAP = L"SwapMouseButtons"
static

Definition at line 55 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_USERPREFMASK

const WCHAR* VAL_USERPREFMASK = L"UserPreferencesMask"
static

Definition at line 81 of file sysparams.c.

Referenced by SpiLoadUserPrefMask(), and SpiSetUserPref().