ReactOS 0.4.15-dev-6694-g4ba8af9
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 BOOL IntIsWindowSnapEnabled (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 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_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"
 

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)
#define NULL
Definition: types.h:112
struct _PROCESSINFO * GetW32ProcessInfo(VOID)
Definition: misc.c:795
#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 364 of file sysparams.c.

365{
368 return TRUE;
369}
#define TRUE
Definition: types.h:120
static VOID SpiUpdatePerUserSystemParameters(VOID)
Definition: sysparams.c:232
BOOL gbSpiInitialized
Definition: sysparams.c:18

◆ IntIsWindowSnapEnabled()

static BOOL IntIsWindowSnapEnabled ( VOID  )
static

Definition at line 218 of file sysparams.c.

219{
220 WCHAR szValue[2];
221 if (RegReadUserSetting(L"Control Panel\\Desktop", L"WindowArrangementActive",
222 REG_SZ, szValue, sizeof(szValue)))
223 {
224 szValue[RTL_NUMBER_OF(szValue) - 1] = UNICODE_NULL; /* Avoid buffer overrun */
225 return (_wtoi(szValue) != 0);
226 }
227 return TRUE;
228}
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
#define REG_SZ
Definition: layer.c:22
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by SpiUpdatePerUserSystemParameters().

◆ NtUserSystemParametersInfo()

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

Definition at line 2167 of file sysparams.c.

2172{
2173 BOOL bResult;
2174
2175 TRACE("Enter NtUserSystemParametersInfo(%u)\n", uiAction);
2177
2178 // FIXME: Get rid of the flags and only use this from um. kernel can access data directly.
2179 /* Set UM memory protection flag */
2180 fWinIni |= SPIF_PROTECT;
2181
2182 /* Call internal function */
2183 bResult = UserSystemParametersInfo(uiAction, uiParam, pvParam, fWinIni);
2184
2185 TRACE("Leave NtUserSystemParametersInfo, returning %d\n", bResult);
2186 UserLeave();
2187
2188 return bResult;
2189}
unsigned int BOOL
Definition: ntddk_ex.h:94
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:251
VOID FASTCALL UserEnterExclusive(VOID)
Definition: ntuser.c:242
#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:2104

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

377{
378 BOOL bResult;
379
380 TRACE("Enter NtUserUpdatePerUserSystemParameters\n");
382
384 if(bEnable)
386 else
388 bResult = TRUE;
389
390 TRACE("Leave NtUserUpdatePerUserSystemParameters, returning %d\n", bResult);
391 UserLeave();
392
393 return bResult;
394}
#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:108
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 195 of file sysparams.c.

196{
197 /* Fixup values */
198 gspv.ncm.iCaptionWidth = max(gspv.ncm.iCaptionWidth, 8);
199 gspv.ncm.iBorderWidth = max(gspv.ncm.iBorderWidth, 1);
200 gspv.ncm.iScrollWidth = max(gspv.ncm.iScrollWidth, 8);
201 gspv.ncm.iScrollHeight = max(gspv.ncm.iScrollHeight, 8);
202// gspv.ncm.iMenuHeight = max(gspv.ncm.iMenuHeight, gspv.tmMenuFont.tmHeight);
203// gspv.ncm.iMenuHeight = max(gspv.ncm.iMenuHeight,
204// 2 + gspv.tmMenuFont.tmHeight +
205// gspv.tmMenuFont.tmExternalLeading);
206 if (gspv.iDblClickTime == 0) gspv.iDblClickTime = 500;
207
208 // FIXME: Hack!!!
211
214
215}
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:2387
LONG tmHeight
Definition: wingdi.h:2383
#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 491 of file sysparams.c.

492{
494 return SpiMemCopy(pvParam, pvData, cbSize, fl & SPIF_PROTECT);
495}
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
#define REQ_INTERACTIVE_WINSTA(err)
Definition: sysparams.c:28
static UINT_PTR SpiMemCopy(PVOID pvDst, PVOID pvSrc, ULONG cbSize, BOOL bProtect)
Definition: sysparams.c:459
_In_ FLONG fl
Definition: winddi.h:1279
_In_ ULONG _In_opt_ PVOID pvData
Definition: winddi.h:3749

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

◆ SpiGetEx()

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

Definition at line 507 of file sysparams.c.

508{
510 /* Get the cbSite member from UM memory */
511 if (!SpiSet(&cbBufSize, pvParam, sizeof(ULONG), fl))
512 return 0;
513 /* Verify the correct size */
514 if (cbBufSize != cbSize)
515 return 0;
516 return SpiGet(pvParam, pvData, cbSize, fl);
517}
uint32_t ULONG
Definition: typedefs.h:59
static UINT_PTR SpiSet(PVOID pvData, PVOID pvParam, ULONG cbSize, FLONG fl)
Definition: sysparams.c:499
static UINT_PTR SpiGet(PVOID pvParam, PVOID pvData, ULONG cbSize, FLONG fl)
Definition: sysparams.c:491
_In_ DWORD _In_ DWORD cbBufSize
Definition: winsvc.h:424

Referenced by SpiGetSet().

◆ SpiGetInt()

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

Definition at line 521 of file sysparams.c.

522{
523 return SpiGet(pvParam, piValue, sizeof(INT), fl);
524}
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 816 of file sysparams.c.

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

Referenced by UserSystemParametersInfo().

◆ SpiGetSetProbeBuffer()

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

Definition at line 1833 of file sysparams.c.

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

634{
635 INT iValue = gspv.dwUserPrefMask & dwMask ? 1 : 0;
636 return SpiGetInt(pvParam, &iValue, fl);
637}
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 108 of file sysparams.c.

109{
111 if (!RegReadUserSetting(pwszKey, pwszValue, REG_DWORD, &Result, sizeof(Result)))
112 {
113 return iValue;
114 }
115 return Result;
116}
unsigned long DWORD
Definition: ntddk_ex.h:95
#define REG_DWORD
Definition: sdbapi.c:596
_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 180 of file sysparams.c.

181{
182 BOOL bResult;
183
184 bResult = RegReadUserSetting(KEY_METRIC,
187 plfOut,
188 sizeof(LOGFONTW));
189 if (!bResult)
190 *plfOut = *plfDefault;
191}
#define REG_BINARY
Definition: nt_native.h:1496
_In_z_ PCWSTR pwszValueName
Definition: ntuser.h:47

Referenced by SpiUpdatePerUserSystemParameters().

◆ SpiLoadInt()

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

Definition at line 120 of file sysparams.c.

121{
122 WCHAR awcBuffer[12];
123 ULONG cbSize;
124
125 cbSize = sizeof(awcBuffer);
126 if (!RegReadUserSetting(pwszKey, pwszValue, REG_SZ, awcBuffer, cbSize))
127 {
128 return iValue;
129 }
130 return _wtoi(awcBuffer);
131}

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

◆ SpiLoadMetric()

static INT SpiLoadMetric ( PCWSTR  pwszValue,
INT  iValue 
)
static

Definition at line 168 of file sysparams.c.

169{
170 INT iRegVal;
171
172 iRegVal = SpiLoadInt(KEY_METRIC, pwszValue, METRIC2REG(iValue));
173 TRACE("Loaded metric setting '%S', iValue=%d(reg:%d), ret=%d(reg:%d)\n",
174 pwszValue, iValue, METRIC2REG(iValue), REG2METRIC(iRegVal), iRegVal);
175 return REG2METRIC(iRegVal);
176}
static INT SpiLoadInt(PCWSTR pwszKey, PCWSTR pwszValue, INT iValue)
Definition: sysparams.c:120
#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 161 of file sysparams.c.

162{
163 return SpiLoadInt(KEY_MOUSE, pwszValue, iValue);
164}

Referenced by SpiUpdatePerUserSystemParameters().

◆ SpiLoadTimeOut()

static DWORD SpiLoadTimeOut ( VOID  )
static

Definition at line 147 of file sysparams.c.

148{ // Must have the string!
149 WCHAR szApplicationName[MAX_PATH];
150 RtlZeroMemory(&szApplicationName, sizeof(szApplicationName));
151 if (!RegReadUserSetting(KEY_DESKTOP, VAL_SCRNSV, REG_SZ, &szApplicationName, sizeof(szApplicationName)))
152 {
153 return 0;
154 }
155 if (szApplicationName[0] == 0) return 0;
156 return SpiLoadInt(KEY_DESKTOP, VAL_SCRTO, 600);
157}
#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 135 of file sysparams.c.

136{
138 if (!RegReadUserSetting(KEY_DESKTOP, VAL_USERPREFMASK, REG_BINARY, &Result, sizeof(Result)))
139 {
140 return dValue;
141 }
142 return Result;
143}
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 459 of file sysparams.c.

460{
462
463 if (bProtect)
464 {
466 {
467 RtlCopyMemory(pvDst, pvSrc, cbSize);
468 }
470 {
472 }
473 _SEH2_END;
474 }
475 else
476 {
477 RtlCopyMemory(pvDst, pvSrc, cbSize);
478 }
479
480 if (!NT_SUCCESS(Status))
481 {
483 ERR("SpiMemCopy failed, pvDst=%p, pvSrc=%p, bProtect=%d\n", pvDst, pvSrc, bProtect);
484 }
485
486 return NT_SUCCESS(Status);
487}
LONG NTSTATUS
Definition: precomp.h:26
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
Status
Definition: gdiplustypes.h:25
#define _SEH2_GetExceptionCode()
Definition: pseh2_64.h:159
#define STATUS_SUCCESS
Definition: shellext.h:65
VOID FASTCALL SetLastNtError(NTSTATUS Status)
Definition: error.c:37

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

◆ SpiNotifyNCMetricsChanged()

static BOOL SpiNotifyNCMetricsChanged ( VOID  )
static

Definition at line 780 of file sysparams.c.

781{
782 PWND pwndDesktop, pwndCurrent;
783 HWND *ahwnd;
785 int i;
786
787 pwndDesktop = UserGetDesktopWindow();
788 ASSERT(pwndDesktop);
789
790 ahwnd = IntWinListChildren(pwndDesktop);
791 if(!ahwnd)
792 return FALSE;
793
794 for (i = 0; ahwnd[i]; i++)
795 {
796 pwndCurrent = UserGetWindowObject(ahwnd[i]);
797 if(!pwndCurrent)
798 continue;
799
800 UserRefObjectCo(pwndCurrent, &Ref);
801 co_WinPosSetWindowPos(pwndCurrent, 0, pwndCurrent->rcWindow.left,pwndCurrent->rcWindow.top,
802 pwndCurrent->rcWindow.right-pwndCurrent->rcWindow.left
803 ,pwndCurrent->rcWindow.bottom - pwndCurrent->rcWindow.top,
806 UserDerefObjectCo(pwndCurrent);
807 }
808
810
811 return TRUE;
812}
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:1786
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:40
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:27
Definition: object.h:4
Definition: ntuser.h:689
RECT rcWindow
Definition: ntuser.h:711
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
PWND FASTCALL UserGetWindowObject(HWND hWnd)
Definition: window.c:122
PWND FASTCALL UserGetDesktopWindow(VOID)
Definition: desktop.c:1386
#define USERTAG_WINDOWLIST
Definition: tags.h:298
HWND *FASTCALL IntWinListChildren(PWND Window)
Definition: window.c:274
#define SWP_NOACTIVATE
Definition: winuser.h:1232
#define SWP_NOREDRAW
Definition: winuser.h:1236
#define SWP_FRAMECHANGED
Definition: winuser.h:1230
#define SWP_NOMOVE
Definition: winuser.h:1234
#define SWP_NOCOPYBITS
Definition: winuser.h:1233
#define SWP_NOZORDER
Definition: winuser.h:1237

Referenced by SpiGetSet().

◆ SpiSet()

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

Definition at line 499 of file sysparams.c.

500{
502 return SpiMemCopy(pvData, pvParam, cbSize, fl & SPIF_PROTECT);
503}
#define ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION
Definition: winerror.h:940

Referenced by SpiGetEx(), and SpiGetSet().

◆ SpiSetBool()

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

Definition at line 541 of file sysparams.c.

542{
544 *pbData = iValue ? TRUE : FALSE;
546 {
547 SpiStoreSzInt(pwszKey, pwszValue, iValue);
548 }
549 return (UINT_PTR)pwszKey;
550}
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_updates_bytes_to_ pdwDataLen BYTE * pbData
Definition: wincrypt.h:4201

Referenced by SpiGetSet().

◆ SpiSetDWord()

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

Definition at line 554 of file sysparams.c.

555{
557 *(INT*)pvData = iValue;
559 {
560 SpiStoreDWord(pwszKey, pwszValue, iValue);
561 }
562 return (UINT_PTR)pwszKey;
563}
static VOID SpiStoreDWord(PCWSTR pwszKey, PCWSTR pwszValue, DWORD Value)
Definition: sysparams.c:401

Referenced by SpiGetSet().

◆ SpiSetInt()

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

Definition at line 567 of file sysparams.c.

568{
570 *(INT*)pvData = iValue;
572 {
573 SpiStoreSzInt(pwszKey, pwszValue, iValue);
574 }
575 return (UINT_PTR)pwszKey;
576}

Referenced by SpiGetSet().

◆ SpiSetMetric()

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

Definition at line 580 of file sysparams.c.

581{
583 *(INT*)pvData = iValue;
585 {
586 SpiStoreMetric(pwszValue, iValue);
587 }
588 return (UINT_PTR)KEY_METRIC;
589}

Referenced by SpiGetSet().

◆ SpiSetUserPref()

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

Definition at line 593 of file sysparams.c.

594{
595 DWORD dwRegMask;
596 BOOL bValue = PtrToUlong(pvValue);
597
599
600 /* Set or clear bit according to bValue */
601 gspv.dwUserPrefMask = bValue ? gspv.dwUserPrefMask | dwMask :
602 gspv.dwUserPrefMask & ~dwMask;
603
605 {
606 /* Read current value */
607 if (!RegReadUserSetting(KEY_DESKTOP,
610 &dwRegMask,
611 sizeof(DWORD)))
612 {
613 WARN("Failed to read UserPreferencesMask setting\n");
614 dwRegMask = 0;
615 }
616
617 /* Set or clear bit according to bValue */
618 dwRegMask = bValue ? (dwRegMask | dwMask) : (dwRegMask & ~dwMask);
619
620 /* write back value */
621 RegWriteUserSetting(KEY_DESKTOP,
624 &dwRegMask,
625 sizeof(DWORD));
626 }
627
628 return (UINT_PTR)KEY_DESKTOP;
629}
#define WARN(fmt,...)
Definition: debug.h:112

Referenced by SpiGetSet().

◆ SpiSetWallpaper()

static UINT_PTR SpiSetWallpaper ( PVOID  pvParam,
FLONG  fl 
)
static

Definition at line 641 of file sysparams.c.

642{
643 UNICODE_STRING ustr;
644 WCHAR awc[MAX_PATH];
645 BOOL bResult;
646 HBITMAP hbmp, hOldBitmap;
647 SURFACE *psurfBmp;
648 ULONG ulTile, ulStyle;
649
651
652 if (!pvParam)
653 {
654 /* FIXME: Reset Wallpaper to registry value */
655 return (UINT_PTR)KEY_DESKTOP;
656 }
657
658 /* Capture UNICODE_STRING */
659 bResult = SpiMemCopy(&ustr, pvParam, sizeof(ustr), fl & SPIF_PROTECT);
660 if (!bResult)
661 {
662 return 0;
663 }
664 if (ustr.Length > MAX_PATH * sizeof(WCHAR))
665 {
666 return 0;
667 }
668
669 /* Copy the string buffer name */
670 bResult = SpiMemCopy(gspv.awcWallpaper, ustr.Buffer, ustr.Length, fl & SPIF_PROTECT);
671 if (!bResult)
672 {
673 return 0;
674 }
675
676 /* Update the UNICODE_STRING */
680 gspv.awcWallpaper[ustr.Length / sizeof(WCHAR)] = 0;
681
682 TRACE("SpiSetWallpaper, name=%S\n", gspv.awcWallpaper);
683
684 /* Update registry */
686 {
688 }
689
690 /* Got a filename? */
691 if (gspv.awcWallpaper[0] != 0)
692 {
693 /* Convert file name to nt file name */
694 ustr.Buffer = awc;
695 ustr.MaximumLength = MAX_PATH * sizeof(WCHAR);
696 ustr.Length = 0;
698 {
699 ERR("RtlDosPathNameToNtPathName_U failed\n");
700 return 0;
701 }
702
703 /* Load the Bitmap */
704 hbmp = UserLoadImage(ustr.Buffer);
705 if (!hbmp)
706 {
707 ERR("UserLoadImage failed\n");
708 return 0;
709 }
710
711 /* Try to get the size of the wallpaper */
712 if (!(psurfBmp = SURFACE_ShareLockSurface(hbmp)))
713 {
715 return 0;
716 }
717
721
723
724 /* Change the bitmap's ownership */
726
727 /* Yes, Windows really loads the current setting from the registry. */
728 ulTile = SpiLoadInt(KEY_DESKTOP, L"TileWallpaper", 0);
729 ulStyle = SpiLoadInt(KEY_DESKTOP, L"WallpaperStyle", 0);
730 TRACE("SpiSetWallpaper: ulTile=%lu, ulStyle=%lu\n", ulTile, ulStyle);
731
732 /* Check the values we found in the registry */
733 if (ulTile && !ulStyle)
734 {
736 }
737 else if (!ulTile && ulStyle)
738 {
739 if (ulStyle == 2)
740 {
742 }
743 else if (ulStyle == 6)
744 {
746 }
747 else if (ulStyle == 10)
748 {
750 }
751 }
752 }
753 else
754 {
755 /* Remove wallpaper */
756 gspv.cxWallpaper = 0;
757 gspv.cyWallpaper = 0;
758 hbmp = 0;
759 }
760
761 /* Take care of the old wallpaper, if any */
762 hOldBitmap = gspv.hbmWallpaper;
763 if(hOldBitmap != NULL)
764 {
765 /* Delete the old wallpaper */
767 GreDeleteObject(hOldBitmap);
768 }
769
770 /* Set the new wallpaper */
772
774
775
776 return (UINT_PTR)KEY_DESKTOP;
777}
HBITMAP hbmp
BOOL NTAPI NtUserRedrawWindow(HWND hWnd, CONST RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags)
Definition: painting.c:2005
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:3693
#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:1255
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1158
HBITMAP NTAPI UserLoadImage(PCWSTR)
Definition: file.c:159
BOOL NTAPI W32kDosPathNameToNtPathName(PCWSTR, PUNICODE_STRING)
static VOID SpiStoreSz(PCWSTR pwszKey, PCWSTR pwszValue, PCWSTR pwsz)
Definition: sysparams.c:412
#define RDW_ERASE
Definition: winuser.h:1201
#define RDW_INVALIDATE
Definition: winuser.h:1204

Referenced by SpiGetSet().

◆ SpiSetYesNo()

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

Definition at line 528 of file sysparams.c.

529{
531 *pbData = bValue ? TRUE : FALSE;
533 {
534 SpiStoreSz(pwszKey, pwszValue, bValue ? L"Yes" : L"No");
535 }
536 return (UINT_PTR)pwszKey;
537}

Referenced by SpiGetSet().

◆ SpiStoreDWord()

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

Storing the settings

Definition at line 401 of file sysparams.c.

402{
403 RegWriteUserSetting(pwszKey,
404 pwszValue,
405 REG_DWORD,
406 &Value,
407 sizeof(Value));
408}
_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 444 of file sysparams.c.

445{
446 RegWriteUserSetting(KEY_METRIC,
447 pwszValue,
449 plogfont,
450 sizeof(LOGFONTW));
451}

Referenced by SpiGetSet().

◆ SpiStoreMetric()

static VOID SpiStoreMetric ( LPCWSTR  pwszValue,
INT  iValue 
)
static

Definition at line 437 of file sysparams.c.

438{
439 SpiStoreSzInt(KEY_METRIC, pwszValue, METRIC2REG(iValue));
440}

Referenced by SpiGetSet(), and SpiSetMetric().

◆ SpiStoreSz()

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

Definition at line 412 of file sysparams.c.

413{
414 RegWriteUserSetting(pwszKey,
415 pwszValue,
416 REG_SZ,
417 pwsz,
418 (wcslen(pwsz) + 1) * sizeof(WCHAR));
419}
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)

Referenced by SpiSetWallpaper(), and SpiSetYesNo().

◆ SpiStoreSzInt()

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

Definition at line 423 of file sysparams.c.

424{
425 WCHAR awcBuffer[15];
426
427 _itow(iValue, awcBuffer, 10);
428 RegWriteUserSetting(pwszKey,
429 pwszValue,
430 REG_SZ,
431 awcBuffer,
432 (wcslen(awcBuffer) + 1) * sizeof(WCHAR));
433}
_CRTIMP wchar_t *__cdecl _itow(_In_ int _Value, _Pre_notnull_ _Post_z_ wchar_t *_Dest, _In_ int _Radix)

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

◆ SpiUpdatePerUserSystemParameters()

static VOID SpiUpdatePerUserSystemParameters ( VOID  )
static

Definition at line 232 of file sysparams.c.

233{
234 static LOGFONTW lf1 = {-11, 0, 0, 0, FW_NORMAL, FALSE, FALSE,
236 VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif"};
237 static LOGFONTW lf2 = {-11, 0, 0, 0, FW_BOLD, FALSE, FALSE,
239 VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif"};
240
241 TRACE("Enter SpiUpdatePerUserSystemParameters\n");
242
243 /* Clear the structure */
244 RtlZeroMemory(&gspv, sizeof(gspv));
245
246 /* Load mouse settings */
260
261 /* Load keyboard settings */
264
265 /* Load NONCLIENTMETRICS */
266 gspv.ncm.cbSize = sizeof(NONCLIENTMETRICSW);
267 gspv.ncm.iBorderWidth = SpiLoadMetric(VAL_BORDER, 1);
268 gspv.ncm.iScrollWidth = SpiLoadMetric(L"ScrollWidth", 16);
269 gspv.ncm.iScrollHeight = SpiLoadMetric(L"ScrollHeight", 16);
270 gspv.ncm.iCaptionWidth = SpiLoadMetric(L"CaptionWidth", 19);
271 gspv.ncm.iCaptionHeight = SpiLoadMetric(L"CaptionHeight", 19);
272 gspv.ncm.iSmCaptionWidth = SpiLoadMetric(L"SmCaptionWidth", 12);
273 gspv.ncm.iSmCaptionHeight = SpiLoadMetric(L"SmCaptionHeight", 15);
274 gspv.ncm.iMenuWidth = SpiLoadMetric(L"MenuWidth", 18);
275 gspv.ncm.iMenuHeight = SpiLoadMetric(L"MenuHeight", 18);
276#if (WINVER >= 0x0600)
277 gspv.ncm.iPaddedBorderWidth = SpiLoadMetric(L"PaddedBorderWidth", 18);
278#endif
279 SpiLoadFont(&gspv.ncm.lfCaptionFont, L"CaptionFont", &lf2);
280 SpiLoadFont(&gspv.ncm.lfSmCaptionFont, L"SmCaptionFont", &lf1);
281 SpiLoadFont(&gspv.ncm.lfMenuFont, L"MenuFont", &lf1);
282 SpiLoadFont(&gspv.ncm.lfStatusFont, L"StatusFont", &lf1);
283 SpiLoadFont(&gspv.ncm.lfMessageFont, L"MessageFont", &lf1);
284
285 /* Load MINIMIZEDMETRICS */
286 gspv.mm.cbSize = sizeof(MINIMIZEDMETRICS);
287 gspv.mm.iWidth = SpiLoadMetric(L"MinWidth", 160);
288 gspv.mm.iHorzGap = SpiLoadMetric(L"MinHorzGap", 160);
289 gspv.mm.iVertGap = SpiLoadMetric(L"MinVertGap", 24);
290 gspv.mm.iArrange = SpiLoadInt(KEY_METRIC, L"MinArrange", ARW_HIDE);
291
292 /* Load ICONMETRICS */
293 gspv.im.cbSize = sizeof(ICONMETRICSW);
294 gspv.im.iHorzSpacing = SpiLoadMetric(VAL_ICONSPC, 64);
295 gspv.im.iVertSpacing = SpiLoadMetric(VAL_ICONVSPC, 64);
296 gspv.im.iTitleWrap = SpiLoadMetric(VAL_ITWRAP, 1);
297 SpiLoadFont(&gspv.im.lfFont, L"IconFont", &lf1);
298
299 /* Load desktop settings */
303 gpsi->dtCaretBlink = SpiLoadInt(KEY_DESKTOP, VAL_CARETRATE, 530);
312#if (_WIN32_WINNT >= 0x0600)
313 gspv.uiWheelScrollChars = SpiLoadInt(KEY_DESKTOP, VAL_SCRLLCHARS, 3);
314#endif
315
316 /* Some hardcoded values for now */
317
319 gspv.bBeep = TRUE;
323 gspv.dwMenuShowDelay = SpiLoadInt(KEY_DESKTOP, L"MenuShowDelay", 400);
325
329#if(WINVER >= 0x0600)
330 gspv.bScrSaverSecure = FALSE;
331#endif
332
334
338 gspv.mousekeys.cbSize = sizeof(MOUSEKEYS);
344
345 /* Make sure we don't use broken values */
347
348 /* Update SystemMetrics */
349 InitMetrics();
350
351 if (gbSpiInitialized && gpsi)
352 {
357 }
359
361}
PSERVERINFO gpsi
Definition: imm.c:18
#define SRVINFO_KBDPREF
Definition: ntuser.h:947
#define PUSIF_COMBOBOXANIMATION
Definition: ntuser.h:990
#define PUSIF_KEYBOARDCUES
Definition: ntuser.h:992
#define PUSIF_LISTBOXSMOOTHSCROLLING
Definition: ntuser.h:991
DWORD dwSRVIFlags
Definition: ntuser.h:1046
LONG tmAveCharWidth
Definition: wingdi.h:2388
#define SPITESTPREF(x)
Definition: sysparams.h:195
BOOL NTAPI InitMetrics(VOID)
Definition: metric.c:39
static DWORD SpiLoadUserPrefMask(DWORD dValue)
Definition: sysparams.c:135
BOOL g_bWindowSnapEnabled
Definition: sysparams.c:20
static VOID SpiFixupValues(VOID)
Definition: sysparams.c:195
static INT SpiLoadMouse(PCWSTR pwszValue, INT iValue)
Definition: sysparams.c:161
static INT SpiLoadMetric(PCWSTR pwszValue, INT iValue)
Definition: sysparams.c:168
static DWORD SpiLoadTimeOut(VOID)
Definition: sysparams.c:147
static BOOL IntIsWindowSnapEnabled(VOID)
Definition: sysparams.c:218
static const WCHAR * VAL_CARETRATE
Definition: sysparams.c:76
static VOID SpiLoadFont(PLOGFONTW plfOut, LPWSTR pwszValueName, PLOGFONTW plfDefault)
Definition: sysparams.c:180
#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:1070

Referenced by InitSysParams(), and NtUserUpdatePerUserSystemParameters().

◆ UserSystemParametersInfo()

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

Definition at line 2104 of file sysparams.c.

2109{
2110 ULONG_PTR ulResult;
2112
2113 ASSERT(ppi);
2114
2115 if (!gbSpiInitialized)
2116 {
2118 //ASSERT(FALSE);
2119 return FALSE;
2120 }
2121
2122 /* Get a pointer to the current Windowstation */
2123 if (!ppi->prpwinsta)
2124 {
2125 ERR("UserSystemParametersInfo called without active window station.\n");
2126 //ASSERT(FALSE);
2127 //return FALSE;
2128 }
2129
2130 if ((fWinIni & SPIF_PROTECT) && !SpiGetSetProbeBuffer(uiAction, uiParam, pvParam))
2131 {
2133 return FALSE;
2134 }
2135
2136 /* Do the actual operation */
2137 ulResult = SpiGetSet(uiAction, uiParam, pvParam, fWinIni);
2138
2139 /* Did we change something? */
2140 if (ulResult > 1)
2141 {
2143
2144 /* Update system metrics */
2145 InitMetrics();
2146
2147 /* Send notification to toplevel windows, if requested */
2148 if (fWinIni & SPIF_SENDCHANGE)
2149 {
2150 /* Send WM_SETTINGCHANGE to all toplevel windows */
2153 (WPARAM)uiAction,
2154 (LPARAM)ulResult,
2156 100,
2157 &ulResult);
2158 }
2159 ulResult = 1;
2160 }
2161
2162 return ulResult;
2163}
#define KeRosDumpStackFrames(Frames, Count)
Definition: gdidebug.h:11
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
Definition: process.c:1183
struct _WINSTATION_OBJECT * prpwinsta
Definition: win32.h:266
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:1653
static UINT_PTR SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl)
Definition: sysparams.c:816
static BOOL SpiGetSetProbeBuffer(UINT uiAction, UINT uiParam, PVOID pvParam)
Definition: sysparams.c:1833
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define ERROR_NOACCESS
Definition: winerror.h:578
#define HWND_BROADCAST
Definition: winuser.h:1194
#define SPIF_SENDCHANGE
Definition: winuser.h:1562
#define WM_SETTINGCHANGE
Definition: winuser.h:1619
#define SMTO_NORMAL
Definition: winuser.h:1215

Referenced by DefWndDoSizeMove(), IntDefWindowProc(), 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_KBD

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

Definition at line 95 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 100 of file sysparams.c.

Referenced by SpiGetSet().

◆ KEY_MDALIGN

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

Definition at line 83 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_SCRREAD

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

Definition at line 101 of file sysparams.c.

Referenced by SpiGetSet().

◆ KEY_SHOWSNDS

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

Definition at line 99 of file sysparams.c.

Referenced by SpiGetSet().

◆ KEY_SOUND

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

Definition at line 92 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_BEEP

const WCHAR* VAL_BEEP = L"Beep"
static

Definition at line 93 of file sysparams.c.

Referenced by SpiGetSet().

◆ VAL_BORDER

const WCHAR* VAL_BORDER = L"BorderWidth"
static

Definition at line 87 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 88 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_ICONVSPC

const WCHAR* VAL_ICONVSPC = L"IconVerticalspacing"
static

Definition at line 89 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_ITWRAP

const WCHAR* VAL_ITWRAP = L"IconTitleWrap"
static

Definition at line 90 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_KBDDELAY

const WCHAR* VAL_KBDDELAY = L"KeyboardDelay"
static

Definition at line 97 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_KBDSPD

const WCHAR* VAL_KBDSPD = L"KeyboardSpeed"
static

Definition at line 96 of file sysparams.c.

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().

◆ VAL_MDALIGN

const WCHAR* VAL_MDALIGN = L"MenuDropAlignment"
static

Definition at line 84 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_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 102 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_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().