ReactOS 0.4.16-dev-2354-g16de117
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)
 
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:801
#define OBJECT_HEADER_TO_NAME_INFO(h)
Definition: obtypes.h:114
#define OBJECT_TO_OBJECT_HEADER(o)
Definition: obtypes.h:111
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

◆ NtUserSystemParametersInfo()

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

Definition at line 2186 of file sysparams.c.

2191{
2192 BOOL bResult;
2193
2194 TRACE("Enter NtUserSystemParametersInfo(%u)\n", uiAction);
2196
2197 // FIXME: Get rid of the flags and only use this from um. kernel can access data directly.
2198 /* Set UM memory protection flag */
2199 fWinIni |= SPIF_PROTECT;
2200
2201 /* Call internal function */
2202 bResult = UserSystemParametersInfo(uiAction, uiParam, pvParam, fWinIni);
2203
2204 TRACE("Leave NtUserSystemParametersInfo, returning %d\n", bResult);
2205 UserLeave();
2206
2207 return bResult;
2208}
unsigned int BOOL
Definition: ntddk_ex.h:94
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:258
VOID FASTCALL UserEnterExclusive(VOID)
Definition: ntuser.c:249
#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:2123

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 823 of file sysparams.c.

824{
825 switch (uiAction)
826 {
827 case SPI_GETBEEP:
828 return SpiGetInt(pvParam, &gspv.bBeep, fl);
829
830 case SPI_SETBEEP:
831 return SpiSetYesNo(&gspv.bBeep, uiParam, KEY_SOUND, VAL_BEEP, fl);
832
833 case SPI_GETMOUSE:
834 return SpiGet(pvParam, &gspv.caiMouse, 3 * sizeof(INT), fl);
835
836 case SPI_SETMOUSE:
837 if (!SpiSet(&gspv.caiMouse, pvParam, 3 * sizeof(INT), fl))
838 return 0;
840 {
844 }
845 return (UINT_PTR)KEY_MOUSE;
846
847 case SPI_GETBORDER:
848 return SpiGetInt(pvParam, &gspv.ncm.iBorderWidth, fl);
849
850 case SPI_SETBORDER:
851 uiParam = max(uiParam, 1);
852 return SpiSetInt(&gspv.ncm.iBorderWidth, uiParam, KEY_METRIC, VAL_BORDER, fl);
853
855 return SpiGetInt(pvParam, &gspv.dwKbdSpeed, fl);
856
858 return SpiSetInt(&gspv.dwKbdSpeed, uiParam, KEY_KBD, VAL_KBDSPD, fl);
859
860 case SPI_LANGDRIVER:
861 ERR("SPI_LANGDRIVER is unimplemented\n");
862 break;
863
865 return SpiGetInt(pvParam, &gspv.iScrSaverTimeout, fl);
866
869
871 return SpiGetInt(pvParam, &gspv.bScrSaverActive, fl);
872
875
877 return SpiGetInt(pvParam, &gspv.uiGridGranularity, fl);
878
881
883 uiParam = min(uiParam, gspv.ustrWallpaper.Length + 1UL);
884 return SpiGet(pvParam, gspv.awcWallpaper, uiParam, fl);
885
887 return SpiSetWallpaper(pvParam, fl);
888
890 ERR("SPI_SETDESKPATTERN is unimplemented\n");
891 break;
892
894 return SpiGetInt(pvParam, &gspv.iKbdDelay, fl);
895
897 return SpiSetInt(&gspv.iKbdDelay, uiParam, KEY_KBD, VAL_KBDDELAY, fl);
898
900 if (pvParam)
901 {
902 return SpiGetInt(pvParam, &gspv.im.iHorzSpacing, fl);
903 }
904 uiParam = max(uiParam, 32);
905 return SpiSetMetric(&gspv.im.iHorzSpacing, uiParam, VAL_ICONSPC, fl);
906
908 if (pvParam)
909 {
910 return SpiGetInt(pvParam, &gspv.im.iVertSpacing, fl);
911 }
912 uiParam = max(uiParam, 32);
913 return SpiSetMetric(&gspv.im.iVertSpacing, uiParam, VAL_ICONVSPC, fl);
914
916 return SpiGetInt(pvParam, &gspv.im.iTitleWrap, fl);
917
919 return SpiSetInt(&gspv.im.iTitleWrap, uiParam, KEY_METRIC, VAL_ITWRAP, fl);
920
922 return SpiGetInt(pvParam, &gspv.bMenuDropAlign, fl);
923
926
929
932
934 return SpiGet(pvParam, &gspv.im.lfFont, sizeof(LOGFONTW), fl);
935
937 if (!SpiSet(&gspv.im.lfFont, pvParam, sizeof(LOGFONTW), fl))
938 return 0;
940 {
941 SpiStoreFont(L"IconFont", &gspv.im.lfFont);
942 }
943 return (UINT_PTR)KEY_METRIC;
944
947
949 return SpiSetInt(&gspv.bMouseBtnSwap, uiParam, KEY_MOUSE, VAL_SWAP, fl);
950
952 return SpiGetInt(pvParam, &gspv.bFastTaskSwitch, fl);
953
955 /* According to Winetest this one is unimplemented */
956 return 1;
957
958 case SPI_GETDRAGFULLWINDOWS:
959 return SpiGetInt(pvParam, &gspv.bDragFullWindows, fl);
960
961 case SPI_SETDRAGFULLWINDOWS:
963
964 case SPI_GETNONCLIENTMETRICS:
965 {
966 return SpiGet(pvParam, &gspv.ncm, sizeof(NONCLIENTMETRICSW), fl);
967 }
968
969 case SPI_SETNONCLIENTMETRICS:
970 {
971 LPNONCLIENTMETRICSW metrics = (LPNONCLIENTMETRICSW)pvParam;
972
973 /* Fixup user's structure size */
974 metrics->cbSize = sizeof(NONCLIENTMETRICSW);
975
976 if (!SpiSet(&gspv.ncm, metrics, sizeof(NONCLIENTMETRICSW), fl))
977 return 0;
978
980 {
981 SpiStoreMetric(VAL_BORDER, gspv.ncm.iBorderWidth);
982 SpiStoreMetric(L"ScrollWidth", gspv.ncm.iScrollWidth);
983 SpiStoreMetric(L"ScrollHeight", gspv.ncm.iScrollHeight);
984 SpiStoreMetric(L"CaptionWidth", gspv.ncm.iCaptionWidth);
985 SpiStoreMetric(L"CaptionHeight", gspv.ncm.iCaptionHeight);
986 SpiStoreMetric(L"SmCaptionWidth", gspv.ncm.iSmCaptionWidth);
987 SpiStoreMetric(L"SmCaptionHeight", gspv.ncm.iSmCaptionHeight);
988 SpiStoreMetric(L"MenuWidth", gspv.ncm.iMenuWidth);
989 SpiStoreMetric(L"MenuHeight", gspv.ncm.iMenuHeight);
990#if (WINVER >= 0x0600)
991 SpiStoreMetric(L"PaddedBorderWidth", gspv.ncm.iPaddedBorderWidth);
992#endif
993 SpiStoreFont(L"CaptionFont", &gspv.ncm.lfCaptionFont);
994 SpiStoreFont(L"SmCaptionFont", &gspv.ncm.lfSmCaptionFont);
995 SpiStoreFont(L"MenuFont", &gspv.ncm.lfMenuFont);
996 SpiStoreFont(L"StatusFont", &gspv.ncm.lfStatusFont);
997 SpiStoreFont(L"MessageFont", &gspv.ncm.lfMessageFont);
998 }
999
1001 return 0;
1002
1003 return (UINT_PTR)KEY_METRIC;
1004 }
1005
1006 case SPI_GETMINIMIZEDMETRICS:
1007 {
1008 return SpiGet(pvParam, &gspv.mm, sizeof(MINIMIZEDMETRICS), fl);
1009 }
1010
1011 case SPI_SETMINIMIZEDMETRICS:
1012 {
1014
1015 /* Fixup user's structure size */
1016 metrics->cbSize = sizeof(MINIMIZEDMETRICS);
1017
1018 if (!SpiSet(&gspv.mm, metrics, sizeof(MINIMIZEDMETRICS), fl))
1019 return 0;
1020
1021 gspv.mm.iWidth = max(0, gspv.mm.iWidth);
1024 gspv.mm.iArrange = gspv.mm.iArrange & 0xf;
1025
1026 if (fl & SPIF_UPDATEINIFILE)
1027 {
1028 SpiStoreMetric(L"MinWidth", gspv.mm.iWidth);
1029 SpiStoreMetric(L"MinHorzGap", gspv.mm.iHorzGap);
1030 SpiStoreMetric(L"MinVertGap", gspv.mm.iVertGap);
1031 SpiStoreMetric(L"MinArrange", gspv.mm.iArrange);
1032 }
1033
1034 return (UINT_PTR)KEY_METRIC;
1035 }
1036
1037 case SPI_GETICONMETRICS:
1038 {
1039 return SpiGet(pvParam, &gspv.im, sizeof(ICONMETRICSW), fl);
1040 }
1041
1042 case SPI_SETICONMETRICS:
1043 {
1044 LPICONMETRICSW metrics = (LPICONMETRICSW)pvParam;
1045
1046 /* Fixup user's structure size */
1047 metrics->cbSize = sizeof(ICONMETRICSW);
1048
1049 if (!SpiSet(&gspv.im, metrics, sizeof(ICONMETRICSW), fl))
1050 return 0;
1051
1052 if (fl & SPIF_UPDATEINIFILE)
1053 {
1054 SpiStoreMetric(VAL_ICONSPC, gspv.im.iHorzSpacing);
1055 SpiStoreMetric(VAL_ICONVSPC, gspv.im.iVertSpacing);
1056 SpiStoreMetric(VAL_ITWRAP, gspv.im.iTitleWrap);
1057 SpiStoreFont(L"IconFont", &gspv.im.lfFont);
1058 }
1059 return (UINT_PTR)KEY_METRIC;
1060 }
1061
1062 case SPI_GETWORKAREA:
1063 {
1064 PMONITOR pmonitor = UserGetPrimaryMonitor();
1065
1066 if(!pmonitor)
1067 return 0;
1068
1069 return SpiGet(pvParam, &pmonitor->rcWork, sizeof(RECTL), fl);
1070 }
1071
1072 case SPI_SETWORKAREA:
1073 {
1074 PMONITOR pmonitor;
1075 RECTL rcWorkArea, rcIntersect;
1076
1077 if (!pvParam)
1078 return 0;
1079
1080 RtlCopyMemory(&rcWorkArea, pvParam, sizeof(rcWorkArea));
1081
1082 /* fail if empty */
1083 if (RECTL_bIsEmptyRect(&rcWorkArea))
1084 return 0;
1085
1086 /* get the nearest monitor */
1087 pmonitor = UserMonitorFromRect(&rcWorkArea, MONITOR_DEFAULTTONEAREST);
1088 if (!pmonitor)
1089 return 0;
1090
1091 /* fail unless work area is completely in monitor */
1092 if (!RECTL_bIntersectRect(&rcIntersect, &pmonitor->rcMonitor, &rcWorkArea) ||
1093 !RtlEqualMemory(&rcIntersect, &rcWorkArea, sizeof(rcIntersect)))
1094 {
1095 return 0;
1096 }
1097
1098 if (!SpiSet(&pmonitor->rcWork, pvParam, sizeof(RECTL), fl))
1099 return 0;
1100
1101 if (fl & SPIF_UPDATEINIFILE)
1102 {
1103 // FIXME: What to do?
1104 }
1105 return (UINT_PTR)KEY_DESKTOP;
1106 }
1107
1108 case SPI_SETPENWINDOWS:
1109 ERR("SPI_SETPENWINDOWS is unimplemented\n");
1110 break;
1111
1112 case SPI_GETFILTERKEYS:
1113 {
1114 LPFILTERKEYS FilterKeys = (LPFILTERKEYS)pvParam;
1115
1116 if (uiParam != 0 && uiParam != sizeof(FILTERKEYS))
1117 return 0;
1118
1119 if (!FilterKeys || FilterKeys->cbSize != sizeof(FILTERKEYS))
1120 return 0;
1121
1122 return SpiGet(pvParam, &gspv.filterkeys, sizeof(FILTERKEYS), fl);
1123 }
1124
1125 case SPI_SETFILTERKEYS:
1126 {
1127 LPFILTERKEYS FilterKeys = (LPFILTERKEYS)pvParam;
1128
1129 if (uiParam != 0 && uiParam != sizeof(FILTERKEYS))
1130 return 0;
1131
1132 if (!FilterKeys || FilterKeys->cbSize != sizeof(FILTERKEYS))
1133 return 0;
1134
1135 if (!SpiSet(&gspv.filterkeys, pvParam, sizeof(FILTERKEYS), fl))
1136 return 0;
1137
1138 if (fl & SPIF_UPDATEINIFILE)
1139 {
1140 // FIXME: What to do?
1141 }
1142 return (UINT_PTR)KEY_DESKTOP;
1143 }
1144
1145 case SPI_GETTOGGLEKEYS:
1146 {
1147 LPTOGGLEKEYS ToggleKeys = (LPTOGGLEKEYS)pvParam;
1148
1149 if (uiParam != 0 && uiParam != sizeof(TOGGLEKEYS))
1150 return 0;
1151
1152 if (!ToggleKeys || ToggleKeys->cbSize != sizeof(TOGGLEKEYS))
1153 return 0;
1154
1155 return SpiGet(pvParam, &gspv.togglekeys, sizeof(TOGGLEKEYS), fl);
1156 }
1157
1158 case SPI_SETTOGGLEKEYS:
1159 {
1160 LPTOGGLEKEYS ToggleKeys = (LPTOGGLEKEYS)pvParam;
1161
1162 if (uiParam != 0 && uiParam != sizeof(TOGGLEKEYS))
1163 return 0;
1164
1165 if (!ToggleKeys || ToggleKeys->cbSize != sizeof(TOGGLEKEYS))
1166 return 0;
1167
1168 if (!SpiSet(&gspv.togglekeys, pvParam, sizeof(TOGGLEKEYS), fl))
1169 return 0;
1170
1171 if (fl & SPIF_UPDATEINIFILE)
1172 {
1173 // FIXME: What to do?
1174 }
1175 return (UINT_PTR)KEY_DESKTOP;
1176 }
1177
1178 case SPI_GETMOUSEKEYS:
1179 {
1180 LPMOUSEKEYS MouseKeys = (LPMOUSEKEYS)pvParam;
1181
1182 if (uiParam != 0 && uiParam != sizeof(MOUSEKEYS))
1183 return 0;
1184
1185 if (!MouseKeys || MouseKeys->cbSize != sizeof(MOUSEKEYS))
1186 return 0;
1187
1188 return SpiGet(pvParam, &gspv.mousekeys, sizeof(MOUSEKEYS), fl);
1189 }
1190
1191 case SPI_SETMOUSEKEYS:
1192 {
1193 LPMOUSEKEYS MouseKeys = (LPMOUSEKEYS)pvParam;
1194
1195 if (uiParam != 0 && uiParam != sizeof(MOUSEKEYS))
1196 return 0;
1197
1198 if (!MouseKeys || MouseKeys->cbSize != sizeof(MOUSEKEYS))
1199 return 0;
1200
1201 if (!SpiSet(&gspv.mousekeys, pvParam, sizeof(MOUSEKEYS), fl))
1202 return 0;
1203
1204 if (fl & SPIF_UPDATEINIFILE)
1205 {
1209 }
1210 return (UINT_PTR)KEY_DESKTOP;
1211 }
1212
1213 case SPI_GETSHOWSOUNDS:
1214 return SpiGetInt(pvParam, &gspv.bShowSounds, fl);
1215
1216 case SPI_SETSHOWSOUNDS:
1217 return SpiSetBool(&gspv.bShowSounds, uiParam, KEY_SHOWSNDS, VAL_ON, fl);
1218
1219 case SPI_GETSTICKYKEYS:
1220 {
1221 LPSTICKYKEYS StickyKeys = (LPSTICKYKEYS)pvParam;
1222
1223 if (uiParam != 0 && uiParam != sizeof(STICKYKEYS))
1224 return 0;
1225
1226 if (!StickyKeys || StickyKeys->cbSize != sizeof(STICKYKEYS))
1227 return 0;
1228
1229 return SpiGetEx(pvParam, &gspv.stickykeys, sizeof(STICKYKEYS), fl);
1230 }
1231
1232 case SPI_SETSTICKYKEYS:
1233 {
1234 LPSTICKYKEYS StickyKeys = (LPSTICKYKEYS)pvParam;
1235
1236 if (uiParam != 0 && uiParam != sizeof(STICKYKEYS))
1237 return 0;
1238
1239 if (!StickyKeys || StickyKeys->cbSize != sizeof(STICKYKEYS))
1240 return 0;
1241
1242 if (!SpiSet(&gspv.stickykeys, pvParam, sizeof(STICKYKEYS), fl))
1243 return 0;
1244
1245 if (fl & SPIF_UPDATEINIFILE)
1246 {
1247 // FIXME: What to do?
1248 }
1249 return (UINT_PTR)KEY_DESKTOP;
1250 }
1251
1253 {
1254 LPACCESSTIMEOUT AccessTimeout = (LPACCESSTIMEOUT)pvParam;
1255
1256 if (uiParam != 0 && uiParam != sizeof(ACCESSTIMEOUT))
1257 return 0;
1258
1259 if (!AccessTimeout || AccessTimeout->cbSize != sizeof(ACCESSTIMEOUT))
1260 return 0;
1261
1262 return SpiGetEx(pvParam, &gspv.accesstimeout, sizeof(ACCESSTIMEOUT), fl);
1263 }
1264
1266 {
1267 LPACCESSTIMEOUT AccessTimeout = (LPACCESSTIMEOUT)pvParam;
1268
1269 if (uiParam != 0 && uiParam != sizeof(ACCESSTIMEOUT))
1270 {
1271 return 0;
1272 }
1273
1274 if (!AccessTimeout || AccessTimeout->cbSize != sizeof(ACCESSTIMEOUT))
1275 {
1276 return 0;
1277 }
1278
1279 if (!SpiSet(&gspv.accesstimeout, pvParam, sizeof(ACCESSTIMEOUT), fl))
1280 return 0;
1281
1282 if (fl & SPIF_UPDATEINIFILE)
1283 {
1284 // FIXME: What to do?
1285 }
1286 return (UINT_PTR)KEY_DESKTOP;
1287 }
1288
1289 case SPI_GETSERIALKEYS:
1290 {
1291 LPSERIALKEYS SerialKeys = (LPSERIALKEYS)pvParam;
1292
1293 if (uiParam != 0 && uiParam != sizeof(SERIALKEYS))
1294 return 0;
1295
1296 if (!SerialKeys || SerialKeys->cbSize != sizeof(SERIALKEYS))
1297 return 0;
1298
1299 return SpiGet(pvParam, &gspv.serialkeys, sizeof(SERIALKEYS), fl);
1300 }
1301
1302 case SPI_SETSERIALKEYS:
1303 {
1304 LPSERIALKEYS SerialKeys = (LPSERIALKEYS)pvParam;
1305
1306 if (uiParam != 0 && uiParam != sizeof(SERIALKEYS))
1307 return 0;
1308
1309 if (!SerialKeys || SerialKeys->cbSize != sizeof(SERIALKEYS))
1310 return 0;
1311
1312 if (!SpiSet(&gspv.serialkeys, pvParam, sizeof(SERIALKEYS), fl))
1313 return 0;
1314
1315 if (fl & SPIF_UPDATEINIFILE)
1316 {
1317 // FIXME: What to do?
1318 }
1319 return (UINT_PTR)KEY_DESKTOP;
1320 }
1321
1322 case SPI_GETSOUNDSENTRY:
1323 {
1324 LPSOUNDSENTRYW SoundsEntry = (LPSOUNDSENTRYW)pvParam;
1325
1326 if (uiParam != 0 && uiParam != sizeof(SOUNDSENTRYW))
1327 return 0;
1328
1329 if (!SoundsEntry || SoundsEntry->cbSize != sizeof(SOUNDSENTRYW))
1330 return 0;
1331
1332 return SpiGet(pvParam, &gspv.soundsentry, sizeof(SOUNDSENTRYW), fl);
1333 }
1334
1335 case SPI_SETSOUNDSENTRY:
1336 {
1337 LPSOUNDSENTRYW SoundsEntry = (LPSOUNDSENTRYW)pvParam;
1338
1339 if (uiParam != 0 && uiParam != sizeof(SOUNDSENTRYW))
1340 return 0;
1341
1342 if (!SoundsEntry || SoundsEntry->cbSize != sizeof(SOUNDSENTRYW))
1343 return 0;
1344
1345 if (!SpiSet(&gspv.soundsentry, pvParam, sizeof(SOUNDSENTRYW), fl))
1346 return 0;
1347
1348 if (fl & SPIF_UPDATEINIFILE)
1349 {
1350 // FIXME: What to do?
1351 }
1352 return (UINT_PTR)KEY_DESKTOP;
1353 }
1354
1355 case SPI_GETHIGHCONTRAST:
1356 {
1357 LPHIGHCONTRASTW highcontrast = (LPHIGHCONTRASTW)pvParam;
1358
1359 if (uiParam != 0 && uiParam != sizeof(HIGHCONTRASTW))
1360 return 0;
1361
1362 if (!highcontrast || highcontrast->cbSize != sizeof(HIGHCONTRASTW))
1363 return 0;
1364
1365 return SpiGet(pvParam, &gspv.highcontrast, sizeof(HIGHCONTRASTW), fl);
1366 }
1367
1368 case SPI_SETHIGHCONTRAST:
1369 {
1370 LPHIGHCONTRASTW highcontrast = (LPHIGHCONTRASTW)pvParam;
1371
1372 if (uiParam != 0 && uiParam != sizeof(HIGHCONTRASTW))
1373 return 0;
1374
1375 if (!highcontrast || highcontrast->cbSize != sizeof(HIGHCONTRASTW))
1376 return 0;
1377
1378 if (!SpiSet(&gspv.highcontrast, pvParam, sizeof(HIGHCONTRASTW), fl))
1379 return 0;
1380
1381 if (fl & SPIF_UPDATEINIFILE)
1382 {
1383 // FIXME: What to do?
1384 }
1385 return (UINT_PTR)KEY_DESKTOP;
1386 }
1387
1388 case SPI_GETKEYBOARDPREF:
1389 return SpiGetInt(pvParam, &gspv.bKbdPref, fl);
1390
1391 case SPI_SETKEYBOARDPREF:
1392 return SpiSetBool(&gspv.bKbdPref, uiParam, KEY_KDBPREF, VAL_ON, fl);
1393
1394 case SPI_GETSCREENREADER:
1395 return SpiGetInt(pvParam, &gspv.bScreenReader, fl);
1396
1397 case SPI_SETSCREENREADER:
1398 return SpiSetBool(&gspv.bScreenReader, uiParam, KEY_SCRREAD, VAL_ON, fl);
1399
1400 case SPI_GETANIMATION:
1401 return SpiGet(pvParam, &gspv.animationinfo, sizeof(ANIMATIONINFO), fl);
1402
1403 case SPI_SETANIMATION:
1404 if (!SpiSet(&gspv.animationinfo, pvParam, sizeof(ANIMATIONINFO), fl))
1405 return 0;
1406 if (fl & SPIF_UPDATEINIFILE)
1407 {
1408 // FIXME: What to do?
1409 }
1410 return (UINT_PTR)KEY_DESKTOP;
1411
1412 case SPI_GETFONTSMOOTHING:
1413 return SpiGetInt(pvParam, &gspv.bFontSmoothing, fl);
1414
1415 case SPI_SETFONTSMOOTHING:
1416 gspv.bFontSmoothing = !!uiParam;
1417 if (fl & SPIF_UPDATEINIFILE)
1418 {
1420 }
1421 return (UINT_PTR)KEY_DESKTOP;
1422
1423 case SPI_SETDRAGWIDTH:
1424 return SpiSetInt(&gspv.iDragWidth, uiParam, KEY_DESKTOP, VAL_DRAGWIDTH, fl);
1425
1426 case SPI_SETDRAGHEIGHT:
1428
1429 case SPI_SETHANDHELD:
1430 return SpiSetBool(&gspv.bHandHeld, uiParam, KEY_DESKTOP, L"HandHeld", fl);
1431
1432 case SPI_GETLOWPOWERTIMEOUT:
1433 return SpiGetInt(pvParam, &gspv.iLowPwrTimeout, fl);
1434
1435 case SPI_GETPOWEROFFTIMEOUT:
1436 return SpiGetInt(pvParam, &gspv.iPwrOffTimeout, fl);
1437
1438 case SPI_SETLOWPOWERTIMEOUT:
1439 return SpiSetInt(&gspv.iLowPwrTimeout, uiParam, KEY_DESKTOP, L"LowPowerTimeOut", fl);
1440
1441 case SPI_SETPOWEROFFTIMEOUT:
1442 return SpiSetInt(&gspv.iPwrOffTimeout, uiParam, KEY_DESKTOP, L"PowerOffTimeOut", fl);
1443
1444 case SPI_GETLOWPOWERACTIVE:
1445 return SpiGetInt(pvParam, &gspv.iPwrOffTimeout, fl);
1446
1447 case SPI_GETPOWEROFFACTIVE:
1448 return SpiGetInt(pvParam, &gspv.bPwrOffActive, fl);
1449
1450 case SPI_SETLOWPOWERACTIVE:
1451 return SpiSetBool(&gspv.bLowPwrActive, uiParam, KEY_DESKTOP, L"LowPowerActive", fl);
1452
1453 case SPI_SETPOWEROFFACTIVE:
1454 return SpiSetBool(&gspv.bPwrOffActive, uiParam, KEY_DESKTOP, L"PowerOffActive", fl);
1455
1456 case SPI_SETCURSORS:
1457 ERR("SPI_SETCURSORS is unimplemented\n");
1458 break;
1459
1460 case SPI_SETICONS:
1461 ERR("SPI_SETICONS is unimplemented\n");
1462 break;
1463
1464 case SPI_GETDEFAULTINPUTLANG:
1465 if (!gspklBaseLayout)
1466 return FALSE;
1467
1468 return SpiGet(pvParam, &gspklBaseLayout->hkl, sizeof(HKL), fl);
1469
1470 case SPI_SETDEFAULTINPUTLANG:
1471 {
1472 HKL hkl;
1473
1474 /* Note: SPIF_UPDATEINIFILE is not supported */
1475 if ((fl & SPIF_UPDATEINIFILE) || !SpiSet(&hkl, pvParam, sizeof(hkl), fl))
1476 return FALSE;
1477
1479 }
1480
1481 case SPI_SETLANGTOGGLE:
1482 gdwLayoutToggleKey = UserGetLanguageToggle(L"Layout Hotkey", 2);
1483 gdwLanguageToggleKey = UserGetLanguageToggle(L"Language Hotkey", 1);
1484 return gdwLanguageToggleKey;
1485
1486 case SPI_GETWINDOWSEXTENSION:
1487 ERR("SPI_GETWINDOWSEXTENSION is unimplemented\n");
1488 break;
1489
1490 case SPI_GETMOUSETRAILS:
1491 return SpiGetInt(pvParam, &gspv.iMouseTrails, fl);
1492
1493 case SPI_SETMOUSETRAILS:
1495
1496 case SPI_GETSNAPTODEFBUTTON:
1497 return SpiGetInt(pvParam, &gspv.bSnapToDefBtn, fl);
1498
1499 case SPI_SETSNAPTODEFBUTTON:
1501
1502 case SPI_GETMOUSEHOVERWIDTH:
1503 return SpiGetInt(pvParam, &gspv.iMouseHoverWidth, fl);
1504
1505 case SPI_SETMOUSEHOVERWIDTH:
1507
1508 case SPI_GETMOUSEHOVERHEIGHT:
1509 return SpiGetInt(pvParam, &gspv.iMouseHoverHeight, fl);
1510
1511 case SPI_SETMOUSEHOVERHEIGHT:
1513
1514 case SPI_GETMOUSEHOVERTIME:
1515 return SpiGetInt(pvParam, &gspv.iMouseHoverTime, fl);
1516
1517 case SPI_SETMOUSEHOVERTIME:
1518 /* See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoa
1519 * copy text from it, if some agument why xp and 2003 behovir diffent
1520 * only if they do not have SP install
1521 * " Windows Server 2003 and Windows XP: The operating system does not
1522 * enforce the use of USER_TIMER_MAXIMUM and USER_TIMER_MINIMUM until
1523 * Windows Server 2003 SP1 and Windows XP SP2 "
1524 */
1526
1527 case SPI_GETWHEELSCROLLLINES:
1528 return SpiGetInt(pvParam, &gspv.iWheelScrollLines, fl);
1529
1532
1533 case SPI_GETMENUSHOWDELAY:
1534 return SpiGetInt(pvParam, &gspv.dwMenuShowDelay, fl);
1535
1536 case SPI_SETMENUSHOWDELAY:
1537 return SpiSetInt(&gspv.dwMenuShowDelay, uiParam, KEY_DESKTOP, L"MenuShowDelay", fl);
1538
1539#if (_WIN32_WINNT >= 0x0600)
1541 return SpiGetInt(pvParam, &gspv.uiWheelScrollChars, fl);
1542
1543 case SPI_SETWHEELSCROLLCHARS:
1544 return SpiSetInt(&gspv.uiWheelScrollChars, uiParam, KEY_DESKTOP, VAL_SCRLLCHARS, fl);
1545#endif
1546 case SPI_GETSHOWIMEUI:
1547 return SpiGetInt(pvParam, &gspv.bShowImeUi, fl);
1548
1549 case SPI_SETSHOWIMEUI:
1550 return SpiSetBool(&gspv.bShowImeUi, uiParam, KEY_DESKTOP, L"", fl);
1551
1552 case SPI_GETMOUSESPEED:
1553 return SpiGetInt(pvParam, &gspv.iMouseSpeed, fl);
1554
1555 case SPI_SETMOUSESPEED:
1556 {
1557 /* Allowed range is [1:20] */
1558 if ((INT_PTR)pvParam < 1 || (INT_PTR)pvParam > 20)
1559 return 0;
1560 else
1562 }
1563
1564 case SPI_GETSCREENSAVERRUNNING:
1565 return SpiGetInt(pvParam, &gspv.bScrSaverRunning, fl);
1566
1567 case SPI_SETSCREENSAVERRUNNING:
1568 // FIXME: also return value?
1569 return SpiSetBool(&gspv.bScrSaverRunning, uiParam, KEY_MOUSE, L"", fl);
1570
1571#if(WINVER >= 0x0600)
1572 case SPI_GETAUDIODESCRIPTION:
1573 return SpiGet(pvParam, &gspv.audiodescription, sizeof(AUDIODESCRIPTION), fl);
1574
1575 case SPI_SETAUDIODESCRIPTION:
1576 ERR("SPI_SETAUDIODESCRIPTION is unimplemented\n");
1577 break;
1578
1579 case SPI_GETSCREENSAVESECURE:
1580 return SpiGetInt(pvParam, &gspv.bScrSaverSecure, fl);
1581
1582 case SPI_SETSCREENSAVESECURE:
1583 return SpiSetBool(&gspv.bScrSaverSecure, uiParam, KEY_DESKTOP, L"ScreenSaverIsSecure", fl);
1584#endif
1585
1586 case SPI_GETACTIVEWINDOWTRACKING:
1587 return SpiGetUserPref(UPM_ACTIVEWINDOWTRACKING, pvParam, fl);
1588
1589 case SPI_SETACTIVEWINDOWTRACKING:
1590 return SpiSetUserPref(UPM_ACTIVEWINDOWTRACKING, pvParam, fl);
1591
1592 case SPI_GETMENUANIMATION:
1593 return SpiGetUserPref(UPM_MENUANIMATION, pvParam, fl);
1594
1595 case SPI_SETMENUANIMATION:
1596 return SpiSetUserPref(UPM_MENUANIMATION, pvParam, fl);
1597
1598 case SPI_GETCOMBOBOXANIMATION:
1599 return SpiGetUserPref(UPM_COMBOBOXANIMATION, pvParam, fl);
1600
1601 case SPI_SETCOMBOBOXANIMATION:
1602 return SpiSetUserPref(UPM_COMBOBOXANIMATION, pvParam, fl);
1603
1604 case SPI_GETLISTBOXSMOOTHSCROLLING:
1606
1607 case SPI_SETLISTBOXSMOOTHSCROLLING:
1609
1610 case SPI_GETGRADIENTCAPTIONS:
1611 {
1613 {
1614 INT iValue = 0;
1615 return SpiGetInt(pvParam, &iValue, fl);
1616 }
1617 else
1618 {
1619 return SpiGetUserPref(UPM_GRADIENTCAPTIONS, pvParam, fl);
1620 }
1621 }
1622
1623 case SPI_SETGRADIENTCAPTIONS:
1624 return SpiSetUserPref(UPM_GRADIENTCAPTIONS, pvParam, fl);
1625
1626 case SPI_GETKEYBOARDCUES:
1627 return SpiGetUserPref(UPM_KEYBOARDCUES, pvParam, fl);
1628
1629 case SPI_SETKEYBOARDCUES:
1630 return SpiSetUserPref(UPM_KEYBOARDCUES, pvParam, fl);
1631
1632 case SPI_GETACTIVEWNDTRKZORDER:
1633 return SpiGetUserPref(UPM_ACTIVEWNDTRKZORDER, pvParam, fl);
1634
1635 case SPI_SETACTIVEWNDTRKZORDER:
1636 return SpiSetUserPref(UPM_ACTIVEWNDTRKZORDER, pvParam, fl);
1637
1638 case SPI_GETHOTTRACKING:
1639 return SpiGetUserPref(UPM_HOTTRACKING, pvParam, fl);
1640
1641 case SPI_SETHOTTRACKING:
1642 return SpiSetUserPref(UPM_HOTTRACKING, pvParam, fl);
1643
1644 case SPI_GETMENUFADE:
1645 return SpiGetUserPref(UPM_MENUFADE, pvParam, fl);
1646
1647 case SPI_SETMENUFADE:
1648 return SpiSetUserPref(UPM_MENUFADE, pvParam, fl);
1649
1650 case SPI_GETSELECTIONFADE:
1651 return SpiGetUserPref(UPM_SELECTIONFADE, pvParam, fl);
1652
1653 case SPI_SETSELECTIONFADE:
1654 return SpiSetUserPref(UPM_SELECTIONFADE, pvParam, fl);
1655
1656 case SPI_GETTOOLTIPANIMATION:
1657 return SpiGetUserPref(UPM_TOOLTIPANIMATION, pvParam, fl);
1658
1659 case SPI_SETTOOLTIPANIMATION:
1660 return SpiSetUserPref(UPM_TOOLTIPANIMATION, pvParam, fl);
1661
1662 case SPI_GETTOOLTIPFADE:
1663 return SpiGetUserPref(UPM_TOOLTIPFADE, pvParam, fl);
1664
1665 case SPI_SETTOOLTIPFADE:
1666 return SpiSetUserPref(UPM_TOOLTIPFADE, pvParam, fl);
1667
1668 case SPI_GETCURSORSHADOW:
1669 return SpiGetUserPref(UPM_CURSORSHADOW, pvParam, fl);
1670
1671 case SPI_SETCURSORSHADOW:
1673 return SpiSetUserPref(UPM_CURSORSHADOW, pvParam, fl);
1674
1675 case SPI_GETUIEFFECTS:
1676 return SpiGetUserPref(UPM_UIEFFECTS, pvParam, fl);
1677
1678 case SPI_SETUIEFFECTS:
1679 return SpiSetUserPref(UPM_UIEFFECTS, pvParam, fl);
1680
1681 case SPI_GETMOUSESONAR:
1682 return SpiGetInt(pvParam, &gspv.bMouseSonar, fl);
1683
1684 case SPI_SETMOUSESONAR:
1685 return SpiSetBool(&gspv.bMouseSonar, uiParam, KEY_MOUSE, L"", fl);
1686
1687 case SPI_GETMOUSECLICKLOCK:
1688 return SpiGetUserPref(UPM_CLICKLOCK, pvParam, fl);
1689
1690 case SPI_SETMOUSECLICKLOCK:
1691 gspv.bMouseClickLock = PtrToUlong(pvParam);
1692 return SpiSetUserPref(UPM_CLICKLOCK, pvParam, fl);
1693
1694 case SPI_GETMOUSEVANISH:
1695 return SpiGetInt(pvParam, &gspv.bMouseVanish, fl);
1696
1697 case SPI_SETMOUSEVANISH:
1698 return SpiSetBool(&gspv.bMouseVanish, uiParam, KEY_MOUSE, L"", fl);
1699
1700 case SPI_GETFLATMENU:
1701 return SpiGetUserPref(UPM_FLATMENU, pvParam, fl);
1702
1703 case SPI_SETFLATMENU:
1704 return SpiSetUserPref(UPM_FLATMENU, pvParam, fl);
1705
1706 case SPI_GETDROPSHADOW:
1707 return SpiGetUserPref(UPM_DROPSHADOW, pvParam, fl);
1708
1709 case SPI_SETDROPSHADOW:
1710 return SpiSetUserPref(UPM_DROPSHADOW, pvParam, fl);
1711
1712 case SPI_GETBLOCKSENDINPUTRESETS:
1713 return SpiGetInt(pvParam, &gspv.bBlockSendInputResets, fl);
1714
1715 case SPI_SETBLOCKSENDINPUTRESETS:
1716 return SpiSetBool(&gspv.bBlockSendInputResets, uiParam, KEY_MOUSE, L"", fl);
1717
1718#if(_WIN32_WINNT >= 0x0600)
1719 case SPI_GETDISABLEOVERLAPPEDCONTENT:
1720 return SpiGetInt(pvParam, &gspv.bDisableOverlappedContent, fl);
1721
1722 case SPI_SETDISABLEOVERLAPPEDCONTENT:
1723 return SpiSetBool(&gspv.bDisableOverlappedContent, uiParam, KEY_MOUSE, L"", fl);
1724
1725 case SPI_GETCLIENTAREAANIMATION:
1726 return SpiGetInt(pvParam, &gspv.bClientAreaAnimation, fl);
1727
1728 case SPI_SETCLIENTAREAANIMATION:
1729 return SpiSetBool(&gspv.bClientAreaAnimation, uiParam, KEY_MOUSE, L"", fl);
1730
1731 case SPI_GETCLEARTYPE:
1732 return SpiGetInt(pvParam, &gspv.bClearType, fl);
1733
1734 case SPI_SETCLEARTYPE:
1735 return SpiSetBool(&gspv.bClearType, uiParam, KEY_MOUSE, L"", fl);
1736
1737 case SPI_GETSPEECHRECOGNITION:
1738 return SpiGetInt(pvParam, &gspv.bSpeechRecognition, fl);
1739
1740 case SPI_SETSPEECHRECOGNITION:
1741 return SpiSetBool(&gspv.bSpeechRecognition, uiParam, KEY_MOUSE, L"", fl);
1742#endif
1743
1744 case SPI_GETFOREGROUNDLOCKTIMEOUT:
1745 return SpiGetInt(pvParam, &gspv.dwForegroundLockTimeout, fl);
1746
1747 case SPI_SETFOREGROUNDLOCKTIMEOUT:
1748 return SpiSetInt(&gspv.dwForegroundLockTimeout, uiParam, KEY_MOUSE, L"", fl);
1749
1750 case SPI_GETACTIVEWNDTRKTIMEOUT:
1751 return SpiGetInt(pvParam, &gspv.dwActiveTrackingTimeout, fl);
1752
1753 case SPI_SETACTIVEWNDTRKTIMEOUT:
1754 return SpiSetInt(&gspv.dwActiveTrackingTimeout, uiParam, KEY_MOUSE, L"", fl);
1755
1756 case SPI_GETFOREGROUNDFLASHCOUNT:
1757 return SpiGetInt(pvParam, &gspv.dwForegroundFlashCount, fl);
1758
1759 case SPI_SETFOREGROUNDFLASHCOUNT:
1760 return SpiSetInt(&gspv.dwForegroundFlashCount, uiParam, KEY_MOUSE, L"", fl);
1761
1762 case SPI_GETCARETWIDTH:
1763 return SpiGetInt(pvParam, &gspv.dwCaretWidth, fl);
1764
1765 case SPI_SETCARETWIDTH:
1767
1768 case SPI_GETMOUSECLICKLOCKTIME:
1769 return SpiGetInt(pvParam, &gspv.dwMouseClickLockTime, fl);
1770
1771 case SPI_SETMOUSECLICKLOCKTIME:
1773
1774 case SPI_GETFONTSMOOTHINGTYPE:
1775 return SpiGetInt(pvParam, &gspv.uiFontSmoothingType, fl);
1776
1777 case SPI_SETFONTSMOOTHINGTYPE:
1779
1780 case SPI_GETFONTSMOOTHINGCONTRAST:
1781 return SpiGetInt(pvParam, &gspv.uiFontSmoothingContrast, fl);
1782
1783 case SPI_SETFONTSMOOTHINGCONTRAST:
1785
1786 case SPI_GETFOCUSBORDERWIDTH:
1787 return SpiGetInt(pvParam, &gspv.uiFocusBorderWidth, fl);
1788
1789 case SPI_SETFOCUSBORDERWIDTH:
1790 return SpiSetInt(&gspv.uiFocusBorderWidth, uiParam, KEY_MOUSE, L"", fl);
1791
1792 case SPI_GETFOCUSBORDERHEIGHT:
1793 return SpiGetInt(pvParam, &gspv.uiFocusBorderHeight, fl);
1794
1795 case SPI_SETFOCUSBORDERHEIGHT:
1796 return SpiSetInt(&gspv.uiFocusBorderHeight, uiParam, KEY_MOUSE, L"", fl);
1797
1798 case SPI_GETFONTSMOOTHINGORIENTATION:
1799 return SpiGetInt(pvParam, &gspv.uiFontSmoothingOrientation, fl);
1800
1801 case SPI_SETFONTSMOOTHINGORIENTATION:
1803
1804 case SPI_GETWINARRANGING:
1805 return SpiGetInt(pvParam, &g_bWindowSnapEnabled, fl);
1806 case SPI_SETWINARRANGING:
1808
1809 case SPI_GETDOCKMOVING:
1810 return SpiGetInt(pvParam, &gspv.bDockMoving, fl);
1811 case SPI_SETDOCKMOVING:
1813
1814 /* The following are undocumented, but valid SPI values */
1815 case 0x1010:
1816 case 0x1011:
1817 case 0x1028:
1818 case 0x1029:
1819 case 0x102A:
1820 case 0x102B:
1821 case 0x102C:
1822 case 0x102D:
1823 case 0x102E:
1824 case 0x102F:
1825 case 0x1030:
1826 case 0x1031:
1827 case 0x1032:
1828 case 0x1033:
1829 case 0x1034:
1830 case 0x1035:
1831 case 0x1036:
1832 case 0x1037:
1833 case 0x1038:
1834 case 0x1039:
1835 case 0x103A:
1836 case 0x103B:
1837 case 0x103C:
1838 case 0x103D:
1839 ERR("Undocumented SPI value %x is unimplemented\n", uiAction);
1840 break;
1841
1842 default:
1843 ERR("Invalid SPI value: %u\n", uiAction);
1845 return 0;
1846 }
1847
1848 return 0;
1849}
@ 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 SPI_GETDESKWALLPAPER
Definition: sysparams.c:34
#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:32
DWORD iMaxSpeed
Definition: winuser.h:3515
DWORD iTimeToMaxSpeed
Definition: winuser.h:3516
UINT cbSize
Definition: winuser.h:3513
DWORD dwFlags
Definition: winuser.h:3514
DWORD cbSize
Definition: winuser.h:3631
DWORD cbSize
Definition: winuser.h:3636
@ 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
HDC ScreenDeviceContext
Definition: desktop.c:53
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:84
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:787
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:648
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:22
#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:5835
#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 1852 of file sysparams.c.

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

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:2773
#define REG_SZ
Definition: layer.c:22
__wchar_t WCHAR
Definition: xmlstorage.h:180

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:25
#define _SEH2_GetExceptionCode()
Definition: pseh2_64.h:181
#define STATUS_SUCCESS
Definition: shellext.h:65
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
Definition: error.c:31

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

◆ SpiNotifyNCMetricsChanged()

static BOOL SpiNotifyNCMetricsChanged ( VOID  )
static

Definition at line 787 of file sysparams.c.

788{
789 PWND pwndDesktop, pwndCurrent;
790 HWND *ahwnd;
792 int i;
793
794 pwndDesktop = UserGetDesktopWindow();
795 ASSERT(pwndDesktop);
796
797 ahwnd = IntWinListChildren(pwndDesktop);
798 if(!ahwnd)
799 return FALSE;
800
801 for (i = 0; ahwnd[i]; i++)
802 {
803 pwndCurrent = UserGetWindowObject(ahwnd[i]);
804 if(!pwndCurrent)
805 continue;
806
807 UserRefObjectCo(pwndCurrent, &Ref);
808 co_WinPosSetWindowPos(pwndCurrent, 0, pwndCurrent->rcWindow.left,pwndCurrent->rcWindow.top,
809 pwndCurrent->rcWindow.right-pwndCurrent->rcWindow.left
810 ,pwndCurrent->rcWindow.bottom - pwndCurrent->rcWindow.top,
813 UserDerefObjectCo(pwndCurrent);
814 }
815
817
818 return TRUE;
819}
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:43
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:27
Definition: object.h:4
Definition: ntuser.h:694
RECT rcWindow
Definition: ntuser.h:716
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:124
PWND FASTCALL UserGetDesktopWindow(VOID)
Definition: desktop.c:1403
#define USERTAG_WINDOWLIST
Definition: tags.h:298
HWND *FASTCALL IntWinListChildren(PWND Window)
Definition: window.c:276
#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 648 of file sysparams.c.

649{
650 UNICODE_STRING ustr;
651 WCHAR awc[MAX_PATH];
652 BOOL bResult;
653 HBITMAP hbmp, hOldBitmap;
654 SURFACE *psurfBmp;
655 ULONG ulTile, ulStyle;
656
658
659 if (!pvParam)
660 {
661 /* FIXME: Reset Wallpaper to registry value */
662 return (UINT_PTR)KEY_DESKTOP;
663 }
664
665 /* Capture UNICODE_STRING */
666 bResult = SpiMemCopy(&ustr, pvParam, sizeof(ustr), fl & SPIF_PROTECT);
667 if (!bResult)
668 {
669 return 0;
670 }
671 if (ustr.Length > MAX_PATH * sizeof(WCHAR))
672 {
673 return 0;
674 }
675
676 /* Copy the string buffer name */
677 bResult = SpiMemCopy(gspv.awcWallpaper, ustr.Buffer, ustr.Length, fl & SPIF_PROTECT);
678 if (!bResult)
679 {
680 return 0;
681 }
682
683 /* Update the UNICODE_STRING */
687 gspv.awcWallpaper[ustr.Length / sizeof(WCHAR)] = 0;
688
689 TRACE("SpiSetWallpaper, name=%S\n", gspv.awcWallpaper);
690
691 /* Update registry */
693 {
695 }
696
697 /* Got a filename? */
698 if (gspv.awcWallpaper[0] != 0)
699 {
700 /* Convert file name to nt file name */
701 ustr.Buffer = awc;
702 ustr.MaximumLength = MAX_PATH * sizeof(WCHAR);
703 ustr.Length = 0;
705 {
706 ERR("RtlDosPathNameToNtPathName_U failed\n");
707 return 0;
708 }
709
710 /* Load the Bitmap */
711 hbmp = UserLoadImage(ustr.Buffer);
712 if (!hbmp)
713 {
714 ERR("UserLoadImage failed\n");
715 return 0;
716 }
717
718 /* Try to get the size of the wallpaper */
719 if (!(psurfBmp = SURFACE_ShareLockSurface(hbmp)))
720 {
722 return 0;
723 }
724
728
730
731 /* Change the bitmap's ownership */
733
734 /* Yes, Windows really loads the current setting from the registry. */
735 ulTile = SpiLoadInt(KEY_DESKTOP, L"TileWallpaper", 0);
736 ulStyle = SpiLoadInt(KEY_DESKTOP, L"WallpaperStyle", 0);
737 TRACE("SpiSetWallpaper: ulTile=%lu, ulStyle=%lu\n", ulTile, ulStyle);
738
739 /* Check the values we found in the registry */
740 if (ulTile && !ulStyle)
741 {
743 }
744 else if (!ulTile && ulStyle)
745 {
746 if (ulStyle == 2)
747 {
749 }
750 else if (ulStyle == 6)
751 {
753 }
754 else if (ulStyle == 10)
755 {
757 }
758 }
759 }
760 else
761 {
762 /* Remove wallpaper */
763 gspv.cxWallpaper = 0;
764 gspv.cyWallpaper = 0;
765 hbmp = 0;
766 }
767
768 /* Take care of the old wallpaper, if any */
769 hOldBitmap = gspv.hbmWallpaper;
770 if(hOldBitmap != NULL)
771 {
772 /* Delete the old wallpaper */
774 GreDeleteObject(hOldBitmap);
775 }
776
777 /* Set the new wallpaper */
779
781
782
783 return (UINT_PTR)KEY_DESKTOP;
784}
HBITMAP hbmp
BOOL NTAPI NtUserRedrawWindow(HWND hWnd, CONST RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags)
Definition: painting.c:2003
static HBITMAP
Definition: button.c:44
#define GDI_OBJ_HMGR_POWNED
Definition: ntgdihdl.h:117
#define GDI_OBJ_HMGR_PUBLIC
Definition: ntgdihdl.h:116
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
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:3700
#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:1268
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1165
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
#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:2983

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:2135

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:952
#define PUSIF_COMBOBOXANIMATION
Definition: ntuser.h:995
#define PUSIF_KEYBOARDCUES
Definition: ntuser.h:997
#define PUSIF_LISTBOXSMOOTHSCROLLING
Definition: ntuser.h:996
DWORD iCtrlSpeed
Definition: winuser.h:3517
DWORD dwSRVIFlags
Definition: ntuser.h:1051
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 2123 of file sysparams.c.

2128{
2129 ULONG_PTR ulResult;
2131
2132 ASSERT(ppi);
2133
2134 if (!gbSpiInitialized)
2135 {
2137 //ASSERT(FALSE);
2138 return FALSE;
2139 }
2140
2141 /* Get a pointer to the current Windowstation */
2142 if (!ppi->prpwinsta)
2143 {
2144 ERR("UserSystemParametersInfo called without active window station.\n");
2145 //ASSERT(FALSE);
2146 //return FALSE;
2147 }
2148
2149 if ((fWinIni & SPIF_PROTECT) && !SpiGetSetProbeBuffer(uiAction, uiParam, pvParam))
2150 {
2152 return FALSE;
2153 }
2154
2155 /* Do the actual operation */
2156 ulResult = SpiGetSet(uiAction, uiParam, pvParam, fWinIni);
2157
2158 /* Did we change something? */
2159 if (ulResult > 1)
2160 {
2162
2163 /* Update system metrics */
2164 InitMetrics();
2165
2166 /* Send notification to toplevel windows, if requested */
2167 if (fWinIni & SPIF_SENDCHANGE)
2168 {
2169 /* Send WM_SETTINGCHANGE to all toplevel windows */
2172 (WPARAM)uiAction,
2173 (LPARAM)ulResult,
2175 100,
2176 &ulResult);
2177 }
2178 ulResult = 1;
2179 }
2180
2181 return ulResult;
2182}
#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:1183
struct _WINSTATION_OBJECT * prpwinsta
Definition: win32.h:267
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:823
static BOOL SpiGetSetProbeBuffer(UINT uiAction, UINT uiParam, PVOID pvParam)
Definition: sysparams.c:1852
#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().