ReactOS  0.4.13-dev-982-g9853eab
NtGdiCreateDIBSection.c File Reference
#include <win32nt.h>
Include dependency graph for NtGdiCreateDIBSection.c:

Go to the source code of this file.

Functions

ULONG GetBitmapSize (BITMAPINFOHEADER *pbih)
 
 START_TEST (NtGdiCreateDIBSection)
 

Function Documentation

◆ GetBitmapSize()

ULONG GetBitmapSize ( BITMAPINFOHEADER pbih)

Definition at line 26 of file NtGdiCreateDIBSection.c.

27 {
28  ULONG WidthBits, WidthBytes;
29 
30  WidthBits = pbih->biWidth * pbih->biBitCount * pbih->biPlanes;
31  WidthBytes = ((WidthBits + 31) & ~ 31) >> 3;
32 
33  return pbih->biHeight * WidthBytes;
34 }
unsigned int ULONG
Definition: retypes.h:1

Referenced by DECLARE_INTERFACE_().

◆ START_TEST()

START_TEST ( NtGdiCreateDIBSection  )

iUsage = 0 (DIB_RGB_COLORS)

iUsage = 1 (DIB_PAL_COLORS)

iUsage = 2 (???)

wrong iUsage

BITMAPV4HEADER

BITMAPV5HEADER

Definition at line 37 of file NtGdiCreateDIBSection.c.

38 {
39  HBITMAP hbmp;
40  HDC hDC;
41  ULONG cjHeader;
42  PVOID pvBits = NULL;
44  DIBSECTION dibsection;
45 
46  struct
47  {
48  BITMAPINFOHEADER bmiHeader;
49  RGBQUAD bmiColors[100];
50  } bmi;
52  PBITMAPINFOHEADER pbih = (PBITMAPINFOHEADER)&bmi.bmiHeader;
53  PBITMAPV4HEADER pbV4h = (PBITMAPV4HEADER)&bmi.bmiHeader;
54  PBITMAPV5HEADER pbV5h = (PBITMAPV5HEADER)&bmi.bmiHeader;
55 
59 
60  hDC = GetDC(0);
61  pbih->biSize = sizeof(BITMAPINFOHEADER);
62  pbih->biWidth = 2;
63  pbih->biHeight = 2;
64  pbih->biPlanes = 1;
65  pbih->biBitCount = 1;
66  pbih->biCompression = BI_RGB;
67  pbih->biSizeImage = 0;
68  pbih->biXPelsPerMeter = 100;
69  pbih->biYPelsPerMeter = 100;
70  pbih->biClrUsed = 2;
71  pbih->biClrImportant = 2;
72 
73  cEntries = 0;
74 
77  cjHeader = bmi.bmiHeader.biSize + cEntries * 4 + 8;
78 
79  /* Test something simple */
80  SetLastError(0);
81  pvBits = 0;
82  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
83  TEST(pvBits != NULL);
84  TEST(hbmp != 0);
85 // TEST(GetLastError() == 0);
86  TEST(GetObject(hbmp, sizeof(DIBSECTION), &dibsection) == sizeof(DIBSECTION));
87  TEST(dibsection.dsBitfields[0] == 0);
88  TEST(dibsection.dsBitfields[1] == 0);
89  TEST(dibsection.dsBitfields[2] == 0);
90  TEST(dibsection.dshSection == 0);
91  TEST(dibsection.dsOffset == 0);
92  if (hbmp) DeleteObject(hbmp);
93 
94 
95  /* Test a 0 HDC */
96  SetLastError(0);
97  pvBits = 0;
98  hbmp = NtGdiCreateDIBSection(0, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
99  TEST(pvBits != NULL);
100  TEST(hbmp != 0);
102  if (hbmp) DeleteObject(hbmp);
103 
104  /* Test a wrong HDC */
105  SetLastError(0);
106  pvBits = 0;
107  hbmp = NtGdiCreateDIBSection((HDC)0xdeadbeef, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
108  TEST(pvBits != 0);
109  TEST(hbmp != 0);
110  TEST(GetLastError() == 8);
111  if (hbmp) DeleteObject(hbmp);
112 
113  /* Test pbmi = NULL */
114  SetLastError(0);
115  pvBits = (PVOID)-1;
116  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, NULL, 0, cjHeader, 0, 0, &pvBits);
117  TEST(pvBits == (PVOID)-1);
118  TEST(hbmp == 0);
119  TEST(GetLastError() == 0);
120  if (hbmp) DeleteObject(hbmp);
121 
122  /* Test invalid pbmi */
123  SetLastError(0);
124  pvBits = (PVOID)-1;
125  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, (PVOID)0x80001234, 0, cjHeader, 0, 0, &pvBits);
126  TEST(pvBits == (PVOID)-1);
127  TEST(hbmp == 0);
129  if (hbmp) DeleteObject(hbmp);
130 
131  /* Test invalid pbmi */
132  SetLastError(0);
133  pvBits = (PVOID)-1;
134  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, (PVOID)1, 0, cjHeader, 0, 0, &pvBits);
135  TEST(pvBits == (PVOID)-1);
136  TEST(hbmp == 0);
138  if (hbmp) DeleteObject(hbmp);
139 
140  /* Test ppvBits = NULL */
141  SetLastError(0);
142  hbmp = NtGdiCreateDIBSection(0, NULL, 0, pbmi, 0, cjHeader, 0, 0, NULL);
143  TEST(hbmp == 0);
145  if (hbmp) DeleteObject(hbmp);
146 
147  /* Test ppvBits = NULL and pbmi == 0*/
148  SetLastError(0);
149  hbmp = NtGdiCreateDIBSection(0, NULL, 0, NULL, 0, cjHeader, 0, 0, NULL);
150  TEST(hbmp == 0);
151  TEST(GetLastError() == 0);
152  if (hbmp) DeleteObject(hbmp);
153 
154  /* Test ppvBits = NULL and wrong cjHeader */
155  SetLastError(0);
156  hbmp = NtGdiCreateDIBSection(0, NULL, 0, pbmi, 0, cjHeader+4, 0, 0, NULL);
157  TEST(hbmp == 0);
158  TEST(GetLastError() == 0);
159  if (hbmp) DeleteObject(hbmp);
160 
161  /* Test ppvBits = NULL and cjHeader = 0 */
162  SetLastError(0);
163  hbmp = NtGdiCreateDIBSection(0, NULL, 0, pbmi, 0, 0, 0, 0, NULL);
164  TEST(hbmp == 0);
165  TEST(GetLastError() == 0);
166  if (hbmp) DeleteObject(hbmp);
167 
168  /* Test wrong cjHeader */
169  SetLastError(0);
170  pvBits = (PVOID)-1;
171  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader+4, 0, 0, &pvBits);
172  pvBits = (PVOID)-1;
173  TEST(hbmp == 0);
174  TEST(GetLastError() == 0);
175  if (hbmp) DeleteObject(hbmp);
176 
177  /* Test different bitcount */
178  pbih->biBitCount = 4;
179  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
180  TEST(hbmp != 0);
181  if (hbmp) DeleteObject(hbmp);
182 
183  pbih->biBitCount = 8;
184  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
185  TEST(hbmp != 0);
186  if (hbmp) DeleteObject(hbmp);
187 
188  cjHeader = pbih->biSize;
189  pbih->biBitCount = 16;
190  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
191  TEST(hbmp != 0);
192  if (hbmp) DeleteObject(hbmp);
193 
194  pbih->biBitCount = 24;
195  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
196  TEST(hbmp != 0);
197  if (hbmp) DeleteObject(hbmp);
198 
199  pbih->biBitCount = 32;
200  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
201  TEST(hbmp != 0);
202  if (hbmp) DeleteObject(hbmp);
203 
204  /* Test BI_BITFIELDS */
205  cEntries = 3;
206  cjHeader = pbih->biSize + cEntries * sizeof(DWORD);
207  pbih->biBitCount = 16;
208  pbih->biCompression = BI_BITFIELDS;
209  ((DWORD*)pbmi->bmiColors)[0] = 0x0007;
210  ((DWORD*)pbmi->bmiColors)[1] = 0x0038;
211  ((DWORD*)pbmi->bmiColors)[2] = 0x01C0;
212  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
213  TEST(hbmp != 0);
214  TEST(GetObject(hbmp, sizeof(DIBSECTION), &dibsection) == sizeof(DIBSECTION));
215  TEST(dibsection.dsBm.bmType == 0);
216  TEST(dibsection.dsBm.bmWidth == 2);
217  TEST(dibsection.dsBm.bmHeight == 2);
218  TEST(dibsection.dsBm.bmWidthBytes == 4);
219  TEST(dibsection.dsBm.bmPlanes == 1);
220  TEST(dibsection.dsBm.bmBitsPixel == 16);
221  TEST(dibsection.dsBm.bmBits == pvBits);
222  TEST(dibsection.dsBmih.biSize == sizeof(BITMAPINFOHEADER));
223  TEST(dibsection.dsBmih.biWidth == 2);
224  TEST(dibsection.dsBmih.biHeight == 2);
225  TEST(dibsection.dsBmih.biPlanes == 1);
226  TEST(dibsection.dsBmih.biBitCount == 16);
227  TEST(dibsection.dsBmih.biCompression == BI_BITFIELDS);
228  TEST(dibsection.dsBmih.biSizeImage == 8);
229  TEST(dibsection.dsBmih.biXPelsPerMeter == 0);
230  TEST(dibsection.dsBmih.biYPelsPerMeter == 0);
231  TEST(dibsection.dsBmih.biClrUsed == 0);
232  TEST(dibsection.dsBmih.biClrImportant == 0);
233  TEST(dibsection.dsBitfields[0] == 0x0007);
234  TEST(dibsection.dsBitfields[1] == 0x0038);
235  TEST(dibsection.dsBitfields[2] == 0x01C0);
236  TEST(dibsection.dshSection == 0);
237  TEST(dibsection.dsOffset == 0);
238 
239 printf("dib with bitfileds: %p\n", hbmp);
240 //system("PAUSE");
241 
242  if (hbmp) DeleteObject(hbmp);
243 
244 
245  /* Test BI_BITFIELDS */
246  SetLastError(0);
247  pvBits = 0;
248 
249  pbih->biSize = sizeof(BITMAPINFOHEADER);
250  pbih->biWidth = 2;
251  pbih->biHeight = 2;
252  pbih->biPlanes = 1;
253  pbih->biBitCount = 4;
254  pbih->biCompression = BI_RGB;
255  pbih->biSizeImage = 0;
256  pbih->biXPelsPerMeter = 100;
257  pbih->biYPelsPerMeter = 100;
258  pbih->biClrUsed = 0;
259  pbih->biClrImportant = 0;
260  ((DWORD*)pbmi->bmiColors)[0] = 0xF800;
261  ((DWORD*)pbmi->bmiColors)[1] = 0x00ff00;
262  ((DWORD*)pbmi->bmiColors)[2] = 0x0000ff;
263  cEntries = 0;
264  cjHeader = bmi.bmiHeader.biSize + cEntries * 4 + 20;
265 
266 
269  pbmi->bmiHeader.biClrUsed = 2;
271 
272  cEntries = 2;
273  cjHeader = bmi.bmiHeader.biSize + cEntries * 4 + 8;
274 
275  /* Test iUsage = 1 */
276  SetLastError(0);
277  pvBits = (PVOID)-1;
278  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 1, cjHeader, 0, 0, &pvBits);
279  TEST(pvBits == (PVOID)-1);
280  TEST(hbmp == 0);
281  TEST(GetLastError() == 0);
282  if (hbmp) DeleteObject(hbmp);
283 
284 
285 
288  /* Test iUsage = 2 */
289  SetLastError(0);
290  pvBits = (PVOID)-1;
291  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 2, cjHeader, 0, 0, &pvBits);
292  TEST(pvBits == (PVOID)-1);
293  TEST(hbmp == 0);
294  TEST(GetLastError() == 0);
295  if (hbmp) DeleteObject(hbmp);
296 
297 
300  cEntries = 0;
301  cjHeader = bmi.bmiHeader.biSize + cEntries * 4 + 8;
302 
303  /* Test iUsage = 3 */
304  SetLastError(0);
305  pvBits = (PVOID)-1;
306  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 3, cjHeader, 0, 0, &pvBits);
307  TEST(pvBits == (PVOID)-1);
308  TEST(hbmp == 0);
310  if (hbmp) DeleteObject(hbmp);
311 
312  /* Test iUsage = 3 */
313  SetLastError(0);
314  pvBits = (PVOID)-1;
315  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 3, cjHeader+4, 0, 0, &pvBits);
316  TEST(pvBits == (PVOID)-1);
317  TEST(hbmp == 0);
318  TEST(GetLastError() == 0);
319  if (hbmp) DeleteObject(hbmp);
320 
321  /* Test wrong iUsage */
322  SetLastError(0);
323  pvBits = (PVOID)-1;
324  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, -55, cjHeader, 0, 0, &pvBits);
325  TEST(pvBits == (PVOID)-1);
326  TEST(hbmp == 0);
328  if (hbmp) DeleteObject(hbmp);
329 
330  /* Test wrong iUsage and wrong cjHeader */
331  SetLastError(0);
332  pvBits = (PVOID)-1;
333  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, -55, cjHeader+4, 0, 0, &pvBits);
334  TEST(pvBits == (PVOID)-1);
335  TEST(hbmp == 0);
336  TEST(GetLastError() == 0);
337  if (hbmp) DeleteObject(hbmp);
338 
339  /* increased header size */
340  pbih->biSize = sizeof(BITMAPINFOHEADER) + 4;
341  cjHeader = pbih->biSize + cEntries * 4 + 8;
342  SetLastError(0);
343  pvBits = 0;
344  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
345  TEST(pvBits != NULL);
346  TEST(hbmp != 0);
347  TEST(GetLastError() == 8);
348  if (hbmp) DeleteObject(hbmp);
349 
350  /* increased header size */
351  pbih->biSize = sizeof(BITMAPINFOHEADER) + 2;
352  cjHeader = pbih->biSize + cEntries * 4 + 8;
353  SetLastError(0);
354  pvBits = (PVOID)-1;
355  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
356  TEST(pvBits == (PVOID)-1);
357  TEST(hbmp == 0);
358  TEST(GetLastError() == 0);
359  if (hbmp) DeleteObject(hbmp);
360 
361  /* decreased header size */
362  pbih->biSize = sizeof(BITMAPINFOHEADER) - 4;
363  cjHeader = pbih->biSize + cEntries * 4 + 8;
364  SetLastError(0);
365  pvBits = (PVOID)-1;
366  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
367  TEST(pvBits == (PVOID)-1);
368  TEST(hbmp == 0);
369  TEST(GetLastError() == 0);
370  if (hbmp) DeleteObject(hbmp);
371 
372 
375  pbV4h->bV4Size = sizeof(BITMAPV4HEADER);
376  pbV4h->bV4Width = 2;
377  pbV4h->bV4Height = 3;
378  pbV4h->bV4Planes = 1;
379  pbV4h->bV4BitCount = 1;
380  pbV4h->bV4V4Compression = BI_RGB;
381  pbV4h->bV4SizeImage = 0;
382  pbV4h->bV4XPelsPerMeter = 100;
383  pbV4h->bV4YPelsPerMeter = 100;
384  pbV4h->bV4ClrUsed = 0;
385  pbV4h->bV4ClrImportant = 0;
386  pbV4h->bV4RedMask = 0;
387  pbV4h->bV4GreenMask = 0;
388  pbV4h->bV4BlueMask = 0;
389  pbV4h->bV4AlphaMask = 0;
390  pbV4h->bV4CSType = 0;
391  memset(&pbV4h->bV4Endpoints, 0, sizeof(CIEXYZTRIPLE));
392  pbV4h->bV4GammaRed = 0;
393  pbV4h->bV4GammaGreen = 0;
394  pbV4h->bV4GammaBlue = 0;
395 
396  cEntries = 0;
397  cjHeader = bmi.bmiHeader.biSize + cEntries * 4 + 8;
398 
399  /* Test something simple */
400  SetLastError(0);
401  pvBits = 0;
402  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
403  TEST(pvBits != NULL);
404  TEST(hbmp != 0);
405  TEST(GetLastError() == 8);
406  if (hbmp) DeleteObject(hbmp);
407 
408 
411  pbV5h->bV5Size = sizeof(BITMAPV5HEADER);
412  pbV5h->bV5Width = 2;
413  pbV5h->bV5Height = 3;
414  pbV5h->bV5Planes = 1;
415  pbV5h->bV5BitCount = 1;
416  pbV5h->bV5Compression = BI_RGB;
417  pbV5h->bV5SizeImage = 0;
418  pbV5h->bV5XPelsPerMeter = 100;
419  pbV5h->bV5YPelsPerMeter = 100;
420  pbV5h->bV5ClrUsed = 2;
421  pbV5h->bV5ClrImportant = 2;
422  pbV5h->bV5RedMask = 0;
423  pbV5h->bV5GreenMask = 0;
424  pbV5h->bV5BlueMask = 0;
425  pbV5h->bV5AlphaMask = 0;
426  pbV5h->bV5CSType = 0;
427  memset(&pbV5h->bV5Endpoints, 0, sizeof(CIEXYZTRIPLE));
428  pbV5h->bV5GammaRed = 0;
429  pbV5h->bV5GammaGreen = 0;
430  pbV5h->bV5GammaBlue = 0;
431  pbV5h->bV5Intent = 0;
432  pbV5h->bV5ProfileData = 0;
433  pbV5h->bV5ProfileSize = 0;
434  pbV5h->bV5Reserved = 0;
435 
436  cEntries = 0;
437  cjHeader = pbV5h->bV5Size + cEntries * 4 + 8;
438 
439  /* Test something simple */
440  SetLastError(0);
441  pvBits = 0;
442  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
443  TEST(pvBits != NULL);
444  TEST(hbmp != 0);
445  TEST(GetLastError() == 8);
446  if (hbmp) DeleteObject(hbmp);
447 
448  /* increased header size */
449  pbV5h->bV5Size = sizeof(BITMAPV5HEADER) + 64;
450  cjHeader = pbV5h->bV5Size + cEntries * 4 + 8;
451  SetLastError(0);
452  pvBits = 0;
453  hbmp = NtGdiCreateDIBSection(hDC, NULL, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
454  TEST(pvBits != NULL);
455  TEST(hbmp != 0);
456  TEST(GetLastError() == 8);
457  if (hbmp) DeleteObject(hbmp);
458 
459  /* Test section */
460  MaximumSize.QuadPart = 4096;
463  NULL,
464  &MaximumSize,
466  SEC_COMMIT,
467  NULL);
469 
470  SetLastError(0);
471  pvBits = 0;
472  hbmp = NtGdiCreateDIBSection(hDC, hSection, 0, pbmi, 0, cjHeader, 0, 0, &pvBits);
473  TEST(pvBits != NULL);
474  TEST(hbmp != 0);
475 // TEST(GetLastError() == 0);
476  printf("hbmp = %p, pvBits = %p, hSection = %p\n", hbmp, pvBits, hSection);
477 //system("PAUSE");
478  if (hbmp) DeleteObject(hbmp);
479 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
BITMAPINFOHEADER dsBmih
Definition: wingdi.h:1655
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1461
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
Definition: section.c:3371
USHORT biBitCount
Definition: precomp.h:24
DWORD biClrImportant
Definition: amvideo.idl:40
HDC WINAPI GetDC(_In_opt_ HWND)
LONG biXPelsPerMeter
Definition: precomp.h:27
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
Definition: ntgdi.h:2780
LONG biXPelsPerMeter
Definition: amvideo.idl:37
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
LONG NTSTATUS
Definition: precomp.h:26
static HDC
Definition: imagelist.c:92
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
ULONG biCompression
Definition: precomp.h:25
LONG biYPelsPerMeter
Definition: amvideo.idl:38
#define DWORD
Definition: nt_native.h:44
#define BI_BITFIELDS
Definition: mmreg.h:507
#define SECTION_ALL_ACCESS
Definition: nt_native.h:1293
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiCreateDIBSection(_In_ HDC hdc, _In_opt_ HANDLE hSectionApp, _In_ DWORD dwOffset, _In_reads_bytes_opt_(cjHeader) LPBITMAPINFO pbmi, _In_ DWORD iUsage, _In_ UINT cjHeader, _In_ FLONG fl, _In_ ULONG_PTR dwColorSpace, _Outptr_ PVOID *ppvBits)
#define SEC_COMMIT
Definition: mmtypes.h:99
struct tagBITMAPINFOHEADER * PBITMAPINFOHEADER
DWORD biCompression
Definition: amvideo.idl:35
smooth NULL
Definition: ftsmooth.c:416
void * PVOID
Definition: retypes.h:9
DWORD dsBitfields[3]
Definition: wingdi.h:1656
HBITMAP hbmp
ULONG biClrImportant
Definition: precomp.h:30
RGBQUAD bmiColors[1]
Definition: wingdi.h:1462
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define TEST(x)
Definition: precomp.h:20
DWORD dsOffset
Definition: wingdi.h:1658
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD biSizeImage
Definition: amvideo.idl:36
#define SetLastError(x)
Definition: compat.h:409
#define GetObject
Definition: wingdi.h:4453
_In_ UINT _In_ UINT cEntries
Definition: wingdi.h:3605
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
HANDLE dshSection
Definition: wingdi.h:1657
Status
Definition: gdiplustypes.h:24
LONG biYPelsPerMeter
Definition: precomp.h:28
static HDC hDC
Definition: 3dtext.c:33
BITMAP dsBm
Definition: wingdi.h:1654
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER MaximumSize
Definition: mmfuncs.h:360
unsigned int ULONG
Definition: retypes.h:1
struct tagBITMAPINFO * PBITMAPINFO
static HBITMAP
Definition: button.c:44
#define memset(x, y, z)
Definition: compat.h:39
_In_ const BITMAPINFO _In_ UINT _In_opt_ HANDLE hSection
Definition: wingdi.h:3224
#define BI_RGB
Definition: precomp.h:34
#define printf
Definition: config.h:203
#define PAGE_READWRITE
Definition: nt_native.h:1304