ReactOS 0.4.15-dev-7788-g1ad9096
ntgdihdl.h
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Win32 Graphical Subsystem (WIN32K)
4 * FILE: win32ss/include/ntgdihdl.h
5 * PURPOSE: Win32 Shared GDI Handle/Object Types
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7 */
8
9/* INCLUDES ******************************************************************/
10
11#ifndef _NTGDIHDL_
12#define _NTGDIHDL_
13
14#include <winddi.h>
15
16/* DEFINES *******************************************************************/
17
18/* GDI handle table can hold 0x10000 handles */
19#define GDI_HANDLE_COUNT 0x10000
20#define GDI_CFONT_MAX 16
21
22/* Handle Masks and shifts */
23#define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1)
24#define GDI_HANDLE_TYPE_MASK 0x007f0000
25#define GDI_HANDLE_BASETYPE_MASK 0x001f0000
26#define GDI_HANDLE_EXTYPE_MASK 0x00600000
27#define GDI_HANDLE_STOCK_MASK 0x00800000
28#define GDI_HANDLE_REUSE_MASK 0xff000000
29#define GDI_HANDLE_UPPER_MASK (GDI_HANDLE_TYPE_MASK|GDI_HANDLE_STOCK_MASK|GDI_HANDLE_REUSE_MASK)
30#define GDI_HANDLE_REUSECNT_SHIFT 24
31#define GDI_HANDLE_BASETYPE_SHIFT 16
32
33#define GDI_ENTRY_STOCK_MASK 0x00000080
34#define GDI_ENTRY_BASETYPE_MASK 0x001f0000
35#define GDI_ENTRY_UPPER_SHIFT 16
36
37/* GDI Entry Flags */
38#define GDI_ENTRY_UNDELETABLE 1 /* Mark Object as nonremovable */
39#define GDI_ENTRY_DELETING 2 /* Used when deleting Font Objects */
40#define GDI_ENTRY_VALIDATE_VIS 4 /* Validating Visible region data */
41#define GDI_ENTRY_ALLOCATE_LAL 0x80 /* Object Allocated with Look aside List */
42
49#define GDI_OBJECT_TYPE_DC 0x00010000
50#define GDI_OBJECT_TYPE_DD_SURFACE 0x00030000 /* Should be moved away from gdi objects */
51#define GDI_OBJECT_TYPE_REGION 0x00040000
52#define GDI_OBJECT_TYPE_BITMAP 0x00050000
53#define GDI_OBJECT_TYPE_CLIOBJ 0x00060000
54#define GDI_OBJECT_TYPE_PATH 0x00070000
55#define GDI_OBJECT_TYPE_PALETTE 0x00080000
56#define GDI_OBJECT_TYPE_COLORSPACE 0x00090000
57#define GDI_OBJECT_TYPE_FONT 0x000a0000
58
59#define GDI_OBJECT_TYPE_BRUSH 0x00100000
60#define GDI_OBJECT_TYPE_DD_VIDEOPORT 0x00120000 /* Should be moved away from gdi objects */
61#define GDI_OBJECT_TYPE_DD_MOTIONCOMP 0x00140000 /* Should be moved away from gdi objects */
62#define GDI_OBJECT_TYPE_ENUMFONT 0x00160000
63#define GDI_OBJECT_TYPE_DRIVEROBJ 0x001C0000
64
65/* Confrim on XP value is taken from NtGdiCreateDirectDrawObject */
66#define GDI_OBJECT_TYPE_DIRECTDRAW 0x00200000
67
68/* Following object types are derived types from the above base types
69 use 0x001f0000 as mask to get the base type */
70#define GDI_OBJECT_TYPE_EMF 0x00210000
71
72#define GDI_OBJECT_TYPE_METAFILE 0x00260000
73#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000
74#define GDI_OBJECT_TYPE_PEN 0x00300000
75#define GDI_OBJECT_TYPE_EXTPEN 0x00500000
76#define GDI_OBJECT_TYPE_METADC 0x00660000
77/*#define GDI_OBJECT_TYPE_DD_PALETTE 0x00630000 unused at the moment, other value required */
78/*#define GDI_OBJECT_TYPE_DD_CLIPPER 0x00640000 unused at the moment, other value required */
79
80/* Following object types made up for ROS */
81#define GDI_OBJECT_TYPE_DONTCARE 0x007f0000
83#define GDI_OBJECT_TYPE_SILENT 0x80000000
86/* Handle macros */
87#define GDI_HANDLE_CREATE(i, t) \
88 ((HANDLE)(((i) & GDI_HANDLE_INDEX_MASK) | ((t) & GDI_HANDLE_TYPE_MASK)))
89
90#define GDI_HANDLE_GET_INDEX(h) \
91 (((ULONG_PTR)(h)) & GDI_HANDLE_INDEX_MASK)
92
93#define GDI_HANDLE_GET_TYPE(h) \
94 (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK)
95
96#define GDI_HANDLE_IS_TYPE(h, t) \
97 ((t) == (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK))
98
99#define GDI_HANDLE_IS_STOCKOBJ(h) \
100 (0 != (((ULONG_PTR)(h)) & GDI_HANDLE_STOCK_MASK))
101
102#define GDI_HANDLE_SET_STOCKOBJ(h) \
103 ((h) = (HANDLE)(((ULONG_PTR)(h)) | GDI_HANDLE_STOCK_MASK))
104
105#define GDI_HANDLE_GET_UPPER(h) \
106 (((ULONG_PTR)(h)) & GDI_HANDLE_UPPER_MASK)
107
108#define GDI_HANDLE_GET_REUSECNT(h) \
109 (((ULONG_PTR)(h)) >> GDI_HANDLE_REUSECNT_SHIFT)
110
111#define GDI_OBJECT_GET_TYPE_INDEX(t) \
112 ((t & GDI_HANDLE_BASETYPE_MASK) >> GDI_HANDLE_BASETYPE_SHIFT)
113
114/* Gdi Object Handle Management Pid lock masking sets. */
115/* Ref: used with DxEngSetDCOwner */
116#define GDI_OBJ_HMGR_PUBLIC 0 /* Public owner, Open access? */
117#define GDI_OBJ_HMGR_POWNED 0x80000002 /* Set to current owner. */
118#define GDI_OBJ_HMGR_NONE 0x80000012 /* No owner, Open access? */
119#define GDI_OBJ_HMGR_RESTRICTED 0x80000022 /* Restricted? */
120
121
122/* DC_ATTR Dirty Flags */
123#define DIRTY_FILL 0x00000001
124#define DIRTY_LINE 0x00000002
125#define DIRTY_TEXT 0x00000004
126#define DIRTY_BACKGROUND 0x00000008
127#define DIRTY_CHARSET 0x00000010
128#define SLOW_WIDTHS 0x00000020
129#define DC_CACHED_TM_VALID 0x00000040
130#define DISPLAY_DC 0x00000080
131#define DIRTY_PTLCURRENT 0x00000100
132#define DIRTY_PTFXCURRENT 0x00000200
133#define DIRTY_STYLESTATE 0x00000400
134#define DC_PLAYMETAFILE 0x00000800
135#define DC_BRUSH_DIRTY 0x00001000
136#define DC_PEN_DIRTY 0x00002000
137#define DC_DIBSECTION 0x00004000
138#define DC_LAST_CLIPRGN_VALID 0x00008000
139#define DC_PRIMARY_DISPLAY 0x00010000
140#define DC_ICM_NOT_CALIBRATED 0x00020000
141#define DC_ICM_BRUSH_DIRTY 0x00040000
142#define DC_ICM_PEN_DIRTY 0x00080000
143#define DC_ICM_NOT_SET 0x00100000
144#define DC_MODE_DIRTY 0x00200000
145#define DC_FONTTEXT_DIRTY 0x00400000
146
147/* DC_ATTR LCD Flags */
148#define LDC_LDC 0x00000001 /* (init) local DC other than a normal DC */
149#define LDC_EMFLDC 0x00000002 /* Enhance Meta File local DC */
150#define LDC_SAPCALLBACK 0x00000020
151#define LDC_INIT_DOCUMENT 0x00000040
152#define LDC_INIT_PAGE 0x00000080
153#define LDC_STARTPAGE 0x00000100
154#define LDC_NEXTBAND 0x00000200
155#define LDC_FONTHASH 0x00001000
156#define LDC_CLOCKWISE 0x00002000
157#define LDC_NEWFONT 0x00008000
158#define LDC_KILL_DOCUMENT 0x00010000
159#define LDC_META_PRINT 0x00020000
160#define LDC_DIRECT 0x00040000
161#define LDC_RESET_BANDING 0x00080000
162#define LDC_DOWNLOADFONTS 0x00100000
163#define LDC_RESETDC 0x00200000
164#define LDC_UFIMAP 0x00400000
165#define LDC_INFODC 0x01000000 /* If CreateIC was passed. */
166#define LDC_DEVCAPS 0x02000000
167#define LDC_XPS_PASS 0x08000000 // Guessing, not sure.
168#define LDC_ATENDPAGE 0x10000000
169#define LDC_COLORPAGE 0x20000000
170
171#define UFIHASHTABLESIZE 64
172
173/* DC_ATTR Xform Flags */
174#define METAFILE_TO_WORLD_IDENTITY 0x00000001
175#define WORLD_TO_PAGE_IDENTITY 0x00000002
176#define DEVICE_TO_PAGE_INVALID 0x00000008
177#define DEVICE_TO_WORLD_INVALID 0x00000010
178#define WORLD_TRANSFORM_SET 0x00000020
179#define POSITIVE_Y_IS_UP 0x00000040
180#define INVALIDATE_ATTRIBUTES 0x00000080
181#define PTOD_EFM11_NEGATIVE 0x00000100
182#define PTOD_EFM22_NEGATIVE 0x00000200
183#define ISO_OR_ANISO_MAP_MODE 0x00000400
184#define PAGE_TO_DEVICE_IDENTITY 0x00000800
185#define PAGE_TO_DEVICE_SCALE_IDENTITY 0x00001000
186#define PAGE_XLATE_CHANGED 0x00002000
187#define PAGE_EXTENTS_CHANGED 0x00004000
188#define WORLD_XFORM_CHANGED 0x00008000
189
190/* BRUSH/RGN_ATTR Flags */
191#define ATTR_CACHED 0x00000001
192#define ATTR_TO_BE_DELETED 0x00000002
193#define ATTR_NEW_COLOR 0x00000004
194#define ATTR_CANT_SELECT 0x00000008
195#define ATTR_RGN_VALID 0x00000010
196#define ATTR_RGN_DIRTY 0x00000020
197
198/* Set/Clear Bitmap/Brush Stock Attribute */
199#define SC_BB_STOCKOBJ 1
200
201/* TYPES *********************************************************************/
202
203typedef struct _GDI_TABLE_ENTRY
204{
205 PVOID KernelData; /* Points to the kernel mode structure */
206 DWORD ProcessId; /* process id that created the object, 0 for stock objects */
207 union{ /* temp union structure. */
208 LONG Type; /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */
209 struct{
210 USHORT FullUnique; /* unique */
211 UCHAR ObjectType; /* objt */
212 UCHAR Flags; /* Flags */
213 };};
214 PVOID UserData; /* pUser Points to the user mode structure, usually NULL though */
216
217typedef struct _ENTRY
218{
219 union _EINFO
220 {
224
226 {
228 {
229 unsigned Lock:1;
230 unsigned Pid_Shifted:31;
234
240
241/*
242 * User space only structure!
243 */
244typedef struct __GDI_SHARED_HANDLE_TABLE /* Must match win32k/include/gdiobj.h */
245{
247 DEVCAPS DevCaps; /* Shared device capabilities. */
248 FLONG flDeviceUniq; /* Device settings uniqueness. */
249 PVOID pvLangPack; /* Lanuage Pack. */
250 CFONT cfPublic[GDI_CFONT_MAX]; /* Public Fonts. */
253
254typedef struct _RGN_ATTR
255{
257 ULONG iComplexity; /* Clipping region's complexity. NULL, SIMPLE & COMPLEXREGION */
260
261/* Local DC structure (_DC_ATTR) PVOID pvLDC; */
262typedef struct _LDC
263{
267 PVOID pvEmfDC; /* Pointer to ENHMETAFILE structure */
269 ABORTPROC pAbortProc; /* AbortProc for Printing */
271 HANDLE hPrinter; /* Local or Remote Printer driver */
273 PVOID pUMPDev; /* Ptr to User Mode Printer Device structure */
274 PUMDHPDEV pUMdhpdev; /* Ptr to Combined UMPD and DHPDEV structure */
283 // wine data
286
287/*
288 * DC_ATTR structure.
289 * See also: https://reactos.org/wiki/Techwiki:Win32k/DC_ATTR
290 */
291typedef struct _DC_ATTR
292{
319 HCOLORSPACE hColorSpace;
352
353typedef struct _BRUSH_ATTR /* Used with pen too. */
354{
358
359typedef struct _FONT_ATTR
360{
364
365
366#endif
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
static HDC
Definition: imagelist.c:92
unsigned long FLONG
Definition: ntbasedef.h:366
struct __GDI_SHARED_HANDLE_TABLE GDI_SHARED_HANDLE_TABLE
struct _LDC LDC
struct _GDI_TABLE_ENTRY * PGDI_TABLE_ENTRY
struct _DC_ATTR DC_ATTR
struct _ENTRY ENTRY
struct _ENTRY * PENTRY
struct __GDI_SHARED_HANDLE_TABLE * PGDI_SHARED_HANDLE_TABLE
#define GDI_HANDLE_COUNT
Definition: ntgdihdl.h:19
struct _RGN_ATTR * PRGN_ATTR
struct _GDI_TABLE_ENTRY GDI_TABLE_ENTRY
#define GDI_CFONT_MAX
Definition: ntgdihdl.h:20
struct _BRUSH_ATTR * PBRUSH_ATTR
struct _FONT_ATTR FONT_ATTR
struct _RGN_ATTR RGN_ATTR
struct _BRUSH_ATTR BRUSH_ATTR
struct _LDC * PLDC
struct _FONT_ATTR * PFONT_ATTR
struct _DC_ATTR * PDC_ATTR
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
Definition: matrix.h:44
COLORREF lbColor
Definition: ntgdihdl.h:356
FLONG AttrFlags
Definition: ntgdihdl.h:355
POINTL ptlCurrent
Definition: ntgdihdl.h:311
HANDLE hbrush
Definition: ntgdihdl.h:295
HANDLE hpen
Definition: ntgdihdl.h:296
LONG lStretchBltMode
Definition: ntgdihdl.h:315
INT IcmBrushColor
Definition: ntgdihdl.h:321
FLOATOBJ efDxPtoD
Definition: ntgdihdl.h:336
LONG lBreakExtra
Definition: ntgdihdl.h:328
LONG lIcmMode
Definition: ntgdihdl.h:317
SIZEL szlVirtualDevicePixel
Definition: ntgdihdl.h:346
HANDLE hcmXform
Definition: ntgdihdl.h:318
DWORD iCS_CP
Definition: ntgdihdl.h:305
MATRIX mxWorldToDevice
Definition: ntgdihdl.h:331
LONG lFillMode
Definition: ntgdihdl.h:314
LONG lBkMode
Definition: ntgdihdl.h:313
ULONG ulBrushClr
Definition: ntgdihdl.h:302
PVOID pvLIcm
Definition: ntgdihdl.h:323
SIZEL szlViewportExt
Definition: ntgdihdl.h:344
LONG cBreak
Definition: ntgdihdl.h:329
LONG lWindowOrgx
Definition: ntgdihdl.h:340
SIZEL szlVirtualDeviceSize
Definition: ntgdihdl.h:348
INT iMapMode
Definition: ntgdihdl.h:338
BYTE jBkMode
Definition: ntgdihdl.h:308
PVOID pvLDC
Definition: ntgdihdl.h:293
BYTE jStretchBltMode
Definition: ntgdihdl.h:310
ULONG ulBackgroundClr
Definition: ntgdihdl.h:298
INT iGraphicsMode
Definition: ntgdihdl.h:306
FLONG flXform
Definition: ntgdihdl.h:345
DWORD dwLayout
Definition: ntgdihdl.h:339
LONG lTextAlign
Definition: ntgdihdl.h:325
COLORREF crBrushClr
Definition: ntgdihdl.h:301
POINTL ptlViewportOrg
Definition: ntgdihdl.h:343
SIZEL szlVirtualDeviceMm
Definition: ntgdihdl.h:347
ULONG ulPenClr
Definition: ntgdihdl.h:304
ULONG ulForegroundClr
Definition: ntgdihdl.h:300
COLORREF crPenClr
Definition: ntgdihdl.h:303
LONG lTextExtra
Definition: ntgdihdl.h:326
COLORREF crForegroundClr
Definition: ntgdihdl.h:299
HANDLE hlfntNew
Definition: ntgdihdl.h:330
COLORREF crBackgroundClr
Definition: ntgdihdl.h:297
MATRIX mxDeviceToWorld
Definition: ntgdihdl.h:332
HCOLORSPACE hColorSpace
Definition: ntgdihdl.h:319
POINTL ptlWindowOrg
Definition: ntgdihdl.h:341
INT IcmPenColor
Definition: ntgdihdl.h:322
MATRIX mxWorldToPage
Definition: ntgdihdl.h:333
ULONG ulDirty_
Definition: ntgdihdl.h:294
POINTL ptlBrushOrigin
Definition: ntgdihdl.h:349
POINTL ptfxCurrent
Definition: ntgdihdl.h:312
FLOATOBJ efM11PtoD
Definition: ntgdihdl.h:334
BYTE jFillMode
Definition: ntgdihdl.h:309
BYTE jROP2
Definition: ntgdihdl.h:307
SIZEL szlWindowExt
Definition: ntgdihdl.h:342
LONG lRelAbs
Definition: ntgdihdl.h:327
FLOATOBJ efM22PtoD
Definition: ntgdihdl.h:335
FLOATOBJ efDyPtoD
Definition: ntgdihdl.h:337
FLONG flFontMapper
Definition: ntgdihdl.h:316
RGN_ATTR VisRectRegion
Definition: ntgdihdl.h:350
FLONG flTextAlign
Definition: ntgdihdl.h:324
FLONG flIcmFlags
Definition: ntgdihdl.h:320
Definition: ntgdihdl.h:228
unsigned Pid_Shifted
Definition: ntgdihdl.h:230
unsigned Lock
Definition: ntgdihdl.h:229
Definition: ntgdihdl.h:218
union _ENTRY::_OBJECTOWNER ObjectOwner
UCHAR Objt
Definition: ntgdihdl.h:236
PVOID pUser
Definition: ntgdihdl.h:238
UCHAR Flags
Definition: ntgdihdl.h:237
union _ENTRY::_EINFO einfo
USHORT FullUnique
Definition: ntgdihdl.h:235
PCFONT pCharWidthData
Definition: ntgdihdl.h:362
BOOL bSlowWidths
Definition: ntgdihdl.h:361
Definition: gdi.h:2
DWORD ProcessId
Definition: ntgdihdl.h:206
UCHAR ObjectType
Definition: ntgdihdl.h:211
UCHAR Flags
Definition: ntgdihdl.h:212
LONG Type
Definition: gdi.h:5
PVOID KernelData
Definition: gdi.h:3
USHORT FullUnique
Definition: ntgdihdl.h:210
PVOID UserData
Definition: gdi.h:6
Definition: ntgdihdl.h:263
HANDLE hPrinter
Definition: ntgdihdl.h:271
PVOID pvEmfDC
Definition: ntgdihdl.h:267
DWORD CallBackTick
Definition: ntgdihdl.h:270
HPEN PenColor
Definition: ntgdihdl.h:282
PUMDHPDEV pUMdhpdev
Definition: ntgdihdl.h:274
DWORD dwData[5]
Definition: ntgdihdl.h:284
PVOID pUMPDev
Definition: ntgdihdl.h:273
DEVCAPS DevCaps
Definition: ntgdihdl.h:280
PVOID pvEMFSpoolData
Definition: ntgdihdl.h:277
HBRUSH BrushColor
Definition: ntgdihdl.h:281
INT iType
Definition: ntgdihdl.h:266
ABORTPROC pAbortProc
Definition: ntgdihdl.h:269
PVOID UFIHashTable[3]
Definition: ntgdihdl.h:275
HDC hDC
Definition: ntgdihdl.h:264
LPWSTR pwszPort
Definition: ntgdihdl.h:268
ULONG Flags
Definition: ntgdihdl.h:265
LIST_ENTRY leRecords
Definition: ntgdihdl.h:279
PDEVMODEW pdm
Definition: ntgdihdl.h:272
ULONG cjSize
Definition: ntgdihdl.h:278
UNIVERSAL_FONT_ID ufi
Definition: ntgdihdl.h:276
Definition: typedefs.h:120
ULONG iComplexity
Definition: ntgdihdl.h:257
RECTL Rect
Definition: ntgdihdl.h:258
ULONG AttrFlags
Definition: ntgdihdl.h:256
GDI_TABLE_ENTRY Entries[GDI_HANDLE_COUNT]
Definition: ntgdihdl.h:246
CFONT cfPublic[GDI_CFONT_MAX]
Definition: ntgdihdl.h:250
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
Definition: ntgdihdl.h:220
struct _BASEOBJECT * pobj
Definition: ntgdihdl.h:221
HGDIOBJ hFree
Definition: ntgdihdl.h:222
Definition: ntgdihdl.h:226
struct _ENTRY::_OBJECTOWNER::_OBJECTOWNER_S Share
ULONG ulObj
Definition: ntgdihdl.h:232
FLOAT FLOATOBJ
Definition: winddi.h:677
DWORD COLORREF
Definition: windef.h:300
BOOL(CALLBACK * ABORTPROC)(HDC, int)
Definition: wingdi.h:2911
unsigned char UCHAR
Definition: xmlstorage.h:181
WCHAR * LPWSTR
Definition: xmlstorage.h:184
unsigned char BYTE
Definition: xxhash.c:193