ReactOS 0.4.15-dev-8344-g0574987
NtGdiSetBitmapBits.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for NtGdiSetBitmapBits
5 * PROGRAMMERS: Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8#include "../win32nt.h"
9
11{
12 BYTE Bits[100] = {0,1,2,3,4,5,6,7,8,9};
14 HDC hDC;
15 BITMAPINFO bmi;
16 LPVOID pvBits;
17 LPBYTE LargeBits;
18
19 SetLastError(0xDEADFACE);
20 ok_long(NtGdiSetBitmapBits(0, 0, 0), 0);
21 ok_long(GetLastError(), 0xDEADFACE);
22
23 /* Test NULL bitnap handle */
24 SetLastError(0xDEADFACE);
25 ok_long(NtGdiSetBitmapBits(0, 5, Bits), 0);
27
28 /* Test invalid bitmap handle */
29 hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3));
30 SetLastError(0xDEADFACE);
34
35 hBitmap = CreateBitmap(3, 3, 1, 8, NULL);
36 ok(hBitmap != NULL, "hBitmap was NULL.\n");
37
38 /* test NULL pointer and count buffer size != 0 */
39 SetLastError(0xDEADFACE);
41 ok_long(GetLastError(), 0xDEADFACE);
42
43 /* test NULL pointer and buffer size == 0*/
44 SetLastError(0xDEADFACE);
46 ok_long(GetLastError(), 0xDEADFACE);
47
48 /* test bad pointer */
49 SetLastError(0xDEADFACE);
51 ok_long(GetLastError(), 0xDEADFACE);
52
53 /* Test if we can set a number of bytes between lines */
54 SetLastError(0xDEADFACE);
56 ok_long(GetLastError(), 0xDEADFACE);
57
58 /* Test alignment */
59 SetLastError(0xDEADFACE);
60 ok_long(NtGdiSetBitmapBits(hBitmap, 4, Bits+1), 4);
61 ok_long(GetLastError(), 0xDEADFACE);
62
63 /* Test 1 byte too much */
64 SetLastError(0xDEADFACE);
65 ok_long(NtGdiSetBitmapBits(hBitmap, 10, Bits), 10);
66 ok_long(GetLastError(), 0xDEADFACE);
67
68 /* Test one row too much */
69 SetLastError(0xDEADFACE);
70 ok_long(NtGdiSetBitmapBits(hBitmap, 12, Bits), 12);
71 ok_long(GetLastError(), 0xDEADFACE);
72
73 SetLastError(0xDEADFACE);
74 ok_long(NtGdiSetBitmapBits(hBitmap, 13, Bits), 12);
75 ok_long(GetLastError(), 0xDEADFACE);
76
77 SetLastError(0xDEADFACE);
78 ok_long(NtGdiSetBitmapBits(hBitmap, 100, Bits), 12);
79 ok_long(GetLastError(), 0xDEADFACE);
80
81 /* Test large byte counts (with PAGE_NOACCESS) */
82 LargeBits = VirtualAlloc(NULL, 0x100000 + PAGE_SIZE, MEM_RESERVE, PAGE_NOACCESS);
83 VirtualAlloc(LargeBits, 0x100000, MEM_COMMIT, PAGE_READWRITE);
84 CopyMemory(LargeBits, Bits, sizeof(Bits));
85
86 SetLastError(0xDEADFACE);
87 ok_long(NtGdiSetBitmapBits(hBitmap, 0x100, LargeBits), 0xC);
88 ok_long(GetLastError(), 0xDEADFACE);
89
90 SetLastError(0xDEADFACE);
91 ok_long(NtGdiSetBitmapBits(hBitmap, 0x10000, LargeBits), 0xC);
92 ok_long(GetLastError(), 0xDEADFACE);
93
94 SetLastError(0xDEADFACE);
95 ok_long(NtGdiSetBitmapBits(hBitmap, 0x100000, LargeBits), 0xC);
96 ok_long(GetLastError(), 0xDEADFACE);
97
98 SetLastError(0xDEADFACE);
99 ok_long(NtGdiSetBitmapBits(hBitmap, 0x100001, LargeBits), 0x0);
100 ok_long(GetLastError(), 0xDEADFACE);
101
102 VirtualFree(LargeBits, 0, MEM_RELEASE);
103
104 /* Test large byte counts (with PAGE_READONLY) */
105 LargeBits = VirtualAlloc(NULL, 0x100000 + PAGE_SIZE, MEM_RESERVE, PAGE_READONLY);
106 VirtualAlloc(LargeBits, 0x100000, MEM_COMMIT, PAGE_READWRITE);
107 CopyMemory(LargeBits, Bits, sizeof(Bits));
108
109 SetLastError(0xDEADFACE);
110 ok_long(NtGdiSetBitmapBits(hBitmap, 0x100, LargeBits), 0xC);
111 ok_long(GetLastError(), 0xDEADFACE);
112
113 SetLastError(0xDEADFACE);
114 ok_long(NtGdiSetBitmapBits(hBitmap, 0x10000, LargeBits), 0xC);
115 ok_long(GetLastError(), 0xDEADFACE);
116
117 SetLastError(0xDEADFACE);
118 ok_long(NtGdiSetBitmapBits(hBitmap, 0x100000, LargeBits), 0xC);
119 ok_long(GetLastError(), 0xDEADFACE);
120
121 SetLastError(0xDEADFACE);
122 ok_long(NtGdiSetBitmapBits(hBitmap, 0x100001, LargeBits), 0x0);
123 ok_long(GetLastError(), 0xDEADFACE);
124
125 VirtualFree(LargeBits, 0, MEM_RELEASE);
126
128
129 /* ------------------------- */
130
131 hBitmap = CreateBitmap(16, 16, 1, 1, NULL);
132 ok(hBitmap != NULL, "hBitmap was NULL.\n");
133
134 FillMemory(Bits, sizeof(Bits), 0x55);
135 SetLastError(0xDEADFACE);
136 ok_long(NtGdiGetBitmapBits(hBitmap, 0, Bits), 0);
137 ok_long(GetLastError(), 0xDEADFACE);
138 ok_int(Bits[0], 0x55);
139
140 FillMemory(Bits, sizeof(Bits), 0x55);
141
142 SetLastError(0xDEADFACE);
143 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
144 ok_long(GetLastError(), 0xDEADFACE);
145 ok_int(Bits[0], 0);
146 ok_int(Bits[1], 0x55);
147
148 FillMemory(Bits, sizeof(Bits), 0x55);
149 SetLastError(0xDEADFACE);
150 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
151 ok_long(GetLastError(), 0xDEADFACE);
152 ok_int(Bits[0], 0);
153 ok_int(Bits[1], 0);
154 ok_int(Bits[2], 0x55);
155
156 FillMemory(Bits, sizeof(Bits), 0x33);
157 SetLastError(0xDEADFACE);
158 ok_long(NtGdiSetBitmapBits(hBitmap, 10, Bits), 10);
159 ok_long(GetLastError(), 0xDEADFACE);
160
161 FillMemory(Bits, sizeof(Bits), 0xAA);
162 SetLastError(0xDEADFACE);
163 ok_long(NtGdiSetBitmapBits(hBitmap, 1, Bits), 1);
164 ok_long(GetLastError(), 0xDEADFACE);
165 FillMemory(Bits, sizeof(Bits), 0x55);
166 SetLastError(0xDEADFACE);
167 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
168 ok_long(GetLastError(), 0xDEADFACE);
169 ok_int(Bits[0], 0xAA);
170 ok_int(Bits[1], 0x55);
171 SetLastError(0xDEADFACE);
172 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
173 ok_long(GetLastError(), 0xDEADFACE);
174 ok_int(Bits[0], 0xAA);
175 ok_int(Bits[1], 0x33);
176 ok_int(Bits[2], 0x55);
177
178 FillMemory(Bits, sizeof(Bits), 0xAA);
179 SetLastError(0xDEADFACE);
180 ok_long(NtGdiSetBitmapBits(hBitmap, 2, Bits), 2);
181 ok_long(GetLastError(), 0xDEADFACE);
182 FillMemory(Bits, sizeof(Bits), 0x55);
183 SetLastError(0xDEADFACE);
184 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
185 ok_long(GetLastError(), 0xDEADFACE);
186 ok_int(Bits[0], 0xAA);
187 ok_int(Bits[1], 0xAA);
188 ok_int(Bits[2], 0x55);
189 SetLastError(0xDEADFACE);
190 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
191 ok_long(GetLastError(), 0xDEADFACE);
192 ok_int(Bits[0], 0xAA);
193 ok_int(Bits[1], 0xAA);
194 ok_int(Bits[2], 0x33);
195 ok_int(Bits[3], 0x55);
196
197 FillMemory(Bits, sizeof(Bits), 0xAA);
198 SetLastError(0xDEADFACE);
199 ok_long(NtGdiSetBitmapBits(hBitmap, 3, Bits), 3);
200 ok_long(GetLastError(), 0xDEADFACE);
201 FillMemory(Bits, sizeof(Bits), 0x55);
202 SetLastError(0xDEADFACE);
203 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
204 ok_long(GetLastError(), 0xDEADFACE);
205 ok_int(Bits[0], 0xAA);
206 ok_int(Bits[1], 0xAA);
207 ok_int(Bits[2], 0xAA);
208 ok_int(Bits[3], 0x55);
209 SetLastError(0xDEADFACE);
210 ok_long(NtGdiGetBitmapBits(hBitmap, 4, Bits), 4);
211 ok_long(GetLastError(), 0xDEADFACE);
212 ok_int(Bits[0], 0xAA);
213 ok_int(Bits[1], 0xAA);
214 ok_int(Bits[2], 0xAA);
215 ok_int(Bits[3], 0x33);
216 ok_int(Bits[4], 0x55);
217
219
220 /* ------------------------- */
221
223
224 ZeroMemory(&bmi, sizeof(bmi));
225 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
226 bmi.bmiHeader.biWidth = 15;
227 bmi.bmiHeader.biHeight = 15; /* positive */
228 bmi.bmiHeader.biPlanes = 1;
229 bmi.bmiHeader.biBitCount = 24;
230 hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pvBits, NULL, 0);
231 ok(hBitmap != NULL, "hBitmap was NULL.\n");
232
233 FillMemory(Bits, sizeof(Bits), 0x55);
234 SetLastError(0xDEADFACE);
235 ok_long(NtGdiGetBitmapBits(hBitmap, 0, Bits), 0);
236 ok_long(GetLastError(), 0xDEADFACE);
237 ok_int(Bits[0], 0x55);
238
239 FillMemory(Bits, sizeof(Bits), 0x55);
240 SetLastError(0xDEADFACE);
241 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
242 ok_long(GetLastError(), 0xDEADFACE);
243 ok_int(Bits[0], 0);
244 ok_int(Bits[1], 0x55);
245
246 FillMemory(Bits, sizeof(Bits), 0x55);
247 SetLastError(0xDEADFACE);
248 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
249 ok_long(GetLastError(), 0xDEADFACE);
250 ok_int(Bits[0], 0);
251 ok_int(Bits[1], 0);
252 ok_int(Bits[2], 0x55);
253
254 FillMemory(Bits, sizeof(Bits), 0x33);
255 SetLastError(0xDEADFACE);
256 ok_long(NtGdiSetBitmapBits(hBitmap, 10, Bits), 10);
257 ok_long(GetLastError(), 0xDEADFACE);
258
259 FillMemory(Bits, sizeof(Bits), 0xAA);
260 SetLastError(0xDEADFACE);
261 ok_long(NtGdiSetBitmapBits(hBitmap, 1, Bits), 1);
262 ok_long(GetLastError(), 0xDEADFACE);
263 FillMemory(Bits, sizeof(Bits), 0x55);
264 SetLastError(0xDEADFACE);
265 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
266 ok_long(GetLastError(), 0xDEADFACE);
267 ok_int(Bits[0], 0xAA);
268 ok_int(Bits[1], 0x55);
269 SetLastError(0xDEADFACE);
270 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
271 ok_long(GetLastError(), 0xDEADFACE);
272 ok_int(Bits[0], 0xAA);
273 ok_int(Bits[1], 0x33);
274 ok_int(Bits[2], 0x55);
275
276 FillMemory(Bits, sizeof(Bits), 0xAA);
277 SetLastError(0xDEADFACE);
278 ok_long(NtGdiSetBitmapBits(hBitmap, 2, Bits), 2);
279 ok_long(GetLastError(), 0xDEADFACE);
280 FillMemory(Bits, sizeof(Bits), 0x55);
281 SetLastError(0xDEADFACE);
282 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
283 ok_long(GetLastError(), 0xDEADFACE);
284 ok_int(Bits[0], 0xAA);
285 ok_int(Bits[1], 0xAA);
286 ok_int(Bits[2], 0x55);
287 SetLastError(0xDEADFACE);
288 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
289 ok_long(GetLastError(), 0xDEADFACE);
290 ok_int(Bits[0], 0xAA);
291 ok_int(Bits[1], 0xAA);
292 ok_int(Bits[2], 0x33);
293 ok_int(Bits[3], 0x55);
294
295 FillMemory(Bits, sizeof(Bits), 0xAA);
296 SetLastError(0xDEADFACE);
297 ok_long(NtGdiSetBitmapBits(hBitmap, 3, Bits), 3);
298 ok_long(GetLastError(), 0xDEADFACE);
299 FillMemory(Bits, sizeof(Bits), 0x55);
300 SetLastError(0xDEADFACE);
301 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
302 ok_long(GetLastError(), 0xDEADFACE);
303 ok_int(Bits[0], 0xAA);
304 ok_int(Bits[1], 0xAA);
305 ok_int(Bits[2], 0xAA);
306 ok_int(Bits[3], 0x55);
307 SetLastError(0xDEADFACE);
308 ok_long(NtGdiGetBitmapBits(hBitmap, 4, Bits), 4);
309 ok_long(GetLastError(), 0xDEADFACE);
310 ok_int(Bits[0], 0xAA);
311 ok_int(Bits[1], 0xAA);
312 ok_int(Bits[2], 0xAA);
313 ok_int(Bits[3], 0x33);
314 ok_int(Bits[4], 0x55);
315
316 ok_long(*(LPDWORD)pvBits, 0);
317 ok_long(((LPDWORD)pvBits)[1], 0);
318
320 DeleteDC(hDC);
321
322 /* ------------------------- */
323
325
326 ZeroMemory(&bmi, sizeof(bmi));
327 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
328 bmi.bmiHeader.biWidth = 15;
329 bmi.bmiHeader.biHeight = -15; /* negative */
330 bmi.bmiHeader.biPlanes = 1;
331 bmi.bmiHeader.biBitCount = 24;
332 hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pvBits, NULL, 0);
333 ok(hBitmap != NULL, "hBitmap was NULL.\n");
334
335 FillMemory(Bits, sizeof(Bits), 0x55);
336 SetLastError(0xDEADFACE);
337 ok_long(NtGdiGetBitmapBits(hBitmap, 0, Bits), 0);
338 ok_long(GetLastError(), 0xDEADFACE);
339 ok_int(Bits[0], 0x55);
340
341 FillMemory(Bits, sizeof(Bits), 0x55);
342 SetLastError(0xDEADFACE);
343 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
344 ok_long(GetLastError(), 0xDEADFACE);
345 ok_int(Bits[0], 0);
346 ok_int(Bits[1], 0x55);
347
348 FillMemory(Bits, sizeof(Bits), 0x55);
349 SetLastError(0xDEADFACE);
350 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
351 ok_long(GetLastError(), 0xDEADFACE);
352 ok_int(Bits[0], 0);
353 ok_int(Bits[1], 0);
354 ok_int(Bits[2], 0x55);
355
356 FillMemory(Bits, sizeof(Bits), 0x33);
357 SetLastError(0xDEADFACE);
358 ok_long(NtGdiSetBitmapBits(hBitmap, 10, Bits), 10);
359 ok_long(GetLastError(), 0xDEADFACE);
360
361 FillMemory(Bits, sizeof(Bits), 0xAA);
362 SetLastError(0xDEADFACE);
363 ok_long(NtGdiSetBitmapBits(hBitmap, 1, Bits), 1);
364 ok_long(GetLastError(), 0xDEADFACE);
365 FillMemory(Bits, sizeof(Bits), 0x55);
366 SetLastError(0xDEADFACE);
367 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
368 ok_long(GetLastError(), 0xDEADFACE);
369 ok_int(Bits[0], 0xAA);
370 ok_int(Bits[1], 0x55);
371 SetLastError(0xDEADFACE);
372 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
373 ok_long(GetLastError(), 0xDEADFACE);
374 ok_int(Bits[0], 0xAA);
375 ok_int(Bits[1], 0x33);
376 ok_int(Bits[2], 0x55);
377
378 FillMemory(Bits, sizeof(Bits), 0xAA);
379 SetLastError(0xDEADFACE);
380 ok_long(NtGdiSetBitmapBits(hBitmap, 2, Bits), 2);
381 ok_long(GetLastError(), 0xDEADFACE);
382 FillMemory(Bits, sizeof(Bits), 0x55);
383 SetLastError(0xDEADFACE);
384 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
385 ok_long(GetLastError(), 0xDEADFACE);
386 ok_int(Bits[0], 0xAA);
387 ok_int(Bits[1], 0xAA);
388 ok_int(Bits[2], 0x55);
389 SetLastError(0xDEADFACE);
390 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
391 ok_long(GetLastError(), 0xDEADFACE);
392 ok_int(Bits[0], 0xAA);
393 ok_int(Bits[1], 0xAA);
394 ok_int(Bits[2], 0x33);
395 ok_int(Bits[3], 0x55);
396
397 FillMemory(Bits, sizeof(Bits), 0xAA);
398 SetLastError(0xDEADFACE);
399 ok_long(NtGdiSetBitmapBits(hBitmap, 3, Bits), 3);
400 ok_long(GetLastError(), 0xDEADFACE);
401 FillMemory(Bits, sizeof(Bits), 0x55);
402 SetLastError(0xDEADFACE);
403 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
404 ok_long(GetLastError(), 0xDEADFACE);
405 ok_int(Bits[0], 0xAA);
406 ok_int(Bits[1], 0xAA);
407 ok_int(Bits[2], 0xAA);
408 ok_int(Bits[3], 0x55);
409 SetLastError(0xDEADFACE);
410 ok_long(NtGdiGetBitmapBits(hBitmap, 4, Bits), 4);
411 ok_long(GetLastError(), 0xDEADFACE);
412 ok_int(Bits[0], 0xAA);
413 ok_int(Bits[1], 0xAA);
414 ok_int(Bits[2], 0xAA);
415 ok_int(Bits[3], 0x33);
416 ok_int(Bits[4], 0x55);
417
418 ok_long(*(LPDWORD)pvBits, 0x33AAAAAA);
419 ok_long(((LPDWORD)pvBits)[1], 0x33333333);
420
422 DeleteDC(hDC);
423}
static HDC hDC
Definition: 3dtext.c:33
#define ok_long(expression, result)
Definition: atltest.h:133
#define ok(value,...)
Definition: atltest.h:57
#define START_TEST(x)
Definition: atltest.h:75
#define ok_int(expression, result)
Definition: atltest.h:134
#define NULL
Definition: types.h:112
static HBITMAP hBitmap
Definition: timezone.c:26
#define PAGE_READONLY
Definition: compat.h:138
#define SetLastError(x)
Definition: compat.h:752
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
#define RGB(r, g, b)
Definition: precomp.h:71
#define PAGE_SIZE
Definition: env_spec_w32.h:49
#define FillMemory(BUF, SIZ, MASK)
Definition: strucsup.c:31
pKey DeleteObject()
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
#define PAGE_READWRITE
Definition: nt_native.h:1304
#define MEM_RESERVE
Definition: nt_native.h:1314
#define MEM_RELEASE
Definition: nt_native.h:1316
#define MEM_COMMIT
Definition: nt_native.h:1313
#define PAGE_NOACCESS
Definition: nt_native.h:1302
__kernel_entry W32KAPI LONG APIENTRY NtGdiGetBitmapBits(_In_ HBITMAP hbm, _In_ ULONG cjMax, _Out_writes_bytes_opt_(cjMax) PBYTE pjOut)
__kernel_entry W32KAPI LONG APIENTRY NtGdiSetBitmapBits(_In_ HBITMAP hbm, _In_ ULONG cj, _In_reads_bytes_(cj) PBYTE pjInit)
BYTE * PBYTE
Definition: pedump.c:66
USHORT biBitCount
Definition: precomp.h:46
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1476
unsigned char * LPBYTE
Definition: typedefs.h:53
uint32_t * LPDWORD
Definition: typedefs.h:59
LPVOID NTAPI VirtualAlloc(IN LPVOID lpAddress, IN SIZE_T dwSize, IN DWORD flAllocationType, IN DWORD flProtect)
Definition: virtmem.c:65
BOOL NTAPI VirtualFree(IN LPVOID lpAddress, IN SIZE_T dwSize, IN DWORD dwFreeType)
Definition: virtmem.c:119
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:245
#define ZeroMemory
Definition: winbase.h:1712
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define CopyMemory
Definition: winbase.h:1710
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI DeleteDC(_In_ HDC)
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
#define PS_SOLID
Definition: wingdi.h:586
unsigned char BYTE
Definition: xxhash.c:193