8eda902c0a6b440245cadcfd93205f9171b68271
[reactos.git] / rostests / apitests / w32knapi / ntuser / NtUserSystemParametersInfo.c
1
2 LONG
3 QueryUserRegValueW(LPWSTR pszSubKey, LPWSTR pszValueName, PVOID pData, LPDWORD cbSize, LPDWORD pType)
4 {
5 HKEY hKey;
6 LONG ret;
7
8 RegOpenKeyExW(HKEY_CURRENT_USER, pszSubKey, 0, KEY_QUERY_VALUE, &hKey);
9 ret = RegQueryValueExW(hKey, pszValueName, NULL, pType, (LPBYTE)pData, cbSize);
10 RegCloseKey(hKey);
11 return ret;
12 }
13
14
15 HWND
16 CreateTestWindow()
17 {
18 WNDCLASSA wc;
19
20 wc.style = 0;
21 wc.lpfnWndProc = DefWindowProcA;
22 wc.cbClsExtra = 0;
23 wc.cbWndExtra = 0;
24 wc.hInstance = g_hInstance;
25 wc.hIcon = NULL;
26 wc.hCursor = NULL;
27 wc.hbrBackground = NULL;
28 wc.lpszMenuName = NULL;
29 wc.lpszClassName = "testclass";
30
31 RegisterClassA(&wc);
32 return CreateWindowA("testclass",
33 "testwnd",
34 WS_VISIBLE,
35 0,
36 0,
37 50,
38 30,
39 NULL,
40 NULL,
41 g_hInstance,
42 0);
43
44 }
45
46 void
47 Test_SPI_87_88(PTESTINFO pti)
48 {
49 DWORD dwRet = 0xdeadbeef;
50
51 TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE);
52 TEST(dwRet == 0xdeadbeef);
53 dwRet++;
54 TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE);
55
56
57 dwRet--;
58 TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE);
59
60
61 }
62
63 void
64 Test_NtUserSystemParametersInfo_Params(PTESTINFO pti)
65 {
66 // UINT uint;
67 DWORD data[1000];
68 UINT i, uint;
69 ACCESSTIMEOUT ato;
70 #if 1
71 /* Test normal */
72 SetLastError(ERROR_SUCCESS);
73 TEST(NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, &uint, 0) == TRUE);
74 TEST(GetLastError() == ERROR_SUCCESS);
75
76 /* Test invalid SPI code */
77 SetLastError(ERROR_SUCCESS);
78 TEST(NtUserSystemParametersInfo(7, 0, &data, 0) == FALSE);
79 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
80
81 /* Test wrong cbSize member */
82 ato.cbSize = 1;
83 SetLastError(ERROR_SUCCESS);
84 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &ato, 0) == FALSE);
85 TEST(GetLastError() == ERROR_SUCCESS);
86 #endif
87 /* Test undocumented, but valid SPI codes */
88 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
89 SetLastError(ERROR_SUCCESS);
90 TEST(NtUserSystemParametersInfo(4112, 0, &data, 0) == TRUE);
91 TEST(GetLastError() == ERROR_SUCCESS);
92 TEST(data[0] <= 1);
93 TEST(data[1] == 0xdeadbeef);
94
95 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
96 SetLastError(ERROR_SUCCESS);
97 TEST(NtUserSystemParametersInfo(4113, 0, &data, 0) == TRUE);
98 TEST(GetLastError() == ERROR_SUCCESS);
99 TEST(data[0] == 0xbeefdead);
100 TEST(data[1] == 0xbeefdead);
101 data[0] = 0;
102 NtUserSystemParametersInfo(4112, 0, &data, 0);
103 TEST(data[0] == 1);
104
105 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
106 SetLastError(ERROR_SUCCESS);
107 TEST(NtUserSystemParametersInfo(4136, 0, &data, 0) == TRUE);
108 TEST(GetLastError() == ERROR_SUCCESS);
109 TEST(data[0] != 0xdeadbeef);
110 TEST(data[1] == 0xdeadbeef);
111
112 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
113 SetLastError(ERROR_SUCCESS);
114 TEST(NtUserSystemParametersInfo(4137, 0, &data, 0) == TRUE);
115 TEST(GetLastError() == ERROR_SUCCESS);
116 TEST(data[0] == 0xbeefdead);
117 TEST(data[1] == 0xbeefdead);
118
119 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
120 SetLastError(ERROR_SUCCESS);
121 TEST(NtUserSystemParametersInfo(4138, 0, &data, 0) == TRUE);
122 TEST(GetLastError() == ERROR_SUCCESS);
123 TEST(data[0] != 0xdeadbeef);
124 TEST(data[1] == 0xdeadbeef);
125
126 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
127 SetLastError(ERROR_SUCCESS);
128 TEST(NtUserSystemParametersInfo(4139, 0, &data, 0) == TRUE);
129 TEST(GetLastError() == ERROR_SUCCESS);
130 TEST(data[0] == 0xbeefdead);
131 TEST(data[1] == 0xbeefdead);
132
133 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
134 SetLastError(ERROR_SUCCESS);
135 TEST(NtUserSystemParametersInfo(4140, 0, &data, 0) == TRUE);
136 TEST(GetLastError() == ERROR_SUCCESS);
137 TEST(data[0] != 0xdeadbeef);
138 TEST(data[1] == 0xdeadbeef);
139
140 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
141 SetLastError(ERROR_SUCCESS);
142 TEST(NtUserSystemParametersInfo(4141, 0, &data, 0) == TRUE);
143 TEST(GetLastError() == ERROR_SUCCESS);
144 TEST(data[0] == 0xbeefdead);
145 TEST(data[1] == 0xbeefdead);
146
147 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
148 SetLastError(ERROR_SUCCESS);
149 TEST(NtUserSystemParametersInfo(4142, 0, &data, 0) == TRUE);
150 TEST(GetLastError() == ERROR_SUCCESS);
151 TEST(data[0] != 0xdeadbeef);
152 TEST(data[1] == 0xdeadbeef);
153
154 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
155 SetLastError(ERROR_SUCCESS);
156 TEST(NtUserSystemParametersInfo(4143, 0, &data, 0) == TRUE);
157 TEST(GetLastError() == ERROR_SUCCESS);
158 TEST(data[0] == 0xbeefdead);
159 TEST(data[1] == 0xbeefdead);
160
161 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
162 SetLastError(ERROR_SUCCESS);
163 TEST(NtUserSystemParametersInfo(4144, 0, &data, 0) == TRUE);
164 TEST(GetLastError() == ERROR_SUCCESS);
165 TEST(data[0] != 0xdeadbeef);
166 TEST(data[1] == 0xdeadbeef);
167
168 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
169 SetLastError(ERROR_SUCCESS);
170 TEST(NtUserSystemParametersInfo(4145, 0, &data, 0) == TRUE);
171 TEST(GetLastError() == ERROR_SUCCESS);
172 TEST(data[0] == 0xbeefdead);
173 TEST(data[1] == 0xbeefdead);
174
175 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
176 SetLastError(ERROR_SUCCESS);
177 TEST(NtUserSystemParametersInfo(4146, 0, &data, 0) == TRUE);
178 TEST(GetLastError() == ERROR_SUCCESS);
179 TEST(data[0] != 0xdeadbeef);
180 TEST(data[1] == 0xdeadbeef);
181
182 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
183 SetLastError(ERROR_SUCCESS);
184 TEST(NtUserSystemParametersInfo(4147, 0, &data, 0) == TRUE);
185 TEST(GetLastError() == ERROR_SUCCESS);
186 TEST(data[0] == 0xbeefdead);
187 TEST(data[1] == 0xbeefdead);
188
189 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
190 SetLastError(ERROR_SUCCESS);
191 TEST(NtUserSystemParametersInfo(4148, 0, &data, 0) == TRUE);
192 TEST(GetLastError() == ERROR_SUCCESS);
193 TEST(data[0] != 0xdeadbeef);
194 TEST(data[1] == 0xdeadbeef);
195
196 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
197 SetLastError(ERROR_SUCCESS);
198 TEST(NtUserSystemParametersInfo(4149, 0, &data, 0) == TRUE);
199 TEST(GetLastError() == ERROR_SUCCESS);
200 TEST(data[0] == 0xbeefdead);
201 TEST(data[1] == 0xbeefdead);
202
203 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
204 SetLastError(ERROR_SUCCESS);
205 TEST(NtUserSystemParametersInfo(4150, 0, &data, 0) == TRUE);
206 TEST(GetLastError() == ERROR_SUCCESS);
207 TEST(data[0] != 0xdeadbeef);
208 TEST(data[1] == 0xdeadbeef);
209
210 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
211 SetLastError(ERROR_SUCCESS);
212 TEST(NtUserSystemParametersInfo(4151, 0, &data, 0) == TRUE);
213 TEST(GetLastError() == ERROR_SUCCESS);
214 TEST(data[0] == 0xbeefdead);
215 TEST(data[1] == 0xbeefdead);
216
217 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
218 SetLastError(ERROR_SUCCESS);
219 TEST(NtUserSystemParametersInfo(4152, 0, &data, 0) == TRUE);
220 TEST(GetLastError() == ERROR_SUCCESS);
221 TEST(data[0] != 0xdeadbeef);
222 TEST(data[1] == 0xdeadbeef);
223
224 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
225 SetLastError(ERROR_SUCCESS);
226 TEST(NtUserSystemParametersInfo(4153, 0, &data, 0) == TRUE);
227 TEST(GetLastError() == ERROR_SUCCESS);
228 TEST(data[0] == 0xbeefdead);
229 TEST(data[1] == 0xbeefdead);
230
231 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
232 SetLastError(ERROR_SUCCESS);
233 TEST(NtUserSystemParametersInfo(4154, 0, &data, 0) == TRUE);
234 TEST(GetLastError() == ERROR_SUCCESS);
235 TEST(data[0] != 0xdeadbeef);
236 TEST(data[1] == 0xdeadbeef);
237
238 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
239 SetLastError(ERROR_SUCCESS);
240 TEST(NtUserSystemParametersInfo(4155, 0, &data, 0) == TRUE);
241 TEST(GetLastError() == ERROR_SUCCESS);
242 TEST(data[0] == 0xbeefdead);
243 TEST(data[1] == 0xbeefdead);
244
245 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
246 SetLastError(ERROR_SUCCESS);
247 TEST(NtUserSystemParametersInfo(4156, 0, &data, 0) == TRUE);
248 TEST(GetLastError() == ERROR_SUCCESS);
249 TEST(data[0] != 0xdeadbeef);
250 TEST(data[1] == 0xdeadbeef);
251
252 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead;
253 SetLastError(ERROR_SUCCESS);
254 TEST(NtUserSystemParametersInfo(4157, 0, &data, 0) == TRUE);
255 TEST(GetLastError() == ERROR_SUCCESS);
256 TEST(data[0] == 0xbeefdead);
257 TEST(data[1] == 0xbeefdead);
258
259 /* Test invalid pointer */
260 SetLastError(ERROR_SUCCESS);
261 TEST(NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, (PVOID)0x80000000, 0) == FALSE);
262 TEST(GetLastError() == ERROR_NOACCESS);
263 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef;
264
265 /* test wrong bools */
266 }
267
268 void
269 Test_NtUserSystemParametersInfo_fWinIni(PTESTINFO pti)
270 {
271 ACCESSTIMEOUT ato;
272 // UINT uFocusBorderHeight;
273 WCHAR Buffer[6];
274 DWORD cbSize;
275
276 ato.cbSize = sizeof(ato);
277 NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &ato, 0);
278 ato.iTimeOutMSec++;
279 NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, 0, &ato, 0);
280 ato.iTimeOutMSec--;
281
282 // NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, &uFocusBorderHeight, 0);
283 // NtUserSystemParametersInfo(SPI_SETFOCUSBORDERHEIGHT, 0, &uFocusBorderHeight, SPIF_UPDATEINIFILE);
284
285 NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, 0, &ato, 0);
286
287 cbSize = 6;
288 QueryUserRegValueW(L"Control Panel\\Accessibility\\TimeOut", L"TimeToWait", &Buffer, &cbSize, NULL);
289
290 }
291
292 void
293 Test_SPI_GETSETBEEP(PTESTINFO pti)
294 {
295 BOOL bOrig, bTemp = 0;
296 WCHAR szReg[10];
297 DWORD cbSize;
298
299 /* Get original value */
300 NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bOrig, 0);
301
302 /* Value 0 */
303 NtUserSystemParametersInfo(SPI_SETBEEP, 0, NULL, SPIF_UPDATEINIFILE);
304 NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0);
305 TEST(bTemp == 0);
306 cbSize = sizeof(szReg);
307 TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS);
308 TEST(_wcsicmp(szReg, L"No") == 0);
309
310 /* Value 1 */
311 NtUserSystemParametersInfo(SPI_SETBEEP, 1, NULL, SPIF_UPDATEINIFILE);
312 NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0);
313 TEST(bTemp == 1);
314 cbSize = sizeof(szReg);
315 TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS);
316 TEST(_wcsicmp(szReg, L"Yes") == 0);
317
318 /* Value 2 */
319 NtUserSystemParametersInfo(SPI_SETBEEP, 2, NULL, SPIF_UPDATEINIFILE);
320 NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0);
321 TEST(bTemp == 1);
322 cbSize = sizeof(szReg);
323 TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS);
324 TEST(_wcsicmp(szReg, L"Yes") == 0);
325
326 /* Restore original value */
327 NtUserSystemParametersInfo(SPI_SETBEEP, 0, &bOrig, SPIF_UPDATEINIFILE);
328 }
329
330 INT
331 Test_SPI_SETDESKWALLPAPER(PTESTINFO pti)
332 {
333 /* Get old Wallpaper */
334 // NtUserSystemParametersInfo(SPI_GET_DESKWALLPAPER, 0,
335
336 // TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &hNewWallPaper, 0) == 0);
337 return 0;
338 }
339
340 INT
341 Test_SPI_GETSTICKYKEYS(PTESTINFO pti)
342 {
343 STICKYKEYS sk;
344
345 sk.cbSize = sizeof(STICKYKEYS)+1;
346 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &sk, 0) == 0);
347
348
349 sk.cbSize = sizeof(STICKYKEYS);
350 NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &sk, 0);
351 printf("sk.dwFlags = %lx\n", sk.dwFlags);
352
353 return APISTATUS_NORMAL;
354 }
355
356 INT
357 Test_NtUserSystemParametersInfo(PTESTINFO pti)
358 {
359 HWND hWnd;
360
361 hWnd = CreateTestWindow();
362 ASSERT(hWnd);
363 Test_NtUserSystemParametersInfo_Params(pti);
364
365 Test_NtUserSystemParametersInfo_fWinIni(pti);
366
367 Test_SPI_GETSETBEEP(pti);
368 Test_SPI_SETDESKWALLPAPER(pti);
369
370 Test_SPI_GETSTICKYKEYS(pti);
371
372 Test_SPI_87_88(pti);
373
374 DestroyWindow(hWnd);
375
376 return APISTATUS_NORMAL;
377 }