ReactOS  0.4.15-dev-5452-g3c95c95
GetObject.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 GetObject
5  * PROGRAMMERS: Timo Kreuzer
6  */
7 
8 #include "precomp.h"
9 
10 #include <pseh/pseh2.h>
11 
12 #define INVALID_POINTER ((PVOID)(ULONG_PTR)0xdeadbeefdeadbeefULL)
13 
15  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
16  0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,
17  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
18  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
19  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
20  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
21  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
22  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
23 
24  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
25  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
26  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
27  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
28  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
29  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
30  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
31  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
32 };
33 
34 
35 void
37 {
38  struct
39  {
40  LOGBRUSH logbrush;
41  BYTE additional[600];
42  } TestStruct;
43  PLOGBRUSH plogbrush;
44  HBRUSH hBrush;
45  HPEN hpen;
46  INT ret;
47 
48  /* Test null pointer and invalid handles */
50  ok(GetObjectA(0, 0, NULL) == 0, "\n");
51  ok(GetObjectA((HANDLE)-1, 0, NULL) == 0, "\n");
52 
53  /* Test invalid habdles of different types */
54  ok(GetObjectA((HANDLE)0x00380000, 0, NULL) == 0, "\n");
55  ok(GetLastError() == ERROR_SUCCESS, "\n");
56  ok(GetObjectA((HANDLE)0x00380000, 10, &TestStruct) == 0, "\n");
57  ok(GetLastError() == ERROR_SUCCESS, "\n");
59  ok(GetObjectA((HANDLE)0x00010000, 0, NULL) == 0, "\n");
62  ok(GetObjectA((HANDLE)0x00020000, 0, NULL) == 0, "\n");
63  ok(GetLastError() == ERROR_SUCCESS, "\n");
65  ok(GetObjectA((HANDLE)0x00030000, 0, NULL) == 0, "\n");
66  ok(GetLastError() == ERROR_SUCCESS, "\n");
68  ok(GetObjectA((HANDLE)0x00040000, 0, NULL) == 0, "\n");
71  ok(GetObjectA((HANDLE)0x00060000, 0, NULL) == 0, "\n");
72  ok(GetLastError() == ERROR_SUCCESS, "\n");
74  ok(GetObjectA((HANDLE)0x00070000, 0, NULL) == 0, "\n");
75  ok(GetLastError() == ERROR_SUCCESS, "\n");
77  ok(GetObjectA((HANDLE)0x000B0000, 0, NULL) == 0, "\n");
78  ok(GetLastError() == ERROR_SUCCESS, "\n");
80  ok(GetObjectA((HANDLE)0x000C0000, 0, NULL) == 0, "\n");
81  ok(GetLastError() == ERROR_SUCCESS, "\n");
83  ok(GetObjectA((HANDLE)0x000D0000, 0, NULL) == 0, "\n");
84  ok(GetLastError() == ERROR_SUCCESS, "\n");
86  ok(GetObjectA((HANDLE)0x000E0000, 0, NULL) == 0, "\n");
87  ok(GetLastError() == ERROR_SUCCESS, "\n");
89  ok(GetObjectA((HANDLE)0x000F0000, 0, NULL) == 0, "\n");
90  ok(GetLastError() == ERROR_SUCCESS, "\n");
92  ok(GetObjectA((HANDLE)0x00110000, 0, NULL) == 0, "\n");
93  ok(GetLastError() == ERROR_SUCCESS, "\n");
95  ok(GetObjectA((HANDLE)0x00120000, 0, NULL) == 0, "\n");
96  ok(GetLastError() == ERROR_SUCCESS, "\n");
98  ok(GetObjectA((HANDLE)0x00130000, 0, NULL) == 0, "\n");
99  ok(GetLastError() == ERROR_SUCCESS, "\n");
101  ok(GetObjectA((HANDLE)0x00140000, 0, NULL) == 0, "\n");
102  ok(GetLastError() == ERROR_SUCCESS, "\n");
104  ok(GetObjectA((HANDLE)0x00150000, 0, NULL) == 0, "\n");
105  ok(GetLastError() == ERROR_SUCCESS, "\n");
107  ok(GetObjectA((HANDLE)0x00160000, 0, NULL) == 0, "\n");
108  ok(GetLastError() == ERROR_SUCCESS, "\n");
110  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0, "\n");
113  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0, "\n");
116  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0, "\n");
119  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0, "\n");
122  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0, "\n");
125  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0, "\n");
139 
140  /* Test need of alignment */
142  hBrush = GetStockObject(WHITE_BRUSH);
143  plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush);
144  ok(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH), "\n");
145  plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 2);
146  ok(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH), "\n");
147  plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 1);
148  //ok(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == 0, "\n"); // fails on win7
149 
150  /* Test invalid buffer */
151  SetLastError(0xbadbad00);
153  ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_NOACCESS), "wrong error: %ld\n", GetLastError());
154  SetLastError(0xbadbad00);
156  ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_NOACCESS), "wrong error: %ld\n", GetLastError());
157  SetLastError(0xbadbad00);
158  ok(GetObjectW(GetStockObject(21), sizeof(BITMAP), INVALID_POINTER) == 0, "\n");
159  ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_NOACCESS), "wrong error: %ld\n", GetLastError());
160  SetLastError(0xbadbad00);
162  ok(GetLastError() == 0xbadbad00, "wrong error: %ld\n", GetLastError());
164  _SEH2_TRY
165  {
167  }
169  {
170  ret = -1;
171  }
172  _SEH2_END
173  ok(ret == -1, "should have got an exception\n");
174 
175  ok(GetObjectW(GetStockObject(SYSTEM_FONT), 0x50000000, &TestStruct) == 356, "\n");
176  ok(GetObjectW(GetStockObject(WHITE_BRUSH), 0x50000000, &TestStruct) == sizeof(LOGBRUSH), "\n");
177 
178 
179  /* Test buffer size of 0 */
180  SetLastError(0xbadbad00);
181  hBrush = CreateSolidBrush(123);
182  ok(hBrush != NULL, "Failed to create brush\n");
183  ok_long(GetObjectA(hBrush, 0, &TestStruct), 0);
184  ok_err(0xbadbad00);
185  DeleteObject(hBrush);
186  SetLastError(0xbadbad00);
187  hpen = CreatePen(PS_SOLID, 1, 123);
188  ok(hpen != NULL, "Failed to create pen\n");
189  ok_long(GetObjectA(hpen, 0, &TestStruct), 0);
190  ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_NOACCESS), "wrong error: %ld\n", GetLastError());
191  SetLastError(0xbadbad00);
192  TestStruct.logbrush.lbStyle = BS_SOLID;
193  TestStruct.logbrush.lbColor = RGB(1,2,3);
194  TestStruct.logbrush.lbHatch = 0;
195  hpen = ExtCreatePen(PS_GEOMETRIC | PS_SOLID, 1, &TestStruct.logbrush, 0, NULL);
196  ok(hpen != NULL, "Failed to create pen\n");
197  ok_long(GetObjectA(hpen, 0, &TestStruct), 0);
198  ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_NOACCESS), "wrong error: %ld\n", GetLastError());
199  SetLastError(0xbadbad00);
201  ok_err(0xbadbad00);
202  SetLastError(0xbadbad00);
203  ok(GetObjectW(GetStockObject(21), 0, &TestStruct) == 0, "\n");
204  ok_err(0xbadbad00);
205 
206 }
207 
208 void
210 {
212  BITMAP bitmap;
213  DIBSECTION dibsection;
214  BYTE bData[100] = {0};
215  BYTE Buffer[100] = {48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0};
216 
217  FillMemory(&bitmap, sizeof(BITMAP), 0x77);
218  hBitmap = CreateBitmap(10,10,1,8,bData);
219  ok(hBitmap != 0, "CreateBitmap failed, skipping tests.\n");
220  if (!hBitmap) return;
221 
223  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP), "\n");
224  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP), "\n");
225  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, sizeof(BITMAP), NULL) == sizeof(BITMAP), "\n");
226  ok(GetLastError() == ERROR_SUCCESS, "\n");
227  ok(GetObjectA(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP), "\n");
228  ok(GetObjectA(hBitmap, 0, NULL) == sizeof(BITMAP), "\n");
229  ok(GetObjectA((HANDLE)((UINT_PTR)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP), "\n");
230  ok(GetObjectW((HANDLE)((UINT_PTR)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP), "\n");
231  ok(GetLastError() == ERROR_SUCCESS, "\n");
232  ok(GetObjectA(hBitmap, 5, NULL) == sizeof(BITMAP), "\n");
233  ok(GetObjectA(hBitmap, -5, NULL) == sizeof(BITMAP), "\n");
234  ok(GetObjectA(hBitmap, 0, Buffer) == 0, "\n");
235  ok(GetObjectA(hBitmap, 5, Buffer) == 0, "\n");
236  ok(GetLastError() == ERROR_SUCCESS, "\n");
237  ok(GetObjectA(hBitmap, sizeof(BITMAP), &bitmap) == sizeof(BITMAP), "\n");
238  ok(GetObjectA(hBitmap, sizeof(BITMAP)+2, &bitmap) == sizeof(BITMAP), "\n");
239  ok(GetObjectA(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(BITMAP), "\n");
240  ok(GetObjectA(hBitmap, -5, &bitmap) == sizeof(BITMAP), "\n");
241  ok(GetLastError() == ERROR_SUCCESS, "\n");
242  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, sizeof(BITMAP), &bitmap) == 0, "\n");
243  ok(GetLastError() == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", GetLastError());
244 
245  // todo: test invalid handle + buffer
246 
248 }
249 
250 void
252 {
253  BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER), 10, 9, 1, 16, BI_RGB, 0, 10, 10, 0,0}};
255  BITMAP bitmap;
256  DIBSECTION dibsection;
257  PVOID pData;
258  HDC hDC;
259 
260  FillMemory(&dibsection, sizeof(DIBSECTION), 0x77);
261  hDC = GetDC(0);
263  ok(hBitmap != 0, "CreateDIBSection failed with %ld, skipping tests.\n", GetLastError());
264  if (!hBitmap) return;
265 
266  ok(GetObjectA((HANDLE)((UINT_PTR)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP), "\n");
267  ok(GetObjectW((HANDLE)((UINT_PTR)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP), "\n");
268 
270  ok_long(GetObject(hBitmap, sizeof(DIBSECTION), NULL), sizeof(BITMAP));
271  ok_long(GetObject(hBitmap, 0, NULL), sizeof(BITMAP));
272  ok_long(GetObject(hBitmap, 5, NULL), sizeof(BITMAP));
273  ok_long(GetObject(hBitmap, -5, NULL), sizeof(BITMAP));
274  ok_long(GetObject(hBitmap, 0, &dibsection), 0);
275  ok_long(GetObject(hBitmap, 5, &dibsection), 0);
276  ok_long(GetObject(hBitmap, sizeof(BITMAP), &bitmap), sizeof(BITMAP));
277  ok_long(GetObject(hBitmap, sizeof(BITMAP)+2, &bitmap), sizeof(BITMAP));
278  ok_long(bitmap.bmType, 0);
279  ok_long(bitmap.bmWidth, 10);
280  ok_long(bitmap.bmHeight, 9);
281  ok_long(bitmap.bmWidthBytes, 20);
282  ok_long(bitmap.bmPlanes, 1);
283  ok_long(bitmap.bmBitsPixel, 16);
284  ok(bitmap.bmBits == pData, "\n");
285  ok_long(GetObject(hBitmap, sizeof(DIBSECTION), &dibsection), sizeof(DIBSECTION));
286  ok_long(GetObject(hBitmap, sizeof(DIBSECTION)+2, &dibsection), sizeof(DIBSECTION));
287  ok_long(GetObject(hBitmap, -5, &dibsection), sizeof(DIBSECTION));
290  ReleaseDC(0, hDC);
291 }
292 
293 void
295 {
296  LOGPALETTE logpal;
297  HPALETTE hPalette;
298  WORD wPalette;
299 
300  FillMemory(&wPalette, sizeof(WORD), 0x77);
301  logpal.palVersion = 0x0300;
302  logpal.palNumEntries = 1;
303  logpal.palPalEntry[0].peRed = 0;
304  logpal.palPalEntry[0].peGreen = 0;
305  logpal.palPalEntry[0].peBlue = 0;
306  logpal.palPalEntry[0].peFlags = PC_EXPLICIT;
307  hPalette = CreatePalette(&logpal);
308  ok(hPalette != 0, "CreatePalette failed, skipping tests.\n");
309  if (!hPalette) return;
310 
311  ok(GetObjectA((HANDLE)((UINT_PTR)hPalette & 0x0000ffff), 0, NULL) == sizeof(WORD), "\n");
312  ok(GetObjectW((HANDLE)((UINT_PTR)hPalette & 0x0000ffff), 0, NULL) == sizeof(WORD), "\n");
313 
315  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD), "\n");
316  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD), "\n");
317  ok(GetObject(hPalette, sizeof(WORD), NULL) == sizeof(WORD), "\n");
318  ok(GetObject(hPalette, 0, NULL) == sizeof(WORD), "\n");
319  ok(GetObject(hPalette, 5, NULL) == sizeof(WORD), "\n");
320  ok(GetObject(hPalette, -5, NULL) == sizeof(WORD), "\n");
321  ok(GetObject(hPalette, sizeof(WORD), &wPalette) == sizeof(WORD), "\n");
322  ok(GetObject(hPalette, sizeof(WORD)+2, &wPalette) == sizeof(WORD), "\n");
323  ok(GetObject(hPalette, 0, &wPalette) == 0, "\n");
324  ok(GetObject(hPalette, 1, &wPalette) == 0, "\n");
325  ok(GetObject(hPalette, -1, &wPalette) == sizeof(WORD), "\n");
326  ok(GetLastError() == ERROR_SUCCESS, "\n");
327  DeleteObject(hPalette);
328  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PALETTE, sizeof(WORD), &wPalette) == 0, "\n");
329  ok(GetLastError() == ERROR_SUCCESS, "\n");
330 
331 }
332 
333 void
335 {
336  LOGBRUSH logbrush;
337  HBRUSH hBrush;
338 
339  FillMemory(&logbrush, sizeof(LOGBRUSH), 0x77);
340  hBrush = CreateSolidBrush(RGB(1,2,3));
341  ok(hBrush != 0, "CreateSolidBrush failed, skipping tests.\n");
342  if (!hBrush) return;
343 
345  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH), "\n");
346  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH), "\n");
347  ok(GetObject(hBrush, sizeof(WORD), NULL) == sizeof(LOGBRUSH), "\n");
348  ok(GetObject(hBrush, 0, NULL) == sizeof(LOGBRUSH), "\n");
349  ok(GetObject(hBrush, 5, NULL) == sizeof(LOGBRUSH), "\n");
350  ok(GetObject(hBrush, -5, NULL) == sizeof(LOGBRUSH), "\n");
351 
352  //ok(GetObject(hBrush, 0, &logbrush) == 0, "\n"); fails on win7
353  ok(logbrush.lbStyle == 0x77777777, "\n");
354  ok(GetObject(hBrush, 5, &logbrush) == sizeof(LOGBRUSH), "\n");
355  ok(logbrush.lbStyle == 0, "\n");
356  ok(logbrush.lbColor == 0x77777701, "\n");
357 
358  ok(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH), "\n");
359  ok(GetObject(hBrush, sizeof(LOGBRUSH) - 1, &logbrush) == sizeof(LOGBRUSH), "\n");
360  ok(GetObject(hBrush, 1, &logbrush) == sizeof(LOGBRUSH), "\n");
361  ok(GetObject(hBrush, sizeof(LOGBRUSH)+2, &logbrush) == sizeof(LOGBRUSH), "\n");
362  ok(GetObject(hBrush, -1, &logbrush) == sizeof(LOGBRUSH), "\n");
363  // TODO: test all members
364 
365  ok(GetLastError() == ERROR_SUCCESS, "\n");
366  DeleteObject(hBrush);
367 
368  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BRUSH, sizeof(LOGBRUSH), &logbrush) == 0, "\n");
369  ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError());
370 
371  /* Test handle fixup */
372  hBrush = (HBRUSH)((ULONG_PTR)GetStockObject(WHITE_BRUSH) & 0xFFFF);
373  ok(GetObjectW(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH),
374  "GetObject(0x%p, ...) failed.\n", hBrush);
375 
376 #ifdef _WIN64
377  /* Test upper 32 bits */
378  hBrush = (HBRUSH)((ULONG64)GetStockObject(WHITE_BRUSH) | 0xFFFFFFFF00000000ULL);
379  ok(GetObjectW(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH),
380  "GetObject(0x%p, ...) failed.\n", hBrush);
381  hBrush = (HBRUSH)((ULONG64)GetStockObject(WHITE_BRUSH) | 0x537F9F2F00000000ULL);
382  ok(GetObjectW(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH),
383  "GetObject(0x%p, ...) failed.\n", hBrush);
384 #endif
385 }
386 
387 void
389 {
390  struct
391  {
392  BITMAPINFOHEADER bmiHeader;
393  WORD wColors[4];
394  BYTE jBuffer[16];
395  } PackedDIB =
396  {
397  {sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RGB, 0, 1, 1, 4, 0},
398  {1, 7, 3, 1},
399  {0,1,2,3, 1,2,3,0, 2,3,0,1, 3,0,1,2},
400  };
401  LOGBRUSH logbrush;
402  HBRUSH hBrush;
403 
404  /* Create a DIB brush */
405  hBrush = CreateDIBPatternBrushPt(&PackedDIB, DIB_PAL_COLORS);
406  ok(hBrush != 0, "CreateSolidBrush failed, skipping tests.\n");
407  if (!hBrush) return;
408 
409  FillMemory(&logbrush, sizeof(LOGBRUSH), 0x77);
411 
412  ok_long(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush), sizeof(LOGBRUSH));
413  ok_long(logbrush.lbStyle, BS_DIBPATTERN);
414  ok_long(logbrush.lbColor, 0);
415  ok_long(logbrush.lbHatch, (ULONG_PTR)&PackedDIB);
416 
418  DeleteObject(hBrush);
419 
420 
421  /* Create a DIB brush with undocumented iUsage 2 */
422  hBrush = CreateDIBPatternBrushPt(&PackedDIB, 2);
423  ok(hBrush != 0, "CreateSolidBrush failed, skipping tests.\n");
424  if (!hBrush) return;
425 
426  FillMemory(&logbrush, sizeof(LOGBRUSH), 0x77);
428 
429  ok_long(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush), sizeof(LOGBRUSH));
430  ok_long(logbrush.lbStyle, BS_DIBPATTERN);
431  ok_long(logbrush.lbColor, 0);
432  ok_long(logbrush.lbHatch, (ULONG_PTR)&PackedDIB);
433 
435  DeleteObject(hBrush);
436 
437 }
438 
439 void
440 Test_Pen(void)
441 {
442  LOGPEN logpen;
443  HPEN hPen;
444 
445  FillMemory(&logpen, sizeof(LOGPEN), 0x77);
446  hPen = CreatePen(PS_SOLID, 3, RGB(4,5,6));
447  ok(hPen != 0, "CreatePen failed, skipping tests.\n");
448  if (!hPen) return;
450  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN), "\n");
451  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN), "\n");
452  ok(GetObject(hPen, sizeof(BITMAP), NULL) == sizeof(LOGPEN), "\n");
453  ok(GetObject(hPen, 0, NULL) == sizeof(LOGPEN), "\n");
454  ok(GetObject(hPen, 5, NULL) == sizeof(LOGPEN), "\n");
455  ok(GetObject(hPen, -5, NULL) == sizeof(LOGPEN), "\n");
456  ok(GetObject(hPen, sizeof(LOGPEN), &logpen) == sizeof(LOGPEN), "\n");
457  ok(GetObject(hPen, sizeof(LOGPEN)-1, &logpen) == 0, "\n");
458  ok(GetObject(hPen, sizeof(LOGPEN)+2, &logpen) == sizeof(LOGPEN), "\n");
459  ok(GetObject(hPen, 0, &logpen) == 0, "\n");
460  ok(GetObject(hPen, -5, &logpen) == sizeof(LOGPEN), "\n");
461  //ok(GetLastError() == ERROR_SUCCESS, "\n"); fails on win7
462 
463  /* test if the fields are filled correctly */
464  ok(logpen.lopnStyle == PS_SOLID, "\n");
465 
466  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PEN, sizeof(LOGPEN), &logpen) == 0, "\n");
467  ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError());
468 
469  DeleteObject(hPen);
470 }
471 
472 void
474 {
475  HPEN hPen;
476  EXTLOGPEN extlogpen;
477  LOGBRUSH logbrush;
478  DWORD dwStyles[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
479  struct
480  {
481  EXTLOGPEN extlogpen;
482  DWORD dwStyles[50];
483  } elpUserStyle;
484  int i;
485 
487  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0, "\n");
490  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0, "\n");
492 
493  FillMemory(&extlogpen, sizeof(EXTLOGPEN), 0x77);
494  logbrush.lbStyle = BS_SOLID;
495  logbrush.lbColor = RGB(1,2,3);
496  logbrush.lbHatch = 22;
497  hPen = ExtCreatePen(PS_GEOMETRIC | PS_DASH, 5, &logbrush, 0, NULL);
498 
501  ok(GetObject(hPen, sizeof(EXTLOGPEN), NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
502  ok(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
503  ok(GetObject((HANDLE)GDI_HANDLE_GET_INDEX(hPen), 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
504  ok(GetObject(hPen, 5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
505  ok(GetObject(hPen, -5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
506  ok(GetLastError() == ERROR_SUCCESS, "\n");
507  ok(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0, "\n");
508  ok(GetLastError() == ERROR_INVALID_PARAMETER, "got %ld\n", GetLastError());
509  SetLastError(0xbadbad00);
510  ok(GetObject(hPen, 0, &extlogpen) == 0, "\n");
511  ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_NOACCESS), "wrong error: %ld\n", GetLastError());
513  ok(GetObject(hPen, 4, &extlogpen) == 0, "\n");
514  ok(GetLastError() == ERROR_SUCCESS, "got %ld\n", GetLastError());
516  ok(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, &extlogpen) == 0, "\n");
517  ok(GetLastError() == ERROR_INVALID_PARAMETER, "got %ld\n", GetLastError());
519  ok(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 4, &extlogpen) == 0, "\n");
520  ok(GetLastError() == ERROR_INVALID_PARAMETER, "got %ld\n", GetLastError());
522  ok(GetObject(hPen, sizeof(EXTLOGPEN) - 5, &extlogpen) == 0, "\n");
523  ok(GetLastError() == ERROR_SUCCESS, "got %ld\n", GetLastError());
524 
525  /* Nothing should be filled */
526  ok(extlogpen.elpPenStyle == 0x77777777, "\n");
527  ok(extlogpen.elpWidth == 0x77777777, "\n");
528 
529  ok(GetObject(hPen, sizeof(EXTLOGPEN), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
530  ok(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
531  ok(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD)-1, &extlogpen) == 0, "\n");
532  ok(GetObject(hPen, sizeof(EXTLOGPEN)+2, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
533  ok(GetObject(hPen, -5, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD), "\n");
534 
535  /* test if the fields are filled correctly */
536  ok(extlogpen.elpPenStyle == (PS_GEOMETRIC | PS_DASH), "\n");
537  ok(extlogpen.elpWidth == 5, "\n");
538  ok(extlogpen.elpBrushStyle == 0, "\n");
539  ok(extlogpen.elpColor == RGB(1,2,3), "\n");
540  ok(extlogpen.elpHatch == 22, "\n");
541  ok(extlogpen.elpNumEntries == 0, "\n");
542  DeleteObject(hPen);
543 
544  /* A maximum of 16 Styles is allowed */
545  hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles);
546  ok(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD), "\n");
547  ok(GetObject(hPen, sizeof(EXTLOGPEN) + 15*sizeof(DWORD), &elpUserStyle) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD), "\n");
548  for (i = 0; i <= 15; i++)
549  ok(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[i] == i, "%d\n", i);
550  DeleteObject(hPen);
551 }
552 
553 void
555 {
556  HFONT hFont;
557  union
558  {
559  LOGFONTA logfonta;
560  LOGFONTW logfontw;
561  EXTLOGFONTA extlogfonta;
562  EXTLOGFONTW extlogfontw;
563  ENUMLOGFONTEXA enumlogfontexa;
564  ENUMLOGFONTEXW enumlogfontexw;
565  ENUMLOGFONTEXDVA enumlogfontexdva;
566  ENUMLOGFONTEXDVW enumlogfontexdvw;
567  ENUMLOGFONTA enumlogfonta;
568  ENUMLOGFONTW enumlogfontw;
569  BYTE bData[270];
570  } u;
571  int ret;
572 
573  FillMemory(&u, sizeof(u), 0x77);
574  hFont = CreateFontA(8, 8, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
576  ANTIALIASED_QUALITY, DEFAULT_PITCH, "testfont");
577  ok(hFont != 0, "\n");
578 
580  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTA), "\n");
581  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTW), "\n");
582  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA), "\n"); // 60
583  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTA), NULL) == sizeof(LOGFONTA), "\n"); // 156
584  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXA), NULL) == sizeof(LOGFONTA), "\n"); // 188
585  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTA), NULL) == sizeof(LOGFONTA), "\n"); // 192
586  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA), NULL) == sizeof(LOGFONTA), "\n"); // 260
587  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA)+1, NULL) == sizeof(LOGFONTA), "\n"); // 260
588  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW), "\n"); // 92
589  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTW), NULL) == sizeof(LOGFONTW), "\n"); // 284
590  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTW), NULL) == sizeof(LOGFONTW), "\n"); // 320
591  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXW), NULL) == sizeof(LOGFONTW), "\n"); // 348
592  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW), NULL) == sizeof(LOGFONTW), "\n"); // 420
593  ok(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW)+1, NULL) == sizeof(LOGFONTW), "\n"); // 356!
594  ok(GetLastError() == ERROR_SUCCESS, "got %ld\n", GetLastError());
595 
596  ok(GetObjectA(hFont, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA), "\n");
597  ok(GetObjectA(hFont, 0, NULL) == sizeof(LOGFONTA), "\n");
598  ok(GetObjectA(hFont, 5, NULL) == sizeof(LOGFONTA), "\n");
599  ok(GetObjectA(hFont, -5, NULL) == sizeof(LOGFONTA), "\n");
600  ok(GetObjectA(hFont, 0, &u.logfonta) == 0, "\n");
601  ok(u.logfonta.lfHeight == 0x77777777, "\n");
602 
603  ok(GetObjectA(hFont, 5, &u.logfonta) == 5, "\n");
604  ok(u.logfonta.lfHeight == 8, "\n");
605  ok(u.logfonta.lfWidth == 0x77777708, "\n");
606 
607  ok(GetObjectA(hFont, 0, &u.logfonta) == 0, "\n");
608  ok(GetObjectA(hFont, -1, &u.logfonta) == sizeof(ENUMLOGFONTEXDVA), "\n");
609  ok(GetObjectA(hFont, 1, &u.logfonta) == 1, "\n"); // 1 -> 1
610  ok(GetObjectA(hFont, sizeof(LOGFONTA) - 1, &u.logfonta) == sizeof(LOGFONTA) - 1, "\n"); // 59 -> 59
611  ok(GetObjectA(hFont, sizeof(LOGFONTA), &u.logfonta) == sizeof(LOGFONTA), "\n"); // 60 -> 60
612  ok(GetObjectA(hFont, sizeof(LOGFONTA) + 1, &u.logfonta) == sizeof(LOGFONTA) + 1, "\n"); // 61 -> 61
613  ok(GetObjectA(hFont, sizeof(LOGFONTW) - 1, &u.logfontw) == sizeof(LOGFONTW) - 1, "\n"); // 91 -> 91
614  ok(GetObjectA(hFont, sizeof(LOGFONTW), &u.logfontw) == sizeof(LOGFONTA), "\n"); // 92 -> 60
615  ok(GetObjectA(hFont, sizeof(LOGFONTW) + 1, &u.logfontw) == sizeof(LOGFONTW) + 1, "\n"); // 93 -> 93
616  ok(GetObjectA(hFont, sizeof(EXTLOGFONTA), &u.extlogfonta) == sizeof(EXTLOGFONTA), "\n"); // 192 -> 192
617  ok(GetObjectA(hFont, sizeof(EXTLOGFONTA)+1, &u.extlogfonta) == sizeof(EXTLOGFONTA)+1, "\n"); // 192+1 -> 192+1
618  ok(GetObjectA(hFont, sizeof(EXTLOGFONTA)+16*4, &u.extlogfonta) == sizeof(EXTLOGFONTA)+16*4, "\n"); // 192+1 -> 192+1
619  ok(GetObjectA(hFont, sizeof(EXTLOGFONTW), &u.extlogfontw) == sizeof(ENUMLOGFONTEXDVA), "\n"); // 320 -> 260
620  ok(GetObjectA(hFont, 261, &u.bData) == 260, "\n"); // no
621 
622  ok(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA) - 1, &u.enumlogfontexdvw) == sizeof(ENUMLOGFONTEXDVA) - 1, "\n"); // 419
623  ok(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA), &u.enumlogfontexdvw) == sizeof(ENUMLOGFONTEXDVA), "\n"); // 420
624  ok(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA)+1, &u.enumlogfontexdvw) == sizeof(ENUMLOGFONTEXDVA), "\n"); // 356!
625 
626  /* LOGFONT / GetObjectW */
627  FillMemory(&u.logfontw, sizeof(LOGFONTW), 0x77);
628 
629  ok(GetObjectW(hFont, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW), "1\n");
630  ok(GetObjectW(hFont, 0, NULL) == sizeof(LOGFONTW), "\n");
631  ok(GetObjectW(hFont, 5, NULL) == sizeof(LOGFONTW), "\n");
632  ok(GetObjectW(hFont, sizeof(ENUMLOGFONTEXA), NULL) == sizeof(LOGFONTW), "\n");
633  ok(GetObjectW(hFont, -5, NULL) == sizeof(LOGFONTW), "\n");
634  ok(GetObjectW(hFont, 0, &u.logfontw) == 0, "\n");
635  ok(u.logfontw.lfHeight == 0x77777777, "\n");
636 
637  ok(GetObjectW(hFont, 5, &u.logfontw) == 5, "\n");
638  ok(u.logfontw.lfHeight == 8, "\n");
639  ok(u.logfontw.lfWidth == 0x77777708, "\n");
640 
641  ok(GetObjectA(hFont, sizeof(LOGFONTA), &u.logfonta) == sizeof(LOGFONTA), "\n"); // 60
642  ok(u.logfonta.lfHeight == 8, "\n");
643  ok(GetObjectA(hFont, sizeof(ENUMLOGFONTA), &u.enumlogfonta) == sizeof(ENUMLOGFONTA), "\n"); // 156
644  ok(GetObjectA(hFont, sizeof(ENUMLOGFONTEXA), &u.enumlogfontexa) == sizeof(ENUMLOGFONTEXA), "\n"); // 188
645  ok(GetObjectA(hFont, sizeof(EXTLOGFONTA), &u.extlogfonta) == sizeof(EXTLOGFONTA), "\n"); // 192
646  ok(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA), &u.enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA), "\n"); // 260
647  ok(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA)+1, &u.enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA), "\n"); // 260
648 
649  ok(GetObjectW(hFont, sizeof(LOGFONTW), &u.logfontw) == sizeof(LOGFONTW), "\n"); // 92
650  ok(GetObjectW(hFont, sizeof(LOGFONTW) + 1, &u.logfontw) == sizeof(LOGFONTW) + 1, "\n"); // 92
651  ok(GetObjectW(hFont, sizeof(LOGFONTW) - 1, &u.logfontw) == sizeof(LOGFONTW) - 1, "\n"); // 92
652  ok(GetObjectW(hFont, sizeof(ENUMLOGFONTW), &u.enumlogfontw) == sizeof(ENUMLOGFONTW), "\n"); // 284
653  ok(GetObjectW(hFont, sizeof(EXTLOGFONTW), &u.extlogfontw) == sizeof(EXTLOGFONTW), "\n"); // 320
654  ok(GetObjectW(hFont, sizeof(ENUMLOGFONTEXW), &u.enumlogfontexw) == sizeof(ENUMLOGFONTEXW), "\n"); // 348
655  ok(GetObjectW(hFont, sizeof(ENUMLOGFONTEXW) + 1, &u.enumlogfontexw) == sizeof(ENUMLOGFONTEXW) + 1, "\n"); // 348
656  ok(GetObjectW(hFont, 355, &u.enumlogfontexdvw) == 355, "\n"); // 419
657 
658  ok(GetObjectW(hFont, 356, &u.enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n"); // 419
659  ret = sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD);
660  ret = GetObjectW(hFont, 357, &u.enumlogfontexdvw);
661  ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n");
662  ok(GetObjectW(hFont, 357, &u.enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n"); // 419
663  ok(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW) - 1, &u.enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n"); // 419
664  ok(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW), &u.enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n"); // 420
665  ok(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW)+1, &u.enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n"); // 356!
666  ok(GetLastError() == ERROR_SUCCESS, "got %ld\n", GetLastError());
667 
669 }
670 
671 void
673 {
674  UCHAR buffer[1000];
675 
678  //ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 60, "\n");// FIXME: what structure? fails on win7
688 
689  //ok_long(GetObjectA((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 328, NULL), 0); // FIXME: fails on WHS
690  //ok_err(ERROR_INSUFFICIENT_BUFFER);
691 }
692 
693 void
695 {
696  /* Windows does not SetLastError() on a metadc, but it doesn't seem to do anything with it */
697  HDC hMetaDC;
698  BYTE buffer[1000];
699 
700  hMetaDC = CreateMetaFile(NULL);
701  ok(hMetaDC != 0, "CreateMetaFile failed, skipping tests.\n");
702  if(!hMetaDC) return;
703 
705 
707  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 0, NULL) == 0, "\n");
708  ok(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 100, &buffer) == 0, "\n");
709  ok(GetObjectA(hMetaDC, 0, NULL) == 0, "\n");
710  ok(GetObjectA(hMetaDC, 1000, &buffer) == 0, "\n");
711  ok(GetLastError() == ERROR_SUCCESS, "got %ld\n", GetLastError());
712 }
713 
714 void
716 {
717  HRGN hRgn;
718  hRgn = CreateRectRgn(0,0,5,5);
720  ok(GetObjectW(hRgn, 0, NULL) == 0, "\n");
723 }
724 
726 {
727  BITMAP bmp;
728  HBITMAP hbmMask;
729  CURSORINFO CursorInfo;
730 
731  /* On XP sp3 GetObject reports a 32x32 bitmap. */
732  hbmMask = CreateBitmap(32, 64, 1, 1, src_mask);
733  GetObjectW(hbmMask, sizeof(BITMAP), &bmp);
734  ok(bmp.bmWidth == (bmp.bmHeight / 2), "ERR UNICODE CursorIcon RECT got %ldx%ld\n", bmp.bmWidth, bmp.bmHeight);
735  ok(bmp.bmHeight == 64, "ERR UNICODE CursorIcon Height got %ld\n", bmp.bmHeight);
736  DeleteObject(hbmMask);
737 
738  CursorInfo.cbSize = sizeof(CURSORINFO);
739  GetCursorInfo(&CursorInfo);
740  ok(CursorInfo.hCursor != NULL, "Invalid HCURSOR Handler\n");
741  ok(CursorInfo.flags != 0, "Mouse cursor is hidden\n");
742  GetObject(CursorInfo.hCursor, sizeof(BITMAP), &bmp);
743  ok(bmp.bmWidth == bmp.bmHeight / 2, "ERR CursorIcon RECT got %ldx%ld\n", bmp.bmWidth, bmp.bmHeight);
744  ok(bmp.bmHeight == 64, "ERR CursorIcon Height got %ld\n", bmp.bmHeight);
745 }
746 
748 {
749 
750  Test_Font();
751  Test_Colorspace();
752  Test_General();
753  Test_Bitmap();
754  Test_Dibsection();
755  Test_Palette();
756  Test_Brush();
757  Test_DIBBrush();
758  Test_Pen();
759  Test_ExtPen(); // not implemented yet in ROS
760  Test_MetaDC();
761  Test_Region();
762  Test_CursorIcon();
763 }
764 
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
HGDIOBJ WINAPI GetStockObject(_In_ int)
_SEH2_TRY
Definition: create.c:4226
int WINAPI GetObjectA(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
COLORREF elpColor
Definition: wingdi.h:1945
#define GDI_HANDLE_GET_INDEX(h)
Definition: gdi.h:28
struct tagENUMLOGFONTEXW ENUMLOGFONTEXW
void Test_Dibsection(void)
Definition: GetObject.c:251
#define ANTIALIASED_QUALITY
Definition: wingdi.h:440
#define BS_DIBPATTERN
Definition: wingdi.h:1092
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD elpWidth
Definition: wingdi.h:1943
#define RGB(r, g, b)
Definition: precomp.h:62
#define DIB_PAL_COLORS
Definition: wingdi.h:366
UINT lbStyle
Definition: wingdi.h:1747
HDC WINAPI GetDC(_In_opt_ HWND)
#define GDI_OBJECT_TYPE_ENHMETAFILE
Definition: gdi.h:59
void Test_Colorspace(void)
Definition: GetObject.c:672
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
ULONG_PTR lbHatch
Definition: wingdi.h:1749
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
static HDC
Definition: imagelist.c:92
void Test_General(void)
Definition: GetObject.c:36
void Test_Region(void)
Definition: GetObject.c:715
struct tagCURSORINFO CURSORINFO
static HRGN hRgn
Definition: mapping.c:33
void Test_ExtPen(void)
Definition: GetObject.c:473
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
GLuint buffer
Definition: glext.h:5915
#define WHITE_BRUSH
Definition: wingdi.h:902
#define GDI_OBJECT_TYPE_REGION
Definition: gdi.h:47
#define OUT_CHARACTER_PRECIS
Definition: wingdi.h:417
static HPEN hpen
_SEH2_END
Definition: create.c:4400
#define ok_long(expression, result)
Definition: atltest.h:133
#define PS_GEOMETRIC
Definition: wingdi.h:583
ULONG_PTR elpHatch
Definition: wingdi.h:1946
int32_t INT
Definition: typedefs.h:58
HFONT hFont
Definition: main.c:53
#define GDI_OBJECT_TYPE_EXTPEN
Definition: gdi.h:55
DWORD elpNumEntries
Definition: wingdi.h:1947
uint32_t ULONG_PTR
Definition: typedefs.h:65
WORD palVersion
Definition: wingdi.h:1833
#define GDI_OBJECT_TYPE_COLORSPACE
Definition: gdi.h:56
#define PS_SOLID
Definition: wingdi.h:586
#define ERROR_NOACCESS
Definition: winerror.h:578
void Test_Palette(void)
Definition: GetObject.c:294
#define FALSE
Definition: types.h:117
#define GDI_OBJECT_TYPE_BRUSH
Definition: gdi.h:52
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
DWORD elpPenStyle
Definition: wingdi.h:1942
UINT lopnStyle
Definition: wingdi.h:1845
#define CLIP_CHARACTER_PRECIS
Definition: wingdi.h:427
#define SYSTEM_FONT
Definition: wingdi.h:911
void Test_Pen(void)
Definition: GetObject.c:440
Definition: bufpool.h:45
void * PVOID
Definition: retypes.h:9
#define GDI_OBJECT_TYPE_PALETTE
Definition: gdi.h:49
#define ULL(a, b)
Definition: format_msg.c:27
BOOL WINAPI GetCursorInfo(_Inout_ PCURSORINFO)
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
Definition: uimain.c:88
#define DEFAULT_PITCH
Definition: wingdi.h:443
#define GDI_OBJECT_TYPE_PEN
Definition: gdi.h:54
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
HPALETTE WINAPI CreatePalette(_In_reads_(_Inexpressible_(2 *sizeof(WORD)+plpal->palNumEntries *sizeof(PALETTEENTRY))) const LOGPALETTE *)
COLORREF lbColor
Definition: wingdi.h:1748
void Test_CursorIcon()
Definition: GetObject.c:725
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:752
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define GDI_OBJECT_TYPE_METADC
Definition: gdi.h:57
#define GetObject
Definition: wingdi.h:4468
BITMAP bmp
Definition: alphablend.c:62
unsigned __int64 ULONG64
Definition: imports.h:198
unsigned char UCHAR
Definition: xmlstorage.h:181
int ret
#define GDI_OBJECT_TYPE_DC
Definition: gdi.h:46
#define GDI_OBJECT_TYPE_METAFILE
Definition: gdi.h:58
#define GDI_OBJECT_TYPE_BITMAP
Definition: gdi.h:48
#define ok_err(error)
Definition: atltest.h:124
#define FillMemory(BUF, SIZ, MASK)
Definition: strucsup.c:31
#define CreateMetaFile
Definition: wingdi.h:4447
#define PS_DASH
Definition: wingdi.h:587
unsigned char BYTE
Definition: xxhash.c:193
UCHAR src_mask[]
Definition: GetObject.c:14
HFONT WINAPI CreateFontA(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCSTR)
HCURSOR hCursor
Definition: winuser.h:3711
static HDC hDC
Definition: 3dtext.c:33
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
START_TEST(GetObject)
Definition: GetObject.c:747
#define INVALID_POINTER
Definition: GetObject.c:12
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
UINT elpBrushStyle
Definition: wingdi.h:1944
#define BLACK_PEN
Definition: wingdi.h:903
#define GDI_OBJECT_TYPE_EMF
Definition: gdi.h:53
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:199
#define ok(value,...)
Definition: atltest.h:57
Definition: bl.h:1330
void Test_Brush(void)
Definition: GetObject.c:334
void Test_Font(void)
Definition: GetObject.c:554
#define NULL
Definition: types.h:112
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
#define FW_NORMAL
Definition: wingdi.h:373
DWORD cbSize
Definition: winuser.h:3709
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
void Test_MetaDC(void)
Definition: GetObject.c:694
void Test_Bitmap(void)
Definition: GetObject.c:209
HPEN WINAPI ExtCreatePen(_In_ DWORD iPenStyle, _In_ DWORD cWidth, _In_ const LOGBRUSH *plbrush, _In_ DWORD cStyle, _In_reads_opt_(cStyle) const DWORD *pstyle)
static HBITMAP bitmap
Definition: clipboard.c:1344
WORD palNumEntries
Definition: wingdi.h:1834
static HBITMAP
Definition: button.c:44
#define BS_SOLID
Definition: wingdi.h:1086
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:40
void Test_DIBBrush(void)
Definition: GetObject.c:388
#define GDI_HANDLE_TYPE_MASK
Definition: gdi.h:17
#define ANSI_CHARSET
Definition: wingdi.h:383
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827
#define DIB_RGB_COLORS
Definition: wingdi.h:367
#define PC_EXPLICIT
Definition: wingdi.h:880
HBRUSH WINAPI CreateDIBPatternBrushPt(_In_ const VOID *pvPackedDIB, _In_ UINT uUsage)
#define PS_USERSTYLE
Definition: wingdi.h:592
DWORD flags
Definition: winuser.h:3710
#define GDI_OBJECT_TYPE_FONT
Definition: gdi.h:50
#define BI_RGB
Definition: precomp.h:47
static HBITMAP hBitmap
Definition: timezone.c:26
#define CONST
Definition: pedump.c:81
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10