ReactOS  0.4.15-dev-3181-g4acf100
pdevobj.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _GDIPOINTER
 
struct  _DEVMODEINFO
 
struct  _DEVMODEENTRY
 
struct  _GRAPHICS_DEVICE
 
struct  _PDEVOBJ
 

Typedefs

typedef struct _GDIPOINTER GDIPOINTER
 
typedef struct _GDIPOINTERPGDIPOINTER
 
typedef struct _DEVMODEINFO DEVMODEINFO
 
typedef struct _DEVMODEINFOPDEVMODEINFO
 
typedef struct _DEVMODEENTRY DEVMODEENTRY
 
typedef struct _DEVMODEENTRYPDEVMODEENTRY
 
typedef struct _GRAPHICS_DEVICE GRAPHICS_DEVICE
 
typedef struct _GRAPHICS_DEVICEPGRAPHICS_DEVICE
 
typedef struct _PDEVOBJ PDEVOBJ
 
typedef struct _PDEVOBJPPDEVOBJ
 

Enumerations

enum  _PDEVFLAGS {
  PDEV_DISPLAY = 0x00000001, PDEV_HARDWARE_POINTER = 0x00000002, PDEV_SOFTWARE_POINTER = 0x00000004, PDEV_GOTFONTS = 0x00000040,
  PDEV_PRINTER = 0x00000080, PDEV_ALLOCATEDBRUSHES = 0x00000100, PDEV_HTPAL_IS_DEVPAL = 0x00000200, PDEV_DISABLED = 0x00000400,
  PDEV_SYNCHRONIZE_ENABLED = 0x00000800, PDEV_FONTDRIVER = 0x00002000, PDEV_GAMMARAMP_TABLE = 0x00004000, PDEV_UMPD = 0x00008000,
  PDEV_SHARED_DEVLOCK = 0x00010000, PDEV_META_DEVICE = 0x00020000, PDEV_DRIVER_PUNTED_CALL = 0x00040000, PDEV_CLONE_DEVICE = 0x00080000
}
 

Functions

PPDEVOBJ NTAPI EngpGetPDEV (_In_opt_ PUNICODE_STRING pustrDevice)
 
FORCEINLINE VOID PDEVOBJ_vReference (_In_ PPDEVOBJ ppdev)
 
VOID NTAPI PDEVOBJ_vRelease (_Inout_ PPDEVOBJ ppdev)
 
PSURFACE NTAPI PDEVOBJ_pSurface (_In_ PPDEVOBJ ppdev)
 
VOID NTAPI PDEVOBJ_vGetDeviceCaps (_In_ PPDEVOBJ ppdev, _Out_ PDEVCAPS pDevCaps)
 
NTSTATUS NTAPI InitPDEVImpl (VOID)
 
PSIZEL FASTCALL PDEVOBJ_sizl (_In_ PPDEVOBJ ppdev, _Out_ PSIZEL psizl)
 
BOOL NTAPI PDEVOBJ_bSwitchMode (PPDEVOBJ ppdev, PDEVMODEW pdm)
 
PDEVMODEW NTAPI PDEVOBJ_pdmMatchDevMode (PPDEVOBJ ppdev, PDEVMODEW pdm)
 

Variables

PPDEVOBJ gppdevPrimary
 

Typedef Documentation

◆ DEVMODEENTRY

◆ DEVMODEINFO

◆ GDIPOINTER

◆ GRAPHICS_DEVICE

◆ PDEVMODEENTRY

◆ PDEVMODEINFO

◆ PDEVOBJ

◆ PGDIPOINTER

◆ PGRAPHICS_DEVICE

◆ PPDEVOBJ

Enumeration Type Documentation

◆ _PDEVFLAGS

Enumerator
PDEV_DISPLAY 
PDEV_HARDWARE_POINTER 
PDEV_SOFTWARE_POINTER 
PDEV_GOTFONTS 
PDEV_PRINTER 
PDEV_ALLOCATEDBRUSHES 
PDEV_HTPAL_IS_DEVPAL 
PDEV_DISABLED 
PDEV_SYNCHRONIZE_ENABLED 
PDEV_FONTDRIVER 
PDEV_GAMMARAMP_TABLE 
PDEV_UMPD 
PDEV_SHARED_DEVLOCK 
PDEV_META_DEVICE 
PDEV_DRIVER_PUNTED_CALL 
PDEV_CLONE_DEVICE 

Definition at line 5 of file pdevobj.h.

6 {
7  PDEV_DISPLAY = 0x00000001, /* Display device */
8  PDEV_HARDWARE_POINTER = 0x00000002, /* Supports hardware cursor */
9  PDEV_SOFTWARE_POINTER = 0x00000004,
10  PDEV_GOTFONTS = 0x00000040, /* Has font driver */
11  PDEV_PRINTER = 0x00000080,
12  PDEV_ALLOCATEDBRUSHES = 0x00000100,
13  PDEV_HTPAL_IS_DEVPAL = 0x00000200,
14  PDEV_DISABLED = 0x00000400,
15  PDEV_SYNCHRONIZE_ENABLED = 0x00000800,
16  PDEV_FONTDRIVER = 0x00002000, /* Font device */
17  PDEV_GAMMARAMP_TABLE = 0x00004000,
18  PDEV_UMPD = 0x00008000,
19  PDEV_SHARED_DEVLOCK = 0x00010000,
20  PDEV_META_DEVICE = 0x00020000,
21  PDEV_DRIVER_PUNTED_CALL = 0x00040000, /* Driver calls back to GDI engine */
22  PDEV_CLONE_DEVICE = 0x00080000
23 };

Function Documentation

◆ EngpGetPDEV()

PPDEVOBJ NTAPI EngpGetPDEV ( _In_opt_ PUNICODE_STRING  pustrDevice)

Definition at line 596 of file pdevobj.c.

598 {
599  UNICODE_STRING ustrCurrent;
600  PPDEVOBJ ppdev;
601  PGRAPHICS_DEVICE pGraphicsDevice;
602 
603  /* Acquire PDEV lock */
605 
606  /* Did the caller pass a device name? */
607  if (pustrDeviceName)
608  {
609  /* Loop all present PDEVs */
610  for (ppdev = gppdevList; ppdev; ppdev = ppdev->ppdevNext)
611  {
612  /* Get a pointer to the GRAPHICS_DEVICE */
613  pGraphicsDevice = ppdev->pGraphicsDevice;
614 
615  /* Compare the name */
616  RtlInitUnicodeString(&ustrCurrent, pGraphicsDevice->szWinDeviceName);
617  if (RtlEqualUnicodeString(pustrDeviceName, &ustrCurrent, FALSE))
618  {
619  /* Found! */
620  break;
621  }
622  }
623  }
624  else
625  {
626  /* Otherwise use the primary PDEV */
627  ppdev = gppdevPrimary;
628  }
629 
630  /* Did we find one? */
631  if (ppdev)
632  {
633  /* Yes, reference the PDEV */
634  PDEVOBJ_vReference(ppdev);
635  }
636  else
637  {
638  /* No, create a new PDEV for the given device */
639  ppdev = EngpCreatePDEV(pustrDeviceName, NULL);
640  if (ppdev)
641  {
642  /* Insert the PDEV into the list */
643  ppdev->ppdevNext = gppdevList;
644  gppdevList = ppdev;
645 
646  /* Set as primary PDEV, if we don't have one yet */
647  if (!gppdevPrimary)
648  {
649  gppdevPrimary = ppdev;
651  }
652  }
653  }
654 
655  /* Release PDEV lock */
657 
658  return ppdev;
659 }
VOID WINAPI EngReleaseSemaphore(IN HSEMAPHORE hsem)
Definition: eng.c:235
WCHAR szWinDeviceName[CCHDEVICENAME/2]
Definition: pdevobj.h:60
FORCEINLINE VOID PDEVOBJ_vReference(_In_ PPDEVOBJ ppdev)
Definition: pdevobj.h:167
PPDEVOBJ gppdevPrimary
Definition: pdevobj.c:13
DWORD StateFlags
Definition: pdevobj.h:66
static PPDEVOBJ EngpCreatePDEV(PUNICODE_STRING pustrDeviceName, PDEVMODEW pdm)
Definition: pdevobj.c:346
struct _PDEVOBJ * ppdevNext
Definition: pdevobj.h:85
#define FALSE
Definition: types.h:117
static HSEMAPHORE ghsemPDEV
Definition: pdevobj.c:16
ENGAPI VOID APIENTRY EngAcquireSemaphore(_Inout_ HSEMAPHORE hsem)
#define DISPLAY_DEVICE_PRIMARY_DEVICE
Definition: wingdi.h:1397
static PPDEVOBJ gppdevList
Definition: pdevobj.c:15
#define NULL
Definition: types.h:112
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
PGRAPHICS_DEVICE pGraphicsDevice
Definition: pdevobj.h:128
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)

Referenced by GreCreateCompatibleDC(), GreOpenDCW(), NtGdiExtEscape(), UserChangeDisplaySettings(), UserEnumCurrentDisplaySettings(), and UserEnumDisplaySettings().

◆ InitPDEVImpl()

NTSTATUS NTAPI InitPDEVImpl ( VOID  )

Definition at line 21 of file pdevobj.c.

22 {
25  return STATUS_SUCCESS;
26 }
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
static HSEMAPHORE ghsemPDEV
Definition: pdevobj.c:16
HSEMAPHORE WINAPI EngCreateSemaphore(VOID)
Definition: eng.c:75
#define STATUS_SUCCESS
Definition: shellext.h:65

Referenced by DriverEntry().

◆ PDEVOBJ_bSwitchMode()

BOOL NTAPI PDEVOBJ_bSwitchMode ( PPDEVOBJ  ppdev,
PDEVMODEW  pdm 
)

Definition at line 510 of file pdevobj.c.

513 {
514  UNICODE_STRING ustrDevice;
515  PPDEVOBJ ppdevTmp;
517  BOOL retval = FALSE;
518 
519  /* Lock the PDEV */
521 
522  /* And everything else */
524 
525  DPRINT1("PDEVOBJ_bSwitchMode, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
526 
527  // Lookup the GraphicsDevice + select DEVMODE
528  // pdm = PDEVOBJ_pdmMatchDevMode(ppdev, pdm);
529 
530  /* 1. Temporarily disable the current PDEV and reset video to its default mode */
531  if (!ppdev->pfn.AssertMode(ppdev->dhpdev, FALSE))
532  {
533  DPRINT1("DrvAssertMode(FALSE) failed\n");
534  goto leave;
535  }
536 
537  /* 2. Create new PDEV */
539  ppdevTmp = EngpCreatePDEV(&ustrDevice, pdm);
540  if (!ppdevTmp)
541  {
542  DPRINT1("Failed to create a new PDEV\n");
543  goto leave2;
544  }
545 
546  /* 3. Create a new surface */
547  pSurface = PDEVOBJ_pSurface(ppdevTmp);
548  if (!pSurface)
549  {
550  DPRINT1("PDEVOBJ_pSurface failed\n");
551  PDEVOBJ_vRelease(ppdevTmp);
552  goto leave2;
553  }
554 
555  /* 4. Get DirectDraw information */
556  /* 5. Enable DirectDraw Not traced */
557  /* 6. Copy old PDEV state to new PDEV instance */
558 
559  /* 7. Switch the PDEVs */
560  PDEVOBJ_vSwitchPdev(ppdev, ppdevTmp);
561 
562  /* 8. Disable DirectDraw */
563 
564  PDEVOBJ_vRelease(ppdevTmp);
565 
566  /* Update primary display capabilities */
567  if (ppdev == gppdevPrimary)
568  {
569  PDEVOBJ_vGetDeviceCaps(ppdev, &GdiHandleTable->DevCaps);
570  }
571 
572  /* Success! */
573  retval = TRUE;
574 
575 leave2:
576  /* Set the new video mode, or restore the original one in case of failure */
577  if (!ppdev->pfn.AssertMode(ppdev->dhpdev, TRUE))
578  {
579  DPRINT1("DrvAssertMode(TRUE) failed\n");
580  }
581 
582 leave:
583  /* Unlock everything else */
585  /* Unlock the PDEV */
587 
588  DPRINT1("leave, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
589 
590  return retval;
591 }
DHPDEV dhpdev
Definition: pdevobj.h:121
VOID WINAPI EngReleaseSemaphore(IN HSEMAPHORE hsem)
Definition: eng.c:235
WCHAR szWinDeviceName[CCHDEVICENAME/2]
Definition: pdevobj.h:60
#define TRUE
Definition: types.h:120
PSURFACE NTAPI PDEVOBJ_pSurface(PPDEVOBJ ppdev)
Definition: pdevobj.c:234
PPDEVOBJ gppdevPrimary
Definition: pdevobj.c:13
static PPDEVOBJ EngpCreatePDEV(PUNICODE_STRING pustrDeviceName, PDEVMODEW pdm)
Definition: pdevobj.c:346
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
static HSEMAPHORE ghsemPDEV
Definition: pdevobj.c:16
ENGAPI VOID APIENTRY EngAcquireSemaphore(_Inout_ HSEMAPHORE hsem)
#define leave
Definition: seh.h:23
HSEMAPHORE hsemDevLock
Definition: pdevobj.h:91
DRIVER_FUNCTIONS pfn
Definition: pdevobj.h:139
VOID NTAPI PDEVOBJ_vGetDeviceCaps(IN PPDEVOBJ ppdev, OUT PDEVCAPS pDevCaps)
Definition: pdevobj.c:684
#define GdiHandleTable
Definition: win32nt.h:35
_In_ DD_SURFACE_LOCAL * pSurface
Definition: winddi.h:3481
VOID NTAPI PDEVOBJ_vSwitchPdev(PPDEVOBJ ppdev, PPDEVOBJ ppdev2)
Definition: pdevobj.c:456
PFN_DrvAssertMode AssertMode
Definition: ntgdityp.h:574
PSURFACE pSurface
Definition: pdevobj.h:125
#define DPRINT1
Definition: precomp.h:8
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
VOID NTAPI PDEVOBJ_vRelease(_Inout_ PPDEVOBJ ppdev)
Definition: pdevobj.c:93
PGRAPHICS_DEVICE pGraphicsDevice
Definition: pdevobj.h:128

Referenced by UserChangeDisplaySettings(), and UserRefreshDisplay().

◆ PDEVOBJ_pdmMatchDevMode()

PDEVMODEW NTAPI PDEVOBJ_pdmMatchDevMode ( PPDEVOBJ  ppdev,
PDEVMODEW  pdm 
)

Definition at line 307 of file pdevobj.c.

310 {
311  PGRAPHICS_DEVICE pGraphicsDevice;
312  PDEVMODEW pdmCurrent;
313  ULONG i;
314  DWORD dwFields;
315 
316  pGraphicsDevice = ppdev->pGraphicsDevice;
317 
318  for (i = 0; i < pGraphicsDevice->cDevModes; i++)
319  {
320  pdmCurrent = pGraphicsDevice->pDevModeList[i].pdm;
321 
322  /* Compare asked DEVMODE fields
323  * Only compare those that are valid in both DEVMODE structs */
324  dwFields = pdmCurrent->dmFields & pdm->dmFields;
325 
326  /* For now, we only need those */
327  if ((dwFields & DM_BITSPERPEL) &&
328  (pdmCurrent->dmBitsPerPel != pdm->dmBitsPerPel)) continue;
329  if ((dwFields & DM_PELSWIDTH) &&
330  (pdmCurrent->dmPelsWidth != pdm->dmPelsWidth)) continue;
331  if ((dwFields & DM_PELSHEIGHT) &&
332  (pdmCurrent->dmPelsHeight != pdm->dmPelsHeight)) continue;
333  if ((dwFields & DM_DISPLAYFREQUENCY) &&
334  (pdmCurrent->dmDisplayFrequency != pdm->dmDisplayFrequency)) continue;
335 
336  /* Match! Return the DEVMODE */
337  return pdmCurrent;
338  }
339 
340  /* Nothing found */
341  return NULL;
342 }
DWORD dmFields
Definition: wingdi.h:1621
PDEVMODEENTRY pDevModeList
Definition: pdevobj.h:70
DWORD dmBitsPerPel
Definition: wingdi.h:1646
PDEVMODEW pdm
Definition: pdevobj.h:53
#define DM_PELSWIDTH
Definition: wingdi.h:1268
ULONG cDevModes
Definition: pdevobj.h:69
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD dmPelsWidth
Definition: wingdi.h:1647
#define DM_DISPLAYFREQUENCY
Definition: wingdi.h:1271
DWORD dmDisplayFrequency
Definition: wingdi.h:1653
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
#define DM_PELSHEIGHT
Definition: wingdi.h:1269
#define NULL
Definition: types.h:112
DWORD dmPelsHeight
Definition: wingdi.h:1648
unsigned int ULONG
Definition: retypes.h:1
#define DM_BITSPERPEL
Definition: wingdi.h:1267
PGRAPHICS_DEVICE pGraphicsDevice
Definition: pdevobj.h:128

Referenced by EngpCreatePDEV(), PDEVOBJ_vRefreshModeList(), and UserChangeDisplaySettings().

◆ PDEVOBJ_pSurface()

PSURFACE NTAPI PDEVOBJ_pSurface ( _In_ PPDEVOBJ  ppdev)

◆ PDEVOBJ_sizl()

PSIZEL FASTCALL PDEVOBJ_sizl ( _In_ PPDEVOBJ  ppdev,
_Out_ PSIZEL  psizl 
)

◆ PDEVOBJ_vGetDeviceCaps()

VOID NTAPI PDEVOBJ_vGetDeviceCaps ( _In_ PPDEVOBJ  ppdev,
_Out_ PDEVCAPS  pDevCaps 
)

◆ PDEVOBJ_vReference()

FORCEINLINE VOID PDEVOBJ_vReference ( _In_ PPDEVOBJ  ppdev)

Definition at line 167 of file pdevobj.h.

169 {
170  ASSERT(ppdev);
171 
172  /* Fail if the PDEV is being destroyed */
173  if (ppdev->cPdevRefs == 0)
174  {
175  ASSERT(FALSE);
176  return;
177  }
178  ASSERT(ppdev->cPdevRefs > 0);
179 
180  InterlockedIncrement(&ppdev->cPdevRefs);
181 }
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:44
#define InterlockedIncrement
Definition: armddk.h:53

Referenced by EngpGetPDEV(), GreCreateCompatibleDC(), NtGdiExtEscape(), NtGdiSaveDC(), and UserRefreshDisplay().

◆ PDEVOBJ_vRelease()

VOID NTAPI PDEVOBJ_vRelease ( _Inout_ PPDEVOBJ  ppdev)

Definition at line 93 of file pdevobj.c.

95 {
96  /* Lock loader */
98 
99  /* Decrease reference count */
100  InterlockedDecrement(&ppdev->cPdevRefs);
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 */
110  SURFACE_ShareUnlockSurface(ppdev->pSurface);
111  ppdev->pfn.DisableSurface(ppdev->dhpdev);
112  }
113 
114  /* Do we have a palette? */
115  if (ppdev->ppalSurf)
116  {
117  PALETTE_ShareUnlockPalette(ppdev->ppalSurf);
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  {
130  gppdevList = ppdev->ppdevNext;
131  }
132  else
133  {
134  PPDEVOBJ ppdevCurrent = gppdevList;
135  BOOL found = FALSE;
136  while (!found && ppdevCurrent->ppdevNext)
137  {
138  if (ppdevCurrent->ppdevNext == ppdev)
139  found = TRUE;
140  else
141  ppdevCurrent = ppdevCurrent->ppdevNext;
142  }
143  if (found)
144  ppdevCurrent->ppdevNext = ppdev->ppdevNext;
145  }
146 
147  /* Is this the primary one ? */
148  if (ppdev == gppdevPrimary)
150 
151  /* Free it */
152  PDEVOBJ_vDeletePDEV(ppdev);
153  }
154 
155  /* Unlock loader */
157 }
VOID WINAPI EngReleaseSemaphore(IN HSEMAPHORE hsem)
Definition: eng.c:235
#define SURFACE_ShareUnlockSurface(pBMObj)
Definition: surface.h:102
#define TRUE
Definition: types.h:120
PPDEVOBJ gppdevPrimary
Definition: pdevobj.c:13
struct _PDEVOBJ * ppdevNext
Definition: pdevobj.h:85
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
static HSEMAPHORE ghsemPDEV
Definition: pdevobj.c:16
ENGAPI VOID APIENTRY EngAcquireSemaphore(_Inout_ HSEMAPHORE hsem)
static PPDEVOBJ gppdevList
Definition: pdevobj.c:15
#define ASSERT(a)
Definition: mode.c:44
static VOID PDEVOBJ_vDeletePDEV(PPDEVOBJ ppdev)
Definition: pdevobj.c:82
#define InterlockedDecrement
Definition: armddk.h:52
#define PALETTE_ShareUnlockPalette(ppal)
Definition: palette.h:59
#define NULL
Definition: types.h:112

Referenced by DC_vCleanup(), EngpCreatePDEV(), GreCreateCompatibleDC(), GreOpenDCW(), NtGdiExtEscape(), PDEVOBJ_bSwitchMode(), UserChangeDisplaySettings(), UserEnumCurrentDisplaySettings(), UserEnumDisplaySettings(), and UserRefreshDisplay().

Variable Documentation

◆ gppdevPrimary