ReactOS  0.4.15-dev-1070-ge1a01de
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)
 
INIT_FUNCTION 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 595 of file pdevobj.c.

597 {
598  UNICODE_STRING ustrCurrent;
599  PPDEVOBJ ppdev;
600  PGRAPHICS_DEVICE pGraphicsDevice;
601 
602  /* Acquire PDEV lock */
604 
605  /* Did the caller pass a device name? */
606  if (pustrDeviceName)
607  {
608  /* Loop all present PDEVs */
609  for (ppdev = gppdevList; ppdev; ppdev = ppdev->ppdevNext)
610  {
611  /* Get a pointer to the GRAPHICS_DEVICE */
612  pGraphicsDevice = ppdev->pGraphicsDevice;
613 
614  /* Compare the name */
615  RtlInitUnicodeString(&ustrCurrent, pGraphicsDevice->szWinDeviceName);
616  if (RtlEqualUnicodeString(pustrDeviceName, &ustrCurrent, FALSE))
617  {
618  /* Found! */
619  break;
620  }
621  }
622  }
623  else
624  {
625  /* Otherwise use the primary PDEV */
626  ppdev = gppdevPrimary;
627  }
628 
629  /* Did we find one? */
630  if (ppdev)
631  {
632  /* Yes, reference the PDEV */
633  PDEVOBJ_vReference(ppdev);
634  }
635  else
636  {
637  /* No, create a new PDEV for the given device */
638  ppdev = EngpCreatePDEV(pustrDeviceName, NULL);
639  if (ppdev)
640  {
641  /* Insert the PDEV into the list */
642  ppdev->ppdevNext = gppdevList;
643  gppdevList = ppdev;
644 
645  /* Set as primary PDEV, if we don't have one yet */
646  if (!gppdevPrimary)
647  {
648  gppdevPrimary = ppdev;
650  }
651  }
652  }
653 
654  /* Release PDEV lock */
656 
657  return ppdev;
658 }
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)
smooth NULL
Definition: ftsmooth.c:416
#define DISPLAY_DEVICE_PRIMARY_DEVICE
Definition: wingdi.h:1397
static PPDEVOBJ gppdevList
Definition: pdevobj.c:15
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()

INIT_FUNCTION 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
return STATUS_SUCCESS
Definition: btrfs.c:3014

Referenced by DriverEntry().

◆ PDEVOBJ_bSwitchMode()

BOOL NTAPI PDEVOBJ_bSwitchMode ( PPDEVOBJ  ppdev,
PDEVMODEW  pdm 
)

Definition at line 509 of file pdevobj.c.

512 {
513  UNICODE_STRING ustrDevice;
514  PPDEVOBJ ppdevTmp;
516  BOOL retval = FALSE;
517 
518  /* Lock the PDEV */
520 
521  /* And everything else */
523 
524  DPRINT1("PDEVOBJ_bSwitchMode, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
525 
526  // Lookup the GraphicsDevice + select DEVMODE
527  // pdm = PDEVOBJ_pdmMatchDevMode(ppdev, pdm);
528 
529  /* 1. Temporarily disable the current PDEV and reset video to its default mode */
530  if (!ppdev->pfn.AssertMode(ppdev->dhpdev, FALSE))
531  {
532  DPRINT1("DrvAssertMode(FALSE) failed\n");
533  goto leave;
534  }
535 
536  /* 2. Create new PDEV */
538  ppdevTmp = EngpCreatePDEV(&ustrDevice, pdm);
539  if (!ppdevTmp)
540  {
541  DPRINT1("Failed to create a new PDEV\n");
542  goto leave2;
543  }
544 
545  /* 3. Create a new surface */
546  pSurface = PDEVOBJ_pSurface(ppdevTmp);
547  if (!pSurface)
548  {
549  DPRINT1("PDEVOBJ_pSurface failed\n");
550  PDEVOBJ_vRelease(ppdevTmp);
551  goto leave2;
552  }
553 
554  /* 4. Get DirectDraw information */
555  /* 5. Enable DirectDraw Not traced */
556  /* 6. Copy old PDEV state to new PDEV instance */
557 
558  /* 7. Switch the PDEVs */
559  PDEVOBJ_vSwitchPdev(ppdev, ppdevTmp);
560 
561  /* 8. Disable DirectDraw */
562 
563  PDEVOBJ_vRelease(ppdevTmp);
564 
565  /* Update primary display capabilities */
566  if (ppdev == gppdevPrimary)
567  {
568  PDEVOBJ_vGetDeviceCaps(ppdev, &GdiHandleTable->DevCaps);
569  }
570 
571  /* Success! */
572  retval = TRUE;
573 
574 leave2:
575  /* Set the new video mode, or restore the original one in case of failure */
576  if (!ppdev->pfn.AssertMode(ppdev->dhpdev, TRUE))
577  {
578  DPRINT1("DrvAssertMode(TRUE) failed\n");
579  }
580 
581 leave:
582  /* Unlock everything else */
584  /* Unlock the PDEV */
586 
587  DPRINT1("leave, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
588 
589  return retval;
590 }
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)
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:683
#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:455
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
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
smooth NULL
Definition: ftsmooth.c:416
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
#define DM_PELSHEIGHT
Definition: wingdi.h:1269
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
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#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)
smooth NULL
Definition: ftsmooth.c:416
static PPDEVOBJ gppdevList
Definition: pdevobj.c:15
static VOID PDEVOBJ_vDeletePDEV(PPDEVOBJ ppdev)
Definition: pdevobj.c:82
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define InterlockedDecrement
Definition: armddk.h:52
#define PALETTE_ShareUnlockPalette(ppal)
Definition: palette.h:59

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

Variable Documentation

◆ gppdevPrimary