ReactOS  0.4.14-dev-317-g96040ec
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);
31  ok_long(NtGdiSetBitmapBits(hBitmap, 5, Bits), 0);
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);
50  ok_long(NtGdiSetBitmapBits(hBitmap, 5, (PBYTE)0x500), 0);
51  ok_long(GetLastError(), 0xDEADFACE);
52 
53  /* Test if we can set a number of bytes between lines */
54  SetLastError(0xDEADFACE);
55  ok_long(NtGdiSetBitmapBits(hBitmap, 5, Bits), 5);
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 }
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1471
GLint x0
Definition: linetemp.h:95
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
#define ERROR_INVALID_HANDLE
Definition: compat.h:88
static HDC
Definition: imagelist.c:92
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define ZeroMemory
Definition: winbase.h:1642
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define ok_long(expression, result)
Definition: atltest.h:133
#define MEM_COMMIT
Definition: nt_native.h:1313
START_TEST(NtGdiSetBitmapBits)
#define PS_SOLID
Definition: wingdi.h:585
LPVOID NTAPI VirtualAlloc(IN LPVOID lpAddress, IN SIZE_T dwSize, IN DWORD flAllocationType, IN DWORD flProtect)
Definition: virtmem.c:74
unsigned char * LPBYTE
Definition: typedefs.h:52
__kernel_entry W32KAPI LONG APIENTRY NtGdiGetBitmapBits(_In_ HBITMAP hbm, _In_ ULONG cjMax, _Out_writes_bytes_opt_(cjMax) PBYTE pjOut)
#define MEM_RESERVE
Definition: nt_native.h:1314
#define PAGE_NOACCESS
Definition: nt_native.h:1302
smooth NULL
Definition: ftsmooth.c:416
#define ok_int(expression, result)
Definition: atltest.h:134
#define RGB(r, g, b)
Definition: wingdi.h:2935
#define CopyMemory
Definition: winbase.h:1640
#define FillMemory(BUF, SIZ, MASK)
Definition: strucsup.c:31
#define SetLastError(x)
Definition: compat.h:409
unsigned char BYTE
Definition: mem.h:68
#define PAGE_SIZE
Definition: env_spec_w32.h:49
__kernel_entry W32KAPI LONG APIENTRY NtGdiSetBitmapBits(_In_ HBITMAP hbm, _In_ ULONG cj, _In_reads_bytes_(cj) PBYTE pjInit)
static HDC hDC
Definition: 3dtext.c:33
BOOL WINAPI DeleteDC(_In_ HDC)
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:197
#define ok(value,...)
Definition: atltest.h:57
#define PAGE_READONLY
Definition: compat.h:127
#define MEM_RELEASE
Definition: nt_native.h:1316
uint32_t * LPDWORD
Definition: typedefs.h:57
BOOL NTAPI VirtualFree(IN LPVOID lpAddress, IN SIZE_T dwSize, IN DWORD dwFreeType)
Definition: virtmem.c:128
static HBITMAP
Definition: button.c:44
#define DIB_RGB_COLORS
Definition: wingdi.h:366
BYTE * PBYTE
Definition: pedump.c:66
static HBITMAP hBitmap
Definition: timezone.c:35
#define PAGE_READWRITE
Definition: nt_native.h:1304
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)