Skip to content

Commit 9434ff0

Browse files
author
Dmitry Chapyshev
committed
[WIN32K]
- Add missed checks of size - Initialize cbSize field of structures * Fixes 6 tests for win32knt_apitest:NtUserSystemParametersInfo svn path=/trunk/; revision=72626
1 parent 895906f commit 9434ff0

File tree

1 file changed

+157
-3
lines changed

1 file changed

+157
-3
lines changed

reactos/win32ss/user/ntuser/sysparams.c

Lines changed: 157 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,14 @@ SpiUpdatePerUserSystemParameters(VOID)
304304
gspv.bScrSaverSecure = FALSE;
305305
#endif
306306

307+
gspv.accesstimeout.cbSize = sizeof(ACCESSTIMEOUT);
308+
gspv.filterkeys.cbSize = sizeof(FILTERKEYS);
309+
gspv.togglekeys.cbSize = sizeof(TOGGLEKEYS);
310+
gspv.mousekeys.cbSize = sizeof(MOUSEKEYS);
311+
gspv.stickykeys.cbSize = sizeof(STICKYKEYS);
312+
gspv.serialkeys.cbSize = sizeof(SERIALKEYS);
313+
gspv.soundsentry.cbSize = sizeof(SOUNDSENTRY);
314+
307315
/* Make sure we don't use broken values */
308316
SpiFixupValues();
309317

@@ -438,7 +446,7 @@ SpiMemCopy(PVOID pvDst, PVOID pvSrc, ULONG cbSize, BOOL bProtect, BOOL bToUser)
438446
{
439447
Status = _SEH2_GetExceptionCode();
440448
}
441-
_SEH2_END
449+
_SEH2_END;
442450
}
443451
else
444452
{
@@ -880,7 +888,7 @@ SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl)
880888
if (fl & SPIF_UPDATEINIFILE)
881889
{
882890
SpiStoreFont(L"IconFont", &gspv.im.lfFont);
883-
}
891+
}
884892
return (UINT_PTR)KEY_METRIC;
885893

886894
case SPI_SETDOUBLECLICKTIME:
@@ -894,7 +902,7 @@ SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl)
894902

895903
case SPI_SETFASTTASKSWITCH:
896904
/* According to Winetest this one is unimplemented */
897-
return 0;
905+
return 1;
898906

899907
case SPI_GETDRAGFULLWINDOWS:
900908
return SpiGetInt(pvParam, &gspv.bDragFullWindows, fl);
@@ -1011,40 +1019,102 @@ SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl)
10111019
break;
10121020

10131021
case SPI_GETFILTERKEYS:
1022+
{
1023+
LPFILTERKEYS FilterKeys = (LPFILTERKEYS)pvParam;
1024+
1025+
if (uiParam != 0 && uiParam != sizeof(FILTERKEYS))
1026+
return 0;
1027+
1028+
if (!FilterKeys || FilterKeys->cbSize != sizeof(FILTERKEYS))
1029+
return 0;
1030+
10141031
return SpiGet(pvParam, &gspv.filterkeys, sizeof(FILTERKEYS), fl);
1032+
}
10151033

10161034
case SPI_SETFILTERKEYS:
1035+
{
1036+
LPFILTERKEYS FilterKeys = (LPFILTERKEYS)pvParam;
1037+
1038+
if (uiParam != 0 && uiParam != sizeof(FILTERKEYS))
1039+
return 0;
1040+
1041+
if (!FilterKeys || FilterKeys->cbSize != sizeof(FILTERKEYS))
1042+
return 0;
1043+
10171044
if (!SpiSet(&gspv.filterkeys, pvParam, sizeof(FILTERKEYS), fl))
10181045
return 0;
10191046
if (fl & SPIF_UPDATEINIFILE)
10201047
{
10211048
// FIXME: What to do?
10221049
}
10231050
return (UINT_PTR)KEY_DESKTOP;
1051+
}
10241052

10251053
case SPI_GETTOGGLEKEYS:
1054+
{
1055+
LPTOGGLEKEYS ToggleKeys = (LPTOGGLEKEYS)pvParam;
1056+
1057+
if (uiParam != 0 && uiParam != sizeof(TOGGLEKEYS))
1058+
return 0;
1059+
1060+
if (!ToggleKeys || ToggleKeys->cbSize != sizeof(TOGGLEKEYS))
1061+
return 0;
1062+
10261063
return SpiGet(pvParam, &gspv.togglekeys, sizeof(TOGGLEKEYS), fl);
1064+
}
10271065

10281066
case SPI_SETTOGGLEKEYS:
1067+
{
1068+
LPTOGGLEKEYS ToggleKeys = (LPTOGGLEKEYS)pvParam;
1069+
1070+
if (uiParam != 0 && uiParam != sizeof(TOGGLEKEYS))
1071+
return 0;
1072+
1073+
if (!ToggleKeys || ToggleKeys->cbSize != sizeof(TOGGLEKEYS))
1074+
return 0;
1075+
10291076
if (!SpiSet(&gspv.togglekeys, pvParam, sizeof(TOGGLEKEYS), fl))
10301077
return 0;
1078+
10311079
if (fl & SPIF_UPDATEINIFILE)
10321080
{
10331081
// FIXME: What to do?
10341082
}
10351083
return (UINT_PTR)KEY_DESKTOP;
1084+
}
10361085

10371086
case SPI_GETMOUSEKEYS:
1087+
{
1088+
LPMOUSEKEYS MouseKeys = (LPMOUSEKEYS)pvParam;
1089+
1090+
if (uiParam != 0 && uiParam != sizeof(MOUSEKEYS))
1091+
return 0;
1092+
1093+
if (!MouseKeys || MouseKeys->cbSize != sizeof(MOUSEKEYS))
1094+
return 0;
1095+
10381096
return SpiGet(pvParam, &gspv.mousekeys, sizeof(MOUSEKEYS), fl);
1097+
}
10391098

10401099
case SPI_SETMOUSEKEYS:
1100+
{
1101+
LPMOUSEKEYS MouseKeys = (LPMOUSEKEYS)pvParam;
1102+
1103+
if (uiParam != 0 && uiParam != sizeof(MOUSEKEYS))
1104+
return 0;
1105+
1106+
if (!MouseKeys || MouseKeys->cbSize != sizeof(MOUSEKEYS))
1107+
return 0;
1108+
10411109
if (!SpiSet(&gspv.mousekeys, pvParam, sizeof(MOUSEKEYS), fl))
10421110
return 0;
1111+
10431112
if (fl & SPIF_UPDATEINIFILE)
10441113
{
10451114
// FIXME: What to do?
10461115
}
10471116
return (UINT_PTR)KEY_DESKTOP;
1117+
}
10481118

10491119
case SPI_GETSHOWSOUNDS:
10501120
return SpiGetInt(pvParam, &gspv.bShowSounds, fl);
@@ -1053,56 +1123,140 @@ SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl)
10531123
return SpiSetBool(&gspv.bShowSounds, uiParam, KEY_SHOWSNDS, VAL_ON, fl);
10541124

10551125
case SPI_GETSTICKYKEYS:
1126+
{
1127+
LPSTICKYKEYS StickyKeys = (LPSTICKYKEYS)pvParam;
1128+
10561129
if (uiParam != 0 && uiParam != sizeof(STICKYKEYS))
10571130
return 0;
1131+
1132+
if (!StickyKeys || StickyKeys->cbSize != sizeof(STICKYKEYS))
1133+
return 0;
1134+
10581135
return SpiGetEx(pvParam, &gspv.stickykeys, sizeof(STICKYKEYS), fl);
1136+
}
10591137

10601138
case SPI_SETSTICKYKEYS:
1139+
{
1140+
LPSTICKYKEYS StickyKeys = (LPSTICKYKEYS)pvParam;
1141+
1142+
if (uiParam != 0 && uiParam != sizeof(STICKYKEYS))
1143+
return 0;
1144+
1145+
if (!StickyKeys || StickyKeys->cbSize != sizeof(STICKYKEYS))
1146+
return 0;
1147+
10611148
if (!SpiSet(&gspv.stickykeys, pvParam, sizeof(STICKYKEYS), fl))
10621149
return 0;
1150+
10631151
if (fl & SPIF_UPDATEINIFILE)
10641152
{
10651153
// FIXME: What to do?
10661154
}
10671155
return (UINT_PTR)KEY_DESKTOP;
1156+
}
10681157

10691158
case SPI_GETACCESSTIMEOUT:
1159+
{
1160+
LPACCESSTIMEOUT AccessTimeout = (LPACCESSTIMEOUT)pvParam;
1161+
10701162
if (uiParam != 0 && uiParam != sizeof(ACCESSTIMEOUT))
10711163
return 0;
1164+
1165+
if (!AccessTimeout || AccessTimeout->cbSize != sizeof(ACCESSTIMEOUT))
1166+
return 0;
1167+
10721168
return SpiGetEx(pvParam, &gspv.accesstimeout, sizeof(ACCESSTIMEOUT), fl);
1169+
}
10731170

10741171
case SPI_SETACCESSTIMEOUT:
1172+
{
1173+
LPACCESSTIMEOUT AccessTimeout = (LPACCESSTIMEOUT)pvParam;
1174+
1175+
if (uiParam != 0 && uiParam != sizeof(ACCESSTIMEOUT))
1176+
{
1177+
return 0;
1178+
}
1179+
1180+
if (!AccessTimeout || AccessTimeout->cbSize != sizeof(ACCESSTIMEOUT))
1181+
{
1182+
return 0;
1183+
}
1184+
10751185
if (!SpiSet(&gspv.accesstimeout, pvParam, sizeof(ACCESSTIMEOUT), fl))
10761186
return 0;
1187+
10771188
if (fl & SPIF_UPDATEINIFILE)
10781189
{
10791190
// FIXME: What to do?
10801191
}
10811192
return (UINT_PTR)KEY_DESKTOP;
1193+
}
10821194

10831195
case SPI_GETSERIALKEYS:
1196+
{
1197+
LPSERIALKEYS SerialKeys = (LPSERIALKEYS)pvParam;
1198+
1199+
if (uiParam != 0 && uiParam != sizeof(SERIALKEYS))
1200+
return 0;
1201+
1202+
if (!SerialKeys || SerialKeys->cbSize != sizeof(SERIALKEYS))
1203+
return 0;
1204+
10841205
return SpiGet(pvParam, &gspv.serialkeys, sizeof(SERIALKEYS), fl);
1206+
}
10851207

10861208
case SPI_SETSERIALKEYS:
1209+
{
1210+
LPSERIALKEYS SerialKeys = (LPSERIALKEYS)pvParam;
1211+
1212+
if (uiParam != 0 && uiParam != sizeof(SERIALKEYS))
1213+
return 0;
1214+
1215+
if (!SerialKeys || SerialKeys->cbSize != sizeof(SERIALKEYS))
1216+
return 0;
1217+
10871218
if (!SpiSet(&gspv.serialkeys, pvParam, sizeof(SERIALKEYS), fl))
10881219
return 0;
1220+
10891221
if (fl & SPIF_UPDATEINIFILE)
10901222
{
10911223
// FIXME: What to do?
10921224
}
10931225
return (UINT_PTR)KEY_DESKTOP;
1226+
}
10941227

10951228
case SPI_GETSOUNDSENTRY:
1229+
{
1230+
LPSOUNDSENTRY SoundsEntry = (LPSOUNDSENTRY)pvParam;
1231+
1232+
if (uiParam != 0 && uiParam != sizeof(SOUNDSENTRY))
1233+
return 0;
1234+
1235+
if (!SoundsEntry || SoundsEntry->cbSize != sizeof(SOUNDSENTRY))
1236+
return 0;
1237+
10961238
return SpiGet(pvParam, &gspv.soundsentry, sizeof(SOUNDSENTRY), fl);
1239+
}
10971240

10981241
case SPI_SETSOUNDSENTRY:
1242+
{
1243+
LPSOUNDSENTRY SoundsEntry = (LPSOUNDSENTRY)pvParam;
1244+
1245+
if (uiParam != 0 && uiParam != sizeof(SOUNDSENTRY))
1246+
return 0;
1247+
1248+
if (!SoundsEntry || SoundsEntry->cbSize != sizeof(SOUNDSENTRY))
1249+
return 0;
1250+
10991251
if (!SpiSet(&gspv.soundsentry, pvParam, sizeof(SOUNDSENTRY), fl))
11001252
return 0;
1253+
11011254
if (fl & SPIF_UPDATEINIFILE)
11021255
{
11031256
// FIXME: What to do?
11041257
}
11051258
return (UINT_PTR)KEY_DESKTOP;
1259+
}
11061260

11071261
case SPI_GETHIGHCONTRAST:
11081262
return SpiGet(pvParam, &gspv.highcontrast, sizeof(HIGHCONTRAST), fl);

0 commit comments

Comments
 (0)