ReactOS  0.4.12-dev-916-gffc4e30
pdevobj.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS kernel
4  * PURPOSE: Support for physical devices
5  * FILE: win32ss/gdi/eng/pdevobj.c
6  * PROGRAMER: Timo Kreuzer (timo.kreuzer@reactos.org)
7  */
8 
9 #include <win32k.h>
10 #define NDEBUG
11 #include <debug.h>
12 
14 
17 
18 INIT_FUNCTION
20 NTAPI
22 {
25  return STATUS_SUCCESS;
26 }
27 
28 #if DBG
30 NTAPI
31 DbgLookupDHPDEV(DHPDEV dhpdev)
32 {
33  PPDEVOBJ ppdev;
34 
35  /* Lock PDEV list */
36  EngAcquireSemaphoreShared(ghsemPDEV);
37 
38  /* Walk through the list of PDEVs */
39  for (ppdev = gppdevList; ppdev; ppdev = ppdev->ppdevNext)
40  {
41  /* Compare with the given DHPDEV */
42  if (ppdev->dhpdev == dhpdev) break;
43  }
44 
45  /* Unlock PDEV list */
47 
48  return ppdev;
49 }
50 #endif
51 
54 {
55  PPDEVOBJ ppdev;
56 
58  if (!ppdev)
59  return NULL;
60 
61  RtlZeroMemory(ppdev, sizeof(PDEVOBJ));
62 
64  if (ppdev->hsemDevLock == NULL)
65  {
67  return NULL;
68  }
69 
70  /* Allocate EDD_DIRECTDRAW_GLOBAL for our ReactX driver */
72  if (ppdev->pEDDgpl)
74 
75  ppdev->cPdevRefs = 1;
76 
77  return ppdev;
78 }
79 
80 static
81 VOID
83  PPDEVOBJ ppdev)
84 {
86  if (ppdev->pEDDgpl)
89 }
90 
91 VOID
92 NTAPI
94 {
95  /* Lock loader */
97 
98  /* Decrease reference count */
99  --ppdev->cPdevRefs;
100 
101  ASSERT(ppdev->cPdevRefs >= 0) ;
102 
103  /* Check if references are left */
104  if (ppdev->cPdevRefs == 0)
105  {
106  /* Do we have a surface? */
107  if (ppdev->pSurface)
108  {
109  /* Release the surface and let the driver free it */
111  ppdev->pfn.DisableSurface(ppdev->dhpdev);
112  }
113 
114  /* Do we have a palette? */
115  if(ppdev->ppalSurf)
116  {
118  }
119 
120  /* Check if the PDEV was enabled */
121  if (ppdev->dhpdev != NULL)
122  {
123  /* Disable the PDEV */
124  ppdev->pfn.DisablePDEV(ppdev->dhpdev);
125  }
126 
127  /* Remove it from list */
128  if( ppdev == gppdevList )
129  gppdevList = ppdev->ppdevNext ;
130  else
131  {
132  PPDEVOBJ ppdevCurrent = gppdevList;
133  BOOL found = FALSE ;
134  while (!found && ppdevCurrent->ppdevNext)
135  {
136  if (ppdevCurrent->ppdevNext == ppdev)
137  found = TRUE;
138  else
139  ppdevCurrent = ppdevCurrent->ppdevNext ;
140  }
141  if(found)
142  ppdevCurrent->ppdevNext = ppdev->ppdevNext;
143  }
144 
145  /* Is this the primary one ? */
146  if (ppdev == gppdevPrimary)
148 
149  /* Free it */
150  PDEVOBJ_vDeletePDEV(ppdev);
151  }
152 
153  /* Unlock loader */
155 
156 }
157 
158 BOOL
159 NTAPI
161  PPDEVOBJ ppdev,
162  PDEVMODEW pdevmode,
164 {
165  PFN_DrvEnablePDEV pfnEnablePDEV;
166  ULONG i;
167 
168  DPRINT("PDEVOBJ_bEnablePDEV()\n");
169 
170  /* Get the DrvEnablePDEV function */
171  pfnEnablePDEV = ppdev->pldev->pfn.EnablePDEV;
172 
173  /* Call the drivers DrvEnablePDEV function */
174  ppdev->dhpdev = pfnEnablePDEV(pdevmode,
176  HS_DDI_MAX,
177  ppdev->ahsurf,
178  sizeof(GDIINFO),
179  (PULONG)&ppdev->gdiinfo,
180  sizeof(DEVINFO),
181  &ppdev->devinfo,
182  (HDEV)ppdev,
184  ppdev->pGraphicsDevice->DeviceObject);
185  if (ppdev->dhpdev == NULL)
186  {
187  DPRINT1("Failed to enable PDEV\n");
188  return FALSE;
189  }
190 
191  /* Fix up some values */
192  if (ppdev->gdiinfo.ulLogPixelsX == 0)
193  ppdev->gdiinfo.ulLogPixelsX = 96;
194 
195  if (ppdev->gdiinfo.ulLogPixelsY == 0)
196  ppdev->gdiinfo.ulLogPixelsY = 96;
197 
198  /* Set raster caps */
199  ppdev->gdiinfo.flRaster = RC_OP_DX_OUTPUT | RC_GDI20_OUTPUT | RC_BIGFONT;
200  if ((ppdev->gdiinfo.ulTechnology != DT_PLOTTER) && (ppdev->gdiinfo.ulTechnology != DT_CHARSTREAM))
201  ppdev->gdiinfo.flRaster |= RC_STRETCHDIB | RC_STRETCHBLT | RC_DIBTODEV | RC_DI_BITMAP | RC_BITMAP64 | RC_BITBLT;
202  if (ppdev->gdiinfo.ulTechnology == DT_RASDISPLAY)
203  ppdev->gdiinfo.flRaster |= RC_FLOODFILL;
204  if (ppdev->devinfo.flGraphicsCaps & GCAPS_PALMANAGED)
205  ppdev->gdiinfo.flRaster |= RC_PALETTE;
206 
207  /* Setup Palette */
208  ppdev->ppalSurf = PALETTE_ShareLockPalette(ppdev->devinfo.hpalDefault);
209 
210  /* Setup hatch brushes */
211  for (i = 0; i < HS_DDI_MAX; i++)
212  {
213  if (ppdev->ahsurf[i] == NULL)
214  ppdev->ahsurf[i] = gahsurfHatch[i];
215  }
216 
217  DPRINT("PDEVOBJ_bEnablePDEV - dhpdev = %p\n", ppdev->dhpdev);
218 
219  return TRUE;
220 }
221 
222 VOID
223 NTAPI
225  PPDEVOBJ ppdev)
226 {
227  /* Call the drivers DrvCompletePDEV function */
228  ppdev->pldev->pfn.CompletePDEV(ppdev->dhpdev, (HDEV)ppdev);
229 }
230 
231 PSURFACE
232 NTAPI
234  PPDEVOBJ ppdev)
235 {
236  HSURF hsurf;
237 
238  /* Check if there is no surface for this PDEV yet */
239  if (ppdev->pSurface == NULL)
240  {
241  /* Call the drivers DrvEnableSurface */
242  hsurf = ppdev->pldev->pfn.EnableSurface(ppdev->dhpdev);
243  if (hsurf== NULL)
244  {
245  DPRINT1("Failed to create PDEV surface!\n");
246  return NULL;
247  }
248 
249  /* Get a reference to the surface */
250  ppdev->pSurface = SURFACE_ShareLockSurface(hsurf);
251  NT_ASSERT(ppdev->pSurface != NULL);
252  }
253 
254  /* Increment reference count */
256 
257  DPRINT("PDEVOBJ_pSurface() returning %p\n", ppdev->pSurface);
258  return ppdev->pSurface;
259 }
260 
261 VOID
262 NTAPI
264  PPDEVOBJ ppdev)
265 {
266  PGRAPHICS_DEVICE pGraphicsDevice;
267  PDEVMODEINFO pdminfo, pdmiNext;
268  DEVMODEW dmDefault;
269 
270  /* Lock the PDEV */
272 
273  pGraphicsDevice = ppdev->pGraphicsDevice;
274 
275  /* Remember our default mode */
276  dmDefault = *pGraphicsDevice->pDevModeList[pGraphicsDevice->iDefaultMode].pdm;
277 
278  /* Clear out the modes */
279  for (pdminfo = pGraphicsDevice->pdevmodeInfo;
280  pdminfo;
281  pdminfo = pdmiNext)
282  {
283  pdmiNext = pdminfo->pdmiNext;
285  }
286  pGraphicsDevice->pdevmodeInfo = NULL;
287  ExFreePoolWithTag(pGraphicsDevice->pDevModeList, GDITAG_GDEVICE);
288  pGraphicsDevice->pDevModeList = NULL;
289 
290  /* Now re-populate the list */
291  if (!EngpPopulateDeviceModeList(pGraphicsDevice, &dmDefault))
292  {
293  DPRINT1("FIXME: EngpPopulateDeviceModeList failed, we just destroyed a perfectly good mode list\n");
294  }
295 
296  ppdev->pdmwDev = pGraphicsDevice->pDevModeList[pGraphicsDevice->iCurrentMode].pdm;
297 
298  /* Unlock PDEV */
300 }
301 
302 PDEVMODEW
303 NTAPI
305  PPDEVOBJ ppdev,
306  PDEVMODEW pdm)
307 {
308  PGRAPHICS_DEVICE pGraphicsDevice;
309  PDEVMODEW pdmCurrent;
310  ULONG i;
311  DWORD dwFields;
312 
313  pGraphicsDevice = ppdev->pGraphicsDevice;
314 
315  for (i = 0; i < pGraphicsDevice->cDevModes; i++)
316  {
317  pdmCurrent = pGraphicsDevice->pDevModeList[i].pdm;
318 
319  /* Compare asked DEVMODE fields
320  * Only compare those that are valid in both DEVMODE structs */
321  dwFields = pdmCurrent->dmFields & pdm->dmFields ;
322 
323  /* For now, we only need those */
324  if ((dwFields & DM_BITSPERPEL) &&
325  (pdmCurrent->dmBitsPerPel != pdm->dmBitsPerPel)) continue;
326  if ((dwFields & DM_PELSWIDTH) &&
327  (pdmCurrent->dmPelsWidth != pdm->dmPelsWidth)) continue;
328  if ((dwFields & DM_PELSHEIGHT) &&
329  (pdmCurrent->dmPelsHeight != pdm->dmPelsHeight)) continue;
330  if ((dwFields & DM_DISPLAYFREQUENCY) &&
331  (pdmCurrent->dmDisplayFrequency != pdm->dmDisplayFrequency)) continue;
332 
333  /* Match! Return the DEVMODE */
334  return pdmCurrent;
335  }
336 
337  /* Nothing found */
338  return NULL;
339 }
340 
341 static
342 PPDEVOBJ
344  PUNICODE_STRING pustrDeviceName,
345  PDEVMODEW pdm)
346 {
347  PGRAPHICS_DEVICE pGraphicsDevice;
348  PPDEVOBJ ppdev;
349  DPRINT("EngpCreatePDEV(%wZ, %p)\n", pustrDeviceName, pdm);
350 
351  /* Try to find the GRAPHICS_DEVICE */
352  if (pustrDeviceName)
353  {
354  pGraphicsDevice = EngpFindGraphicsDevice(pustrDeviceName, 0, 0);
355  if (!pGraphicsDevice)
356  {
357  DPRINT1("No GRAPHICS_DEVICE found for %ls!\n",
358  pustrDeviceName ? pustrDeviceName->Buffer : 0);
359  return NULL;
360  }
361  }
362  else
363  {
364  pGraphicsDevice = gpPrimaryGraphicsDevice;
365  }
366 
367  /* Allocate a new PDEVOBJ */
368  ppdev = PDEVOBJ_AllocPDEV();
369  if (!ppdev)
370  {
371  DPRINT1("failed to allocate a PDEV\n");
372  return NULL;
373  }
374 
375  /* If no DEVMODEW is given, ... */
376  if (!pdm)
377  {
378  /* ... use the device's default one */
379  pdm = pGraphicsDevice->pDevModeList[pGraphicsDevice->iDefaultMode].pdm;
380  DPRINT("Using iDefaultMode = %lu\n", pGraphicsDevice->iDefaultMode);
381  }
382 
383  /* Try to get a diplay driver */
385  if (!ppdev->pldev)
386  {
387  DPRINT1("Could not load display driver '%ls', '%ls'\n",
388  pGraphicsDevice->pDiplayDrivers,
389  pdm->dmDeviceName);
390  PDEVOBJ_vRelease(ppdev);
391  return NULL;
392  }
393 
394  /* Copy the function table */
395  ppdev->pfn = ppdev->pldev->pfn;
396 
397  /* Set MovePointer function */
398  ppdev->pfnMovePointer = ppdev->pfn.MovePointer;
399  if (!ppdev->pfnMovePointer)
401 
402  ppdev->pGraphicsDevice = pGraphicsDevice;
403 
404  // DxEngGetHdevData asks for Graphics DeviceObject in hSpooler field
405  ppdev->hSpooler = ppdev->pGraphicsDevice->DeviceObject;
406 
407  // Should we change the ative mode of pGraphicsDevice ?
408  ppdev->pdmwDev = PDEVOBJ_pdmMatchDevMode(ppdev, pdm) ;
409 
410  /* FIXME! */
411  ppdev->flFlags = PDEV_DISPLAY;
412 
413  /* HACK: Don't use the pointer */
414  ppdev->Pointer.Exclude.right = -1;
415 
416  /* Call the driver to enable the PDEV */
417  if (!PDEVOBJ_bEnablePDEV(ppdev, pdm, NULL))
418  {
419  DPRINT1("Failed to enable PDEV!\n");
420  PDEVOBJ_vRelease(ppdev);
421  return NULL;
422  }
423 
424  /* FIXME: this must be done in a better way */
426 
427  /* Tell the driver that the PDEV is ready */
428  PDEVOBJ_vCompletePDEV(ppdev);
429 
430  /* Return the PDEV */
431  return ppdev;
432 }
433 
435 VOID
437  _Inout_ PVOID pvPointer1,
438  _Inout_ PVOID pvPointer2)
439 {
440  PVOID *ppvPointer1 = pvPointer1;
441  PVOID *ppvPointer2 = pvPointer2;
442  PVOID pvTemp;
443 
444  pvTemp = *ppvPointer1;
445  *ppvPointer1 = *ppvPointer2;
446  *ppvPointer2 = pvTemp;
447 }
448 
449 VOID
450 NTAPI
452  PPDEVOBJ ppdev,
453  PPDEVOBJ ppdev2)
454 {
455  union
456  {
457  DRIVER_FUNCTIONS pfn;
458  GDIINFO gdiinfo;
459  DEVINFO devinfo;
460  DWORD StateFlags;
461  } temp;
462 
463  /* Exchange driver functions */
464  temp.pfn = ppdev->pfn;
465  ppdev->pfn = ppdev2->pfn;
466  ppdev2->pfn = temp.pfn;
467 
468  /* Exchange LDEVs */
469  SwitchPointer(&ppdev->pldev, &ppdev2->pldev);
470 
471  /* Exchange DHPDEV */
472  SwitchPointer(&ppdev->dhpdev, &ppdev2->dhpdev);
473 
474  /* Exchange surfaces and associate them with their new PDEV */
475  SwitchPointer(&ppdev->pSurface, &ppdev2->pSurface);
476  ppdev->pSurface->SurfObj.hdev = (HDEV)ppdev;
477  ppdev2->pSurface->SurfObj.hdev = (HDEV)ppdev2;
478 
479  /* Exchange devinfo */
480  temp.devinfo = ppdev->devinfo;
481  ppdev->devinfo = ppdev2->devinfo;
482  ppdev2->devinfo = temp.devinfo;
483 
484  /* Exchange gdiinfo */
485  temp.gdiinfo = ppdev->gdiinfo;
486  ppdev->gdiinfo = ppdev2->gdiinfo;
487  ppdev2->gdiinfo = temp.gdiinfo;
488 
489  /* Exchange DEVMODE */
490  SwitchPointer(&ppdev->pdmwDev, &ppdev2->pdmwDev);
491 
492  /* Exchange state flags */
493  temp.StateFlags = ppdev->pGraphicsDevice->StateFlags;
495  ppdev2->pGraphicsDevice->StateFlags = temp.StateFlags;
496 
497  /* Notify each driver instance of its new HDEV association */
498  ppdev->pfn.CompletePDEV(ppdev->dhpdev, (HDEV)ppdev);
499  ppdev2->pfn.CompletePDEV(ppdev2->dhpdev, (HDEV)ppdev2);
500 }
501 
502 
503 BOOL
504 NTAPI
506  PPDEVOBJ ppdev,
507  PDEVMODEW pdm)
508 {
509  UNICODE_STRING ustrDevice;
510  PPDEVOBJ ppdevTmp;
512  BOOL retval = FALSE;
513 
514  /* Lock the PDEV */
516 
517  /* And everything else */
519 
520  DPRINT1("PDEVOBJ_bSwitchMode, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
521 
522  // Lookup the GraphicsDevice + select DEVMODE
523  // pdm = PDEVOBJ_pdmMatchDevMode(ppdev, pdm);
524 
525  /* 1. Temporarily disable the current PDEV and reset video to its default mode */
526  if (!ppdev->pfn.AssertMode(ppdev->dhpdev, FALSE))
527  {
528  DPRINT1("DrvAssertMode(FALSE) failed\n");
529  goto leave;
530  }
531 
532  /* 2. Create new PDEV */
534  ppdevTmp = EngpCreatePDEV(&ustrDevice, pdm);
535  if (!ppdevTmp)
536  {
537  DPRINT1("Failed to create a new PDEV\n");
538  goto leave2;
539  }
540 
541  /* 3. Create a new surface */
542  pSurface = PDEVOBJ_pSurface(ppdevTmp);
543  if (!pSurface)
544  {
545  DPRINT1("PDEVOBJ_pSurface failed\n");
546  PDEVOBJ_vRelease(ppdevTmp);
547  goto leave2;
548  }
549 
550  /* 4. Get DirectDraw information */
551  /* 5. Enable DirectDraw Not traced */
552  /* 6. Copy old PDEV state to new PDEV instance */
553 
554  /* 7. Switch the PDEVs */
555  PDEVOBJ_vSwitchPdev(ppdev, ppdevTmp);
556 
557  /* 8. Disable DirectDraw */
558 
559  PDEVOBJ_vRelease(ppdevTmp);
560 
561  /* Update primary display capabilities */
562  if(ppdev == gppdevPrimary)
563  {
564  PDEVOBJ_vGetDeviceCaps(ppdev, &GdiHandleTable->DevCaps);
565  }
566 
567  /* Success! */
568  retval = TRUE;
569 
570 leave2:
571  /* Set the new video mode, or restore the original one in case of failure */
572  if (!ppdev->pfn.AssertMode(ppdev->dhpdev, TRUE))
573  {
574  DPRINT1("DrvAssertMode(TRUE) failed\n");
575  }
576 
577 leave:
578  /* Unlock everything else */
580  /* Unlock the PDEV */
582 
583  DPRINT1("leave, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
584 
585  return retval;
586 }
587 
588 
589 PPDEVOBJ
590 NTAPI
592  _In_opt_ PUNICODE_STRING pustrDeviceName)
593 {
594  UNICODE_STRING ustrCurrent;
595  PPDEVOBJ ppdev;
596  PGRAPHICS_DEVICE pGraphicsDevice;
597 
598  /* Acquire PDEV lock */
600 
601  /* Did the caller pass a device name? */
602  if (pustrDeviceName)
603  {
604  /* Loop all present PDEVs */
605  for (ppdev = gppdevList; ppdev; ppdev = ppdev->ppdevNext)
606  {
607  /* Get a pointer to the GRAPHICS_DEVICE */
608  pGraphicsDevice = ppdev->pGraphicsDevice;
609 
610  /* Compare the name */
611  RtlInitUnicodeString(&ustrCurrent, pGraphicsDevice->szWinDeviceName);
612  if (RtlEqualUnicodeString(pustrDeviceName, &ustrCurrent, FALSE))
613  {
614  /* Found! */
615  break;
616  }
617  }
618  }
619  else
620  {
621  /* Otherwise use the primary PDEV */
622  ppdev = gppdevPrimary;
623  }
624 
625  /* Did we find one? */
626  if (ppdev)
627  {
628  /* Yes, reference the PDEV */
630  }
631  else
632  {
633  /* No, create a new PDEV for the given device */
634  ppdev = EngpCreatePDEV(pustrDeviceName, NULL);
635  if (ppdev)
636  {
637  /* Insert the PDEV into the list */
638  ppdev->ppdevNext = gppdevList;
639  gppdevList = ppdev;
640 
641  /* Set as primary PDEV, if we don't have one yet */
642  if (!gppdevPrimary)
643  {
644  gppdevPrimary = ppdev;
646  }
647  }
648  }
649 
650  /* Release PDEV lock */
652 
653  return ppdev;
654 }
655 
656 INT
657 NTAPI
659 {
660  INT ret = CM_NONE;
661 
662  if (ppdev->flFlags & PDEV_DISPLAY)
663  {
664  if (ppdev->devinfo.iDitherFormat == BMF_8BPP ||
666  ret = CM_GAMMA_RAMP;
667  }
668 
670  ret |= CM_CMYK_COLOR;
671  if (ppdev->devinfo.flGraphicsCaps & GCAPS_ICM)
672  ret |= CM_DEVICE_ICM;
673 
674  return ret;
675 }
676 
677 VOID
678 NTAPI
680  IN PPDEVOBJ ppdev,
682 {
683  PGDIINFO pGdiInfo = &ppdev->gdiinfo;
684 
685  pDevCaps->ulVersion = pGdiInfo->ulVersion;
686  pDevCaps->ulTechnology = pGdiInfo->ulTechnology;
687  pDevCaps->ulHorzSizeM = (pGdiInfo->ulHorzSize + 500) / 1000;
688  pDevCaps->ulVertSizeM = (pGdiInfo->ulVertSize + 500) / 1000;
689  pDevCaps->ulHorzSize = pGdiInfo->ulHorzSize;
690  pDevCaps->ulVertSize = pGdiInfo->ulVertSize;
691  pDevCaps->ulHorzRes = pGdiInfo->ulHorzRes;
692  pDevCaps->ulVertRes = pGdiInfo->ulVertRes;
693  pDevCaps->ulBitsPixel = pGdiInfo->cBitsPixel;
694  if (pDevCaps->ulBitsPixel == 15) pDevCaps->ulBitsPixel = 16;
695  pDevCaps->ulPlanes = pGdiInfo->cPlanes;
696  pDevCaps->ulNumPens = pGdiInfo->ulNumColors;
697  if (pDevCaps->ulNumPens != -1) pDevCaps->ulNumPens *= 5;
698  pDevCaps->ulNumFonts = 0; // PDEVOBJ_cFonts(ppdev);
699  pDevCaps->ulNumColors = pGdiInfo->ulNumColors;
700  pDevCaps->ulRasterCaps = pGdiInfo->flRaster;
701  pDevCaps->ulAspectX = pGdiInfo->ulAspectX;
702  pDevCaps->ulAspectY = pGdiInfo->ulAspectY;
703  pDevCaps->ulAspectXY = pGdiInfo->ulAspectXY;
704  pDevCaps->ulLogPixelsX = pGdiInfo->ulLogPixelsX;
705  pDevCaps->ulLogPixelsY = pGdiInfo->ulLogPixelsY;
706  pDevCaps->ulSizePalette = pGdiInfo->ulNumPalReg;
707  pDevCaps->ulColorRes = pGdiInfo->ulDACRed +
708  pGdiInfo->ulDACGreen +
709  pGdiInfo->ulDACBlue;
710  pDevCaps->ulPhysicalWidth = pGdiInfo->szlPhysSize.cx;
714  pDevCaps->ulTextCaps = pGdiInfo->flTextCaps;
716  if (pGdiInfo->ulTechnology != DT_PLOTTER)
718  pDevCaps->ulVRefresh = pGdiInfo->ulVRefresh;
719  pDevCaps->ulDesktopHorzRes = pGdiInfo->ulHorzRes;
720  pDevCaps->ulDesktopVertRes = pGdiInfo->ulVertRes;
726  pDevCaps->ulShadeBlend = pGdiInfo->flShadeBlend;
728 }
729 
730 
734 LPWSTR
735 APIENTRY
737 {
738  PPDEVOBJ ppdev = (PPDEVOBJ)hdev;
739 
740  ASSERT(ppdev);
741  ASSERT(ppdev->pldev);
742  ASSERT(ppdev->pldev->pGdiDriverInfo);
743  ASSERT(ppdev->pldev->pGdiDriverInfo->DriverName.Buffer);
744 
745  return ppdev->pldev->pGdiDriverInfo->DriverName.Buffer;
746 }
747 
748 
749 INT
750 APIENTRY
752  HDC hdc,
753  INT Index)
754 {
755  PDC pdc;
756  DEVCAPS devcaps;
757 
758  /* Lock the given DC */
759  pdc = DC_LockDc(hdc);
760  if (!pdc)
761  {
763  return 0;
764  }
765 
766  /* Get the data */
767  PDEVOBJ_vGetDeviceCaps(pdc->ppdev, &devcaps);
768 
769  /* Unlock the DC */
770  DC_UnlockDc(pdc);
771 
772  /* Return capability */
773  switch (Index)
774  {
775  case DRIVERVERSION:
776  return devcaps.ulVersion;
777 
778  case TECHNOLOGY:
779  return devcaps.ulTechnology;
780 
781  case HORZSIZE:
782  return devcaps.ulHorzSize;
783 
784  case VERTSIZE:
785  return devcaps.ulVertSize;
786 
787  case HORZRES:
788  return devcaps.ulHorzRes;
789 
790  case VERTRES:
791  return devcaps.ulVertRes;
792 
793  case LOGPIXELSX:
794  return devcaps.ulLogPixelsX;
795 
796  case LOGPIXELSY:
797  return devcaps.ulLogPixelsY;
798 
799  case BITSPIXEL:
800  return devcaps.ulBitsPixel;
801 
802  case PLANES:
803  return devcaps.ulPlanes;
804 
805  case NUMBRUSHES:
806  return -1;
807 
808  case NUMPENS:
809  return devcaps.ulNumPens;
810 
811  case NUMFONTS:
812  return devcaps.ulNumFonts;
813 
814  case NUMCOLORS:
815  return devcaps.ulNumColors;
816 
817  case ASPECTX:
818  return devcaps.ulAspectX;
819 
820  case ASPECTY:
821  return devcaps.ulAspectY;
822 
823  case ASPECTXY:
824  return devcaps.ulAspectXY;
825 
826  case CLIPCAPS:
827  return CP_RECTANGLE;
828 
829  case SIZEPALETTE:
830  return devcaps.ulSizePalette;
831 
832  case NUMRESERVED:
833  return 20;
834 
835  case COLORRES:
836  return devcaps.ulColorRes;
837 
838  case DESKTOPVERTRES:
839  return devcaps.ulVertRes;
840 
841  case DESKTOPHORZRES:
842  return devcaps.ulHorzRes;
843 
844  case BLTALIGNMENT:
845  return devcaps.ulBltAlignment;
846 
847  case SHADEBLENDCAPS:
848  return devcaps.ulShadeBlend;
849 
850  case COLORMGMTCAPS:
851  return devcaps.ulColorMgmtCaps;
852 
853  case PHYSICALWIDTH:
854  return devcaps.ulPhysicalWidth;
855 
856  case PHYSICALHEIGHT:
857  return devcaps.ulPhysicalHeight;
858 
859  case PHYSICALOFFSETX:
860  return devcaps.ulPhysicalOffsetX;
861 
862  case PHYSICALOFFSETY:
863  return devcaps.ulPhysicalOffsetY;
864 
865  case VREFRESH:
866  return devcaps.ulVRefresh;
867 
868  case RASTERCAPS:
869  return devcaps.ulRasterCaps;
870 
871  case CURVECAPS:
872  return (CC_CIRCLES | CC_PIE | CC_CHORD | CC_ELLIPSES | CC_WIDE |
874 
875  case LINECAPS:
878 
879  case POLYGONALCAPS:
882 
883  case TEXTCAPS:
884  return devcaps.ulTextCaps;
885 
886  case CAPS1:
887  case PDEVICESIZE:
888  case SCALINGFACTORX:
889  case SCALINGFACTORY:
890  default:
891  return 0;
892  }
893 
894  return 0;
895 }
896 
897 _Success_(return!=FALSE)
898 BOOL
899 APIENTRY
900 NtGdiGetDeviceCapsAll(
901  IN HDC hDC,
903 {
904  PDC pdc;
905  DEVCAPS devcaps;
906  BOOL bResult = TRUE;
907 
908  /* Lock the given DC */
909  pdc = DC_LockDc(hDC);
910  if (!pdc)
911  {
913  return FALSE;
914  }
915 
916  /* Get the data */
917  PDEVOBJ_vGetDeviceCaps(pdc->ppdev, &devcaps);
918 
919  /* Unlock the DC */
920  DC_UnlockDc(pdc);
921 
922  /* Copy data to caller */
923  _SEH2_TRY
924  {
925  ProbeForWrite(pDevCaps, sizeof(DEVCAPS), 1);
926  RtlCopyMemory(pDevCaps, &devcaps, sizeof(DEVCAPS));
927  }
929  {
931  bResult = FALSE;
932  }
933  _SEH2_END;
934 
935  return bResult;
936 }
937 
938 DHPDEV
939 APIENTRY
941  IN HDEV hdev)
942 {
943  PPDEVOBJ ppdev;
944  DHPDEV dhpdev = NULL;
945 
946  /* Check parameter */
947  if (!hdev || (PCHAR)hdev < (PCHAR)MmSystemRangeStart)
948  return NULL;
949 
950  /* Lock PDEV list */
951  EngAcquireSemaphoreShared(ghsemPDEV);
952 
953  /* Walk through the list of PDEVs */
954  for (ppdev = gppdevList; ppdev; ppdev = ppdev->ppdevNext)
955  {
956  /* Compare with the given HDEV */
957  if (ppdev == (PPDEVOBJ)hdev)
958  {
959  /* Found the PDEV! Get it's dhpdev and break */
960  dhpdev = ppdev->dhpdev;
961  break;
962  }
963  }
964 
965  /* Unlock PDEV list */
967 
968  return dhpdev;
969 }
970 
971 PSIZEL
972 FASTCALL
974 {
975  if (ppdev->flFlags & PDEV_META_DEVICE)
976  {
977  psizl->cx = ppdev->ulHorzRes;
978  psizl->cy = ppdev->ulVertRes;
979  }
980  else
981  {
982  psizl->cx = ppdev->gdiinfo.ulHorzRes;
983  psizl->cy = ppdev->gdiinfo.ulVertRes;
984  }
985  return psizl;
986 }
DHPDEV dhpdev
Definition: pdevobj.h:121
#define CP_RECTANGLE
Definition: wingdi.h:825
BOOL NTAPI PDEVOBJ_bSwitchMode(PPDEVOBJ ppdev, PDEVMODEW pdm)
Definition: pdevobj.c:505
SIZEL szlPhysSize
Definition: winddi.h:901
#define DESKTOPHORZRES
Definition: wingdi.h:741
BOOLEAN EngpPopulateDeviceModeList(_Inout_ PGRAPHICS_DEVICE pGraphicsDevice, _In_ PDEVMODEW pdmDefault)
Definition: device.c:34
signed char * PCHAR
Definition: retypes.h:7
PFN_DrvDisablePDEV DisablePDEV
Definition: ntgdityp.h:565
#define CC_PIE
Definition: wingdi.h:761
_Out_ PDEVCAPS pDevCaps
Definition: ntgdi.h:2664
#define DESKTOPVERTRES
Definition: wingdi.h:742
VOID WINAPI EngReleaseSemaphore(IN HSEMAPHORE hsem)
Definition: eng.c:235
#define NUMBRUSHES
Definition: wingdi.h:721
#define _Ret_z_
Definition: no_sal2.h:625
#define CC_CHORD
Definition: wingdi.h:762
BOOL NTAPI PDEVOBJ_bEnablePDEV(PPDEVOBJ ppdev, PDEVMODEW pdevmode, PWSTR pwszLogAddress)
Definition: pdevobj.c:160
#define BITSPIXEL
Definition: wingdi.h:719
#define IN
Definition: typedefs.h:38
LONG cPdevRefs
Definition: pdevobj.h:86
#define RC_STRETCHBLT
Definition: wingdi.h:754
#define HORZRES
Definition: wingdi.h:715
#define LOGPIXELSX
Definition: wingdi.h:717
#define _Must_inspect_result_
Definition: no_sal2.h:314
#define TC_UA_ABLE
Definition: wingdi.h:817
ULONG flShadeBlend
Definition: winddi.h:920
ULONG ulBltAlignment
Definition: ntgdityp.h:321
#define TRUE
Definition: types.h:120
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define NUMRESERVED
Definition: wingdi.h:732
#define HS_DDI_MAX
Definition: winddi.h:3954
#define LC_WIDE
Definition: wingdi.h:774
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define GCAPS_CMYKCOLOR
Definition: winddi.h:347
#define GDITAG_DEVMODE
Definition: tags.h:73
typedef DHPDEV(APIENTRY FN_DrvEnablePDEV)(_In_ DEVMODEW *pdm
ULONG ulHorzRes
Definition: ntgdityp.h:298
INT NTAPI PDEVOBJ_iGetColorManagementCaps(PPDEVOBJ ppdev)
Definition: pdevobj.c:658
FORCEINLINE PDC DC_LockDc(HDC hdc)
Definition: dc.h:219
ULONG ulDACRed
Definition: winddi.h:891
PDEVICE_OBJECT DeviceObject
Definition: pdevobj.h:63
struct _LDEVOBJ * pldev
Definition: pdevobj.h:120
#define PC_INTERIORS
Definition: wingdi.h:803
#define RC_BIGFONT
Definition: wingdi.h:780
DWORD dmFields
Definition: wingdi.h:1600
#define SURFACE_ShareUnlockSurface(pBMObj)
Definition: surface.h:102
PFN_DrvMovePointer pfnMovePointer
Definition: pdevobj.h:114
#define ASPECTX
Definition: wingdi.h:726
ULONG ulVertSizeM
Definition: ntgdityp.h:295
WCHAR szWinDeviceName[CCHDEVICENAME/2]
Definition: pdevobj.h:60
ULONG ulRasterCaps
Definition: ntgdityp.h:305
#define RC_GDI20_OUTPUT
Definition: wingdi.h:785
PSURFACE NTAPI PDEVOBJ_pSurface(PPDEVOBJ ppdev)
Definition: pdevobj.c:233
uint16_t * PWSTR
Definition: typedefs.h:54
#define LC_POLYLINE
Definition: wingdi.h:771
GDIINFO gdiinfo
Definition: pdevobj.h:124
PPDEVOBJ gppdevPrimary
Definition: pdevobj.c:13
_Must_inspect_result_ _Ret_z_ LPWSTR APIENTRY EngGetDriverName(_In_ HDEV hdev)
Definition: pdevobj.c:736
DWORD StateFlags
Definition: pdevobj.h:66
#define CC_STYLED
Definition: wingdi.h:765
ULONG ulNumFonts
Definition: ntgdityp.h:303
ULONG yPanningAlignment
Definition: winddi.h:914
ULONG ulAspectY
Definition: winddi.h:895
#define ERROR_INVALID_HANDLE
Definition: compat.h:88
ULONG ulDesktopVertRes
Definition: ntgdityp.h:320
LONG NTSTATUS
Definition: precomp.h:26
#define COLORRES
Definition: wingdi.h:733
static HDC
Definition: imagelist.c:92
#define DRIVERVERSION
Definition: wingdi.h:704
#define PDEVICESIZE
Definition: wingdi.h:729
_Requires_lock_not_held_ hsem ENGAPI VOID APIENTRY EngDeleteSemaphore(_Inout_ __drv_freesMem(Mem) HSEMAPHORE hsem)
Definition: semaphor.c:106
#define BLTALIGNMENT
Definition: wingdi.h:743
ULONG ulHorzSize
Definition: ntgdityp.h:296
PDEVMODEENTRY pDevModeList
Definition: pdevobj.h:70
#define SCALINGFACTORX
Definition: wingdi.h:738
#define RC_BITMAP64
Definition: wingdi.h:782
ULONG ulLogPixelsY
Definition: winddi.h:889
ULONG ulPanningHorzRes
Definition: winddi.h:911
#define LC_POLYMARKER
Definition: wingdi.h:773
#define POLYGONALCAPS
Definition: wingdi.h:778
Definition: xlate.c:10
ULONG ulBitsPixel
Definition: ntgdityp.h:300
ULONG cPlanes
Definition: winddi.h:885
#define SURFACE_ShareLockSurface(hBMObj)
Definition: surface.h:91
#define PC_WINDPOLYGON
Definition: wingdi.h:797
DWORD dmBitsPerPel
Definition: wingdi.h:1625
ULONG flTextCaps
Definition: winddi.h:890
PGRAPHICS_DEVICE gpPrimaryGraphicsDevice
Definition: device.c:13
#define TC_SO_ABLE
Definition: wingdi.h:818
ULONG ulPhysicalHeight
Definition: ntgdityp.h:314
#define RASTERCAPS
Definition: wingdi.h:744
#define FASTCALL
Definition: nt_native.h:50
#define DT_RASDISPLAY
Definition: wingdi.h:707
static PPDEVOBJ EngpCreatePDEV(PUNICODE_STRING pustrDeviceName, PDEVMODEW pdm)
Definition: pdevobj.c:343
int32_t INT
Definition: typedefs.h:56
#define TECHNOLOGY
Definition: wingdi.h:705
ULONG ulVRefresh
Definition: ntgdityp.h:318
#define RC_FLOODFILL
Definition: wingdi.h:750
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
Definition: exintrin.c:143
PDEVMODEW pdm
Definition: pdevobj.h:53
#define _In_opt_
Definition: no_sal2.h:213
LONG y
Definition: windef.h:315
struct _PDEVOBJ * ppdevNext
Definition: pdevobj.h:85
_SEH2_TRY
Definition: create.c:4250
#define DM_PELSWIDTH
Definition: wingdi.h:1251
#define TEXTCAPS
Definition: wingdi.h:805
struct _PDEVOBJ * PPDEVOBJ
ULONG ulPanningVertRes
Definition: ntgdityp.h:323
#define PHYSICALHEIGHT
Definition: wingdi.h:735
PLDEVOBJ NTAPI EngLoadImageEx(_In_z_ LPWSTR pwszDriverName, _In_ ULONG ldevtype)
Definition: ldevobj.c:328
ULONG ulNumPalReg
Definition: winddi.h:902
ULONG ulShadeBlend
Definition: ntgdityp.h:326
ULONG ulVertSize
Definition: winddi.h:881
long right
Definition: polytest.cpp:53
#define PC_WIDESTYLED
Definition: wingdi.h:802
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
INT APIENTRY NtGdiGetDeviceCaps(HDC hdc, INT Index)
Definition: pdevobj.c:751
PGRAPHICS_DEVICE NTAPI EngpFindGraphicsDevice(_In_opt_ PUNICODE_STRING pustrDevice, _In_ ULONG iDevNum, _In_ DWORD dwFlags)
Definition: device.c:281
ULONG ulDACGreen
Definition: winddi.h:892
#define NUMCOLORS
Definition: wingdi.h:724
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
POINTL ptlPhysOffset
Definition: winddi.h:900
FLONG flFlags
Definition: pdevobj.h:89
ULONG ulVersion
Definition: winddi.h:878
unsigned int BOOL
Definition: ntddk_ex.h:94
ULONG ulNumPens
Definition: ntgdityp.h:302
ULONG ulVertRes
Definition: ntgdityp.h:299
RECTL Exclude
Definition: pdevobj.h:39
SURFOBJ SurfObj
Definition: surface.h:8
#define VREFRESH
Definition: wingdi.h:740
LPWSTR pwszDescription
Definition: pdevobj.h:72
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
#define CC_INTERIORS
Definition: wingdi.h:767
ULONG ulVertSize
Definition: ntgdityp.h:297
static HSEMAPHORE ghsemPDEV
Definition: pdevobj.c:16
struct _PALETTE * ppalSurf
Definition: pdevobj.h:122
ULONG ulHorzRes
Definition: winddi.h:882
ENGAPI VOID APIENTRY EngAcquireSemaphore(_Inout_ HSEMAPHORE hsem)
smooth NULL
Definition: ftsmooth.c:416
ULONG xPanningAlignment
Definition: ntgdityp.h:324
ULONG ulAspectXY
Definition: ntgdityp.h:308
#define LC_MARKER
Definition: wingdi.h:772
#define FORCEINLINE
Definition: ntbasedef.h:221
LONG cx
Definition: windef.h:319
ULONG ulTechnology
Definition: winddi.h:879
void DPRINT(...)
Definition: polytest.cpp:61
PDEVMODEW pdmwDev
Definition: pdevobj.h:130
HSEMAPHORE hsemDevLock
Definition: pdevobj.h:91
DRIVER_FUNCTIONS pfn
Definition: pdevobj.h:139
ULONG iDitherFormat
Definition: winddi.h:395
VOID NTAPI PDEVOBJ_vGetDeviceCaps(IN PPDEVOBJ ppdev, OUT PDEVCAPS pDevCaps)
Definition: pdevobj.c:679
HSURF gahsurfHatch[HS_DDI_MAX]
Definition: engbrush.c:24
ULONG ulAspectXY
Definition: winddi.h:896
ULONG xPanningAlignment
Definition: winddi.h:913
#define PALETTE_ShareLockPalette(hpal)
Definition: palette.h:57
#define TC_VA_ABLE
Definition: wingdi.h:820
typedef HSURF(APIENTRY FN_DrvEnableSurface)(_In_ DHPDEV dhpdev)
#define SCALINGFACTORY
Definition: wingdi.h:739
#define TC_OP_STROKE
Definition: wingdi.h:807
#define PC_STYLED
Definition: wingdi.h:801
VOID NTAPI PDEVOBJ_vCompletePDEV(PPDEVOBJ ppdev)
Definition: pdevobj.c:224
BASEOBJECT BaseObject
Definition: surface.h:6
#define CC_WIDE
Definition: wingdi.h:764
ULONG ulColorRes
Definition: ntgdityp.h:312
ULONG ulPhysicalOffsetY
Definition: ntgdityp.h:316
#define LC_STYLED
Definition: wingdi.h:775
ULONG ulAspectY
Definition: ntgdityp.h:307
#define GCAPS2_CHANGEGAMMARAMP
Definition: winddi.h:370
#define DISPLAY_DEVICE_PRIMARY_DEVICE
Definition: wingdi.h:1380
#define PC_WIDE
Definition: wingdi.h:800
#define GdiHandleTable
Definition: win32nt.h:36
ULONG ulPlanes
Definition: ntgdityp.h:301
Definition: polytest.cpp:40
#define ASPECTXY
Definition: wingdi.h:728
static PPDEVOBJ gppdevList
Definition: pdevobj.c:15
#define RC_OP_DX_OUTPUT
Definition: wingdi.h:788
ULONG ulVersion
Definition: ntgdityp.h:292
ULONG ulBltAlignment
Definition: winddi.h:910
ULONG ulDACBlue
Definition: winddi.h:893
_In_ DD_SURFACE_LOCAL * pSurface
Definition: winddi.h:3481
#define PHYSICALOFFSETY
Definition: wingdi.h:737
DWORD_PTR HSEMAPHORE
Definition: axcore.idl:60
ULONG iCurrentMode
Definition: pdevobj.h:78
PFN_DrvDisableSurface DisableSurface
Definition: ntgdityp.h:567
LPWSTR pDiplayDrivers
Definition: pdevobj.h:71
ULONG cDevModes
Definition: pdevobj.h:69
struct _DEVMODEINFO * pdmiNext
Definition: pdevobj.h:44
DEVINFO devinfo
Definition: pdevobj.h:123
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
Definition: wingdi.h:1378
#define RC_PALETTE
Definition: wingdi.h:789
#define CC_ROUNDRECT
Definition: wingdi.h:768
#define ASPECTY
Definition: wingdi.h:727
static const UCHAR Index[8]
Definition: usbohci.c:18
static VOID PDEVOBJ_vDeletePDEV(PPDEVOBJ ppdev)
Definition: pdevobj.c:82
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG x
Definition: windef.h:314
#define CLIPCAPS
Definition: wingdi.h:730
#define RC_BITBLT
Definition: wingdi.h:781
#define _Inout_
Definition: no_sal2.h:244
#define DT_PLOTTER
Definition: wingdi.h:706
ULONG ulHorzRes
Definition: pdevobj.h:110
ULONG ulHorzSize
Definition: winddi.h:880
PSIZEL FASTCALL PDEVOBJ_sizl(PPDEVOBJ ppdev, PSIZEL psizl)
Definition: pdevobj.c:973
ULONG ulPanningHorzRes
Definition: ntgdityp.h:322
_In_ LPWSTR pwszLogAddress
Definition: winddi.h:3548
WCHAR dmDeviceName[CCHDEVICENAME]
Definition: wingdi.h:1595
HANDLE hSpooler
Definition: pdevobj.h:126
ULONG ulDesktopHorzRes
Definition: ntgdityp.h:319
DWORD dmPelsWidth
Definition: wingdi.h:1626
#define LC_WIDESTYLED
Definition: wingdi.h:776
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define SIZEPALETTE
Definition: wingdi.h:731
#define DT_CHARSTREAM
Definition: wingdi.h:710
VOID NTAPI PDEVOBJ_vSwitchPdev(PPDEVOBJ ppdev, PPDEVOBJ ppdev2)
Definition: pdevobj.c:451
int ret
INIT_FUNCTION NTSTATUS NTAPI InitPDEVImpl(VOID)
Definition: pdevobj.c:21
#define GCAPS_ICM
Definition: winddi.h:346
HDEV hdev
Definition: winddi.h:1208
ULONG ulLogPixelsY
Definition: ntgdityp.h:310
HDC hdc
Definition: main.c:9
ULONG flRaster
Definition: winddi.h:887
ULONG ulVRefresh
Definition: winddi.h:909
#define DM_DISPLAYFREQUENCY
Definition: wingdi.h:1254
#define CC_ELLIPSES
Definition: wingdi.h:763
#define TC_OP_CHARACTER
Definition: wingdi.h:806
ULONG ulPhysicalOffsetX
Definition: ntgdityp.h:315
DHPDEV APIENTRY NtGdiGetDhpdev(IN HDEV hdev)
Definition: pdevobj.c:940
ULONG cBitsPixel
Definition: winddi.h:884
ULONG ulAspectX
Definition: winddi.h:894
PDEVMODEW NTAPI PDEVOBJ_pdmMatchDevMode(PPDEVOBJ ppdev, PDEVMODEW pdm)
Definition: pdevobj.c:304
#define CAPS1
Definition: mmsystem.h:934
#define RC_DI_BITMAP
Definition: wingdi.h:784
VOID FASTCALL SetLastNtError(NTSTATUS Status)
Definition: error.c:36
struct _EDD_DIRECTDRAW_GLOBAL * pEDDgpl
Definition: pdevobj.h:150
#define GDITAG_GDEVICE
Definition: tags.h:98
PFN_DrvMovePointer MovePointer
Definition: ntgdityp.h:593
#define HORZSIZE
Definition: wingdi.h:713
ULONG ulVertRes
Definition: pdevobj.h:111
#define _In_
Definition: no_sal2.h:204
#define PHYSICALOFFSETX
Definition: wingdi.h:736
static HDC hDC
Definition: 3dtext.c:33
DWORD dmDisplayFrequency
Definition: wingdi.h:1632
#define PHYSICALWIDTH
Definition: wingdi.h:734
#define PC_RECTANGLE
Definition: wingdi.h:796
#define VERTSIZE
Definition: wingdi.h:714
_Success_(return!=FALSE)
Definition: pdevobj.c:897
_SEH2_END
Definition: create.c:4424
#define InterlockedIncrement
Definition: armddk.h:53
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
Definition: dc.h:237
#define RC_STRETCHDIB
Definition: wingdi.h:755
#define NUMPENS
Definition: wingdi.h:722
#define LINECAPS
Definition: wingdi.h:769
static calc_node_t temp
Definition: rpn_ieee.c:38
#define DM_PELSHEIGHT
Definition: wingdi.h:1252
FLONG flGraphicsCaps
Definition: winddi.h:390
ULONG ulTextCaps
Definition: ntgdityp.h:317
PFN_DrvAssertMode AssertMode
Definition: ntgdityp.h:568
#define PALETTE_ShareUnlockPalette(ppal)
Definition: palette.h:59
PPDEVOBJ PDEVOBJ_AllocPDEV(VOID)
Definition: pdevobj.c:53
unsigned int * PULONG
Definition: retypes.h:1
VOID NTAPI GDIOBJ_vReferenceObjectByPointer(POBJ pobj)
Definition: gdiobj.c:729
ULONG ulPhysicalWidth
Definition: ntgdityp.h:313
#define VERTRES
Definition: wingdi.h:716
PSURFACE pSurface
Definition: pdevobj.h:125
#define RC_DIBTODEV
Definition: wingdi.h:749
ULONG ulPanningVertRes
Definition: winddi.h:912
GDIPOINTER Pointer
Definition: pdevobj.h:145
#define PC_POLYGON
Definition: wingdi.h:793
ULONG ulNumColors
Definition: winddi.h:886
#define DPRINT1
Definition: precomp.h:8
#define PC_SCANLINE
Definition: wingdi.h:798
DWORD dmPelsHeight
Definition: wingdi.h:1627
VOID NTAPI PDEVOBJ_vRefreshModeList(PPDEVOBJ ppdev)
Definition: pdevobj.c:263
ULONG ulAspectX
Definition: ntgdityp.h:306
#define OUT
Definition: typedefs.h:39
HSEMAPHORE WINAPI EngCreateSemaphore(VOID)
Definition: eng.c:75
FN_DrvEnablePDEV * PFN_DrvEnablePDEV
Definition: winddi.h:3558
unsigned int ULONG
Definition: retypes.h:1
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
ULONG ulColorMgmtCaps
Definition: ntgdityp.h:327
ENGAPI VOID APIENTRY EngMovePointer(_In_ SURFOBJ *pso, _In_ LONG x, _In_ LONG y, _In_ RECTL *prcl)
Definition: mouse.c:566
ULONG ulHorzSizeM
Definition: ntgdityp.h:294
#define LOGPIXELSY
Definition: wingdi.h:718
#define DM_BITSPERPEL
Definition: wingdi.h:1250
ULONG ulNumColors
Definition: ntgdityp.h:304
#define CC_WIDESTYLED
Definition: wingdi.h:766
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:6
PFN_DrvCompletePDEV CompletePDEV
Definition: ntgdityp.h:564
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099
#define _SEH2_GetExceptionCode()
Definition: pseh2_64.h:12
ULONG ulLogPixelsX
Definition: winddi.h:888
ULONG ulVertRes
Definition: winddi.h:883
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define GCAPS_PALMANAGED
Definition: winddi.h:341
ULONG ulSizePalette
Definition: ntgdityp.h:311
ULONG yPanningAlignment
Definition: ntgdityp.h:325
HSURF ahsurf[HS_DDI_MAX]
Definition: pdevobj.h:99
#define CC_CIRCLES
Definition: wingdi.h:760
ULONG ulLogPixelsX
Definition: ntgdityp.h:309
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define LC_INTERIORS
Definition: wingdi.h:777
PDEVMODEINFO pdevmodeInfo
Definition: pdevobj.h:68
PGRAPHICS_DEVICE pGraphicsDevice
Definition: pdevobj.h:128
#define TC_CP_STROKE
Definition: wingdi.h:808
#define CURVECAPS
Definition: wingdi.h:758
#define NUMFONTS
Definition: wingdi.h:723
FORCEINLINE VOID SwitchPointer(_Inout_ PVOID pvPointer1, _Inout_ PVOID pvPointer2)
Definition: pdevobj.c:436
#define GDITAG_PDEV
Definition: tags.h:74
LONG cy
Definition: windef.h:320
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
FLONG flGraphicsCaps2
Definition: winddi.h:399
#define MmSystemRangeStart
Definition: mm.h:32
_In_ HDEV hdev
Definition: winddi.h:3449
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:27
ULONG iDefaultMode
Definition: pdevobj.h:77
ULONG ulTechnology
Definition: ntgdityp.h:293
#define APIENTRY
Definition: api.h:79
PPDEVOBJ NTAPI EngpGetPDEV(_In_opt_ PUNICODE_STRING pustrDeviceName)
Definition: pdevobj.c:591
PPDEVOBJ NTAPI DbgLookupDHPDEV(DHPDEV dhpdev)
VOID NTAPI PDEVOBJ_vRelease(PPDEVOBJ ppdev)
Definition: pdevobj.c:93
#define PLANES
Definition: wingdi.h:720
#define NT_ASSERT
Definition: rtlfuncs.h:3312