ReactOS  0.4.15-dev-3316-g067ca88
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
82 
83 #define GDI_OBJECT_TYPE_SILENT 0x80000000
84 
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 Managment 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 OBJ Types */
123 #define DC_TYPE_DIRECT 0 /* normal device context */
124 #define DC_TYPE_MEMORY 1 /* memory device context */
125 #define DC_TYPE_INFO 2 /* information context */
126 
127 /* DC OBJ Flags */
128 #define DC_FLAG_DISPLAY 0x0001
129 #define DC_FLAG_DIRECT 0x0002
130 #define DC_FLAG_CANCELLED 0x0004
131 #define DC_FLAG_PERMANENT 0x0008
132 #define DC_FLAG_DIRTY_RAO 0x0010
133 #define DC_FLAG_ACCUM_WMGR 0x0020
134 #define DC_FLAG_ACCUM_APP 0x0040
135 #define DC_FLAG_RESET 0x0080
136 #define DC_FLAG_SYNCHRONIZEACCESS 0x0100
137 #define DC_FLAG_EPSPRINTINGESCAPE 0x0200
138 #define DC_FLAG_TEMPINFODC 0x0400
139 #define DC_FLAG_FULLSCREEN 0x0800
140 #define DC_FLAG_IN_CLONEPDEV 0x1000
141 #define DC_FLAG_REDIRECTION 0x2000
142 #define DC_FLAG_SHAREACCESS 0x4000
143 
144 /* DC_ATTR Dirty Flags */
145 #define DIRTY_FILL 0x00000001
146 #define DIRTY_LINE 0x00000002
147 #define DIRTY_TEXT 0x00000004
148 #define DIRTY_BACKGROUND 0x00000008
149 #define DIRTY_CHARSET 0x00000010
150 #define SLOW_WIDTHS 0x00000020
151 #define DC_CACHED_TM_VALID 0x00000040
152 #define DISPLAY_DC 0x00000080
153 #define DIRTY_PTLCURRENT 0x00000100
154 #define DIRTY_PTFXCURRENT 0x00000200
155 #define DIRTY_STYLESTATE 0x00000400
156 #define DC_PLAYMETAFILE 0x00000800
157 #define DC_BRUSH_DIRTY 0x00001000
158 #define DC_PEN_DIRTY 0x00002000
159 #define DC_DIBSECTION 0x00004000
160 #define DC_LAST_CLIPRGN_VALID 0x00008000
161 #define DC_PRIMARY_DISPLAY 0x00010000
162 #define DC_ICM_NOT_CALIBRATED 0x00020000
163 #define DC_ICM_BRUSH_DIRTY 0x00040000
164 #define DC_ICM_PEN_DIRTY 0x00080000
165 #define DC_ICM_NOT_SET 0x00100000
166 #define DC_MODE_DIRTY 0x00200000
167 #define DC_FONTTEXT_DIRTY 0x00400000
168 
169 /* DC_ATTR LCD Flags */
170 #define LDC_LDC 0x00000001 /* (init) local DC other than a normal DC */
171 #define LDC_EMFLDC 0x00000002 /* Enhance Meta File local DC */
172 #define LDC_SAPCALLBACK 0x00000020
173 #define LDC_INIT_DOCUMENT 0x00000040
174 #define LDC_INIT_PAGE 0x00000080
175 #define LDC_STARTPAGE 0x00000100
176 #define LDC_NEXTBAND 0x00000200
177 #define LDC_FONTHASH 0x00001000
178 #define LDC_CLOCKWISE 0x00002000
179 #define LDC_NEWFONT 0x00008000
180 #define LDC_KILL_DOCUMENT 0x00010000
181 #define LDC_META_PRINT 0x00020000
182 #define LDC_DIRECT 0x00040000
183 #define LDC_RESET_BANDING 0x00080000
184 #define LDC_DOWNLOADFONTS 0x00100000
185 #define LDC_RESETDC 0x00200000
186 #define LDC_UFIMAP 0x00400000
187 #define LDC_INFODC 0x01000000 /* If CreateIC was passed. */
188 #define LDC_DEVCAPS 0x02000000
189 #define LDC_XPS_PASS 0x08000000 // Guessing, not sure.
190 #define LDC_ATENDPAGE 0x10000000
191 #define LDC_COLORPAGE 0x20000000
192 
193 #define UFIHASHTABLESIZE 64
194 
195 /* DC_ATTR Xform Flags */
196 #define METAFILE_TO_WORLD_IDENTITY 0x00000001
197 #define WORLD_TO_PAGE_IDENTITY 0x00000002
198 #define DEVICE_TO_PAGE_INVALID 0x00000008
199 #define DEVICE_TO_WORLD_INVALID 0x00000010
200 #define WORLD_TRANSFORM_SET 0x00000020
201 #define POSITIVE_Y_IS_UP 0x00000040
202 #define INVALIDATE_ATTRIBUTES 0x00000080
203 #define PTOD_EFM11_NEGATIVE 0x00000100
204 #define PTOD_EFM22_NEGATIVE 0x00000200
205 #define ISO_OR_ANISO_MAP_MODE 0x00000400
206 #define PAGE_TO_DEVICE_IDENTITY 0x00000800
207 #define PAGE_TO_DEVICE_SCALE_IDENTITY 0x00001000
208 #define PAGE_XLATE_CHANGED 0x00002000
209 #define PAGE_EXTENTS_CHANGED 0x00004000
210 #define WORLD_XFORM_CHANGED 0x00008000
211 
212 /* BRUSH/RGN_ATTR Flags */
213 #define ATTR_CACHED 0x00000001
214 #define ATTR_TO_BE_DELETED 0x00000002
215 #define ATTR_NEW_COLOR 0x00000004
216 #define ATTR_CANT_SELECT 0x00000008
217 #define ATTR_RGN_VALID 0x00000010
218 #define ATTR_RGN_DIRTY 0x00000020
219 
220 /* Set/Clear Bitmap/Brush Stock Attribute */
221 #define SC_BB_STOCKOBJ 1
222 
223 /* TYPES *********************************************************************/
224 
225 typedef struct _GDI_TABLE_ENTRY
226 {
227  PVOID KernelData; /* Points to the kernel mode structure */
228  DWORD ProcessId; /* process id that created the object, 0 for stock objects */
229  union{ /* temp union structure. */
230  LONG Type; /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */
231  struct{
232  USHORT FullUnique; /* unique */
233  UCHAR ObjectType; /* objt */
234  UCHAR Flags; /* Flags */
235  };};
236  PVOID UserData; /* pUser Points to the user mode structure, usually NULL though */
238 
239 typedef struct _ENTRY
240 {
241  union _EINFO
242  {
243  struct _BASEOBJECT *pobj;
245  } einfo;
246 
248  {
250  {
251  unsigned Lock:1;
252  unsigned Pid_Shifted:31;
253  } Share;
255  } ObjectOwner;
256 
261 } ENTRY, *PENTRY;
262 
263 /*
264  * User space only structure!
265  */
266 typedef struct __GDI_SHARED_HANDLE_TABLE /* Must match win32k/include/gdiobj.h */
267 {
269  DEVCAPS DevCaps; /* Shared device capabilities. */
270  FLONG flDeviceUniq; /* Device settings uniqueness. */
271  PVOID pvLangPack; /* Lanuage Pack. */
272  CFONT cfPublic[GDI_CFONT_MAX]; /* Public Fonts. */
275 
276 typedef struct _RGN_ATTR
277 {
279  ULONG iComplexity; /* Clipping region's complexity. NULL, SIMPLE & COMPLEXREGION */
282 
283 /* Local DC structure (_DC_ATTR) PVOID pvLDC; */
284 typedef struct _LDC
285 {
289  PVOID pvEmfDC; /* Pointer to ENHMETAFILE structure */
291  ABORTPROC pAbortProc; /* AbortProc for Printing */
293  HANDLE hPrinter; /* Local or Remote Printer driver */
295  PVOID pUMPDev; /* Ptr to User Mode Printer Device structure */
296  PUMDHPDEV pUMdhpdev; /* Ptr to Combined UMPD and DHPDEV structure */
303  HBRUSH BrushColor;
304  HPEN PenColor;
305  // wine data
307 } LDC, *PLDC;
308 
309 typedef struct _DC_ATTR
310 {
337  HCOLORSPACE hColorSpace;
369 } DC_ATTR, *PDC_ATTR;
370 
371 typedef struct _BRUSH_ATTR /* Used with pen too. */
372 {
376 
377 typedef struct _FONT_ATTR
378 {
382 
383 
384 #endif
struct _FONT_ATTR FONT_ATTR
FLOATOBJ efM22PtoD
Definition: ntgdihdl.h:353
PVOID pvEmfDC
Definition: ntgdihdl.h:289
PVOID UserData
Definition: gdi.h:6
POINTL ptlViewportOrg
Definition: ntgdihdl.h:361
struct _RGN_ATTR RGN_ATTR
PVOID pUser
Definition: ntgdihdl.h:260
UNIVERSAL_FONT_ID ufi
Definition: ntgdihdl.h:298
PVOID pvLDC
Definition: ntgdihdl.h:311
HPEN PenColor
Definition: ntgdihdl.h:304
FLONG flFontMapper
Definition: ntgdihdl.h:334
PVOID pvEMFSpoolData
Definition: ntgdihdl.h:299
struct _RGN_ATTR * PRGN_ATTR
HANDLE hbrush
Definition: ntgdihdl.h:313
LONG lBreakExtra
Definition: ntgdihdl.h:346
BYTE jStretchBltMode
Definition: ntgdihdl.h:328
HANDLE hpen
Definition: ntgdihdl.h:314
UCHAR Objt
Definition: ntgdihdl.h:258
INT iMapMode
Definition: ntgdihdl.h:356
USHORT FullUnique
Definition: ntgdihdl.h:232
static HDC
Definition: imagelist.c:92
DWORD CallBackTick
Definition: ntgdihdl.h:292
HCOLORSPACE hColorSpace
Definition: ntgdihdl.h:337
struct _BASEOBJECT * pobj
Definition: ntgdihdl.h:243
LONG lFillMode
Definition: ntgdihdl.h:332
COLORREF crPenClr
Definition: ntgdihdl.h:321
UCHAR Flags
Definition: ntgdihdl.h:259
LONG lTextExtra
Definition: ntgdihdl.h:344
LONG lRelAbs
Definition: ntgdihdl.h:345
ULONG cjSize
Definition: ntgdihdl.h:300
HANDLE hcmXform
Definition: ntgdihdl.h:336
int32_t INT
Definition: typedefs.h:58
ULONG Flags
Definition: ntgdihdl.h:287
PVOID UFIHashTable[3]
Definition: ntgdihdl.h:297
union _ENTRY::_EINFO einfo
ULONG ulBackgroundClr
Definition: ntgdihdl.h:316
#define GDI_HANDLE_COUNT
Definition: ntgdihdl.h:19
struct _FONT_ATTR * PFONT_ATTR
struct _ENTRY ENTRY
Definition: ntgdihdl.h:247
unsigned int BOOL
Definition: ntddk_ex.h:94
struct _LDC * PLDC
long LONG
Definition: pedump.c:60
PCFONT pCharWidthData
Definition: ntgdihdl.h:380
FLONG AttrFlags
Definition: ntgdihdl.h:373
HANDLE hlfntNew
Definition: ntgdihdl.h:348
GDI_TABLE_ENTRY Entries[GDI_HANDLE_COUNT]
Definition: ntgdihdl.h:268
DWORD ProcessId
Definition: ntgdihdl.h:228
FLOATOBJ efDxPtoD
Definition: ntgdihdl.h:354
PDEVMODEW pdm
Definition: ntgdihdl.h:294
HDC hDC
Definition: ntgdihdl.h:286
PVOID pvLIcm
Definition: ntgdihdl.h:341
struct __GDI_SHARED_HANDLE_TABLE GDI_SHARED_HANDLE_TABLE
struct _LDC LDC
ULONG AttrFlags
Definition: ntgdihdl.h:278
unsigned long FLONG
Definition: ntbasedef.h:366
struct _DC_ATTR * PDC_ATTR
ULONG ulDirty_
Definition: ntgdihdl.h:312
LONG lIcmMode
Definition: ntgdihdl.h:335
COLORREF crBackgroundClr
Definition: ntgdihdl.h:315
FLOAT FLOATOBJ
Definition: winddi.h:677
Definition: matrix.h:43
BOOL(CALLBACK * ABORTPROC)(HDC, int)
Definition: wingdi.h:2911
DWORD COLORREF
Definition: windef.h:300
BYTE jROP2
Definition: ntgdihdl.h:325
struct _ENTRY * PENTRY
COLORREF crBrushClr
Definition: ntgdihdl.h:319
LONG Type
Definition: gdi.h:5
DWORD iCS_CP
Definition: ntgdihdl.h:323
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG cBreak
Definition: ntgdihdl.h:347
ULONG ulObj
Definition: ntgdihdl.h:254
MATRIX mxWorldToPage
Definition: ntgdihdl.h:351
Definition: ntgdihdl.h:284
INT iType
Definition: ntgdihdl.h:288
Definition: ntgdihdl.h:241
unsigned char UCHAR
Definition: xmlstorage.h:181
LONG lWindowOrgx
Definition: ntgdihdl.h:358
RGN_ATTR VisRectRegion
Definition: ntgdihdl.h:368
BYTE jFillMode
Definition: ntgdihdl.h:327
#define GDI_CFONT_MAX
Definition: ntgdihdl.h:20
FLONG flXform
Definition: ntgdihdl.h:363
SIZEL szlWindowExt
Definition: ntgdihdl.h:360
POINTL ptfxCurrent
Definition: ntgdihdl.h:330
ULONG iComplexity
Definition: ntgdihdl.h:279
Definition: typedefs.h:119
MATRIX mxWorldToDevice
Definition: ntgdihdl.h:349
DWORD dwData[5]
Definition: ntgdihdl.h:306
struct _ENTRY::_OBJECTOWNER::_OBJECTOWNER_S Share
HGDIOBJ hFree
Definition: ntgdihdl.h:244
POINTL ptlBrushOrigin
Definition: ntgdihdl.h:367
BOOL bSlowWidths
Definition: ntgdihdl.h:379
ULONG ulPenClr
Definition: ntgdihdl.h:322
BYTE jBkMode
Definition: ntgdihdl.h:326
unsigned char BYTE
Definition: xxhash.c:193
SIZEL szlVirtualDevicePixel
Definition: ntgdihdl.h:364
struct _GDI_TABLE_ENTRY * PGDI_TABLE_ENTRY
unsigned Lock
Definition: ntgdihdl.h:251
Definition: gdi.h:1
Definition: ntgdihdl.h:249
INT IcmPenColor
Definition: ntgdihdl.h:340
UCHAR Flags
Definition: ntgdihdl.h:234
INT IcmBrushColor
Definition: ntgdihdl.h:339
struct __GDI_SHARED_HANDLE_TABLE * PGDI_SHARED_HANDLE_TABLE
LONG lStretchBltMode
Definition: ntgdihdl.h:333
unsigned short USHORT
Definition: pedump.c:61
ULONG ulForegroundClr
Definition: ntgdihdl.h:318
COLORREF lbColor
Definition: ntgdihdl.h:374
ULONG ulBrushClr
Definition: ntgdihdl.h:320
USHORT FullUnique
Definition: ntgdihdl.h:257
struct _GDI_TABLE_ENTRY GDI_TABLE_ENTRY
PVOID KernelData
Definition: gdi.h:3
FLOATOBJ efM11PtoD
Definition: ntgdihdl.h:352
DEVCAPS DevCaps
Definition: ntgdihdl.h:302
UCHAR ObjectType
Definition: ntgdihdl.h:233
FLONG flTextAlign
Definition: ntgdihdl.h:342
LONG lBkMode
Definition: ntgdihdl.h:331
RECTL Rect
Definition: ntgdihdl.h:280
COLORREF crForegroundClr
Definition: ntgdihdl.h:317
FLOATOBJ efDyPtoD
Definition: ntgdihdl.h:355
struct _BRUSH_ATTR * PBRUSH_ATTR
FLONG flIcmFlags
Definition: ntgdihdl.h:338
SIZEL szlVirtualDeviceSize
Definition: ntgdihdl.h:366
SIZEL szlViewportExt
Definition: ntgdihdl.h:362
unsigned int ULONG
Definition: retypes.h:1
unsigned Pid_Shifted
Definition: ntgdihdl.h:252
DWORD dwLayout
Definition: ntgdihdl.h:357
CFONT cfPublic[GDI_CFONT_MAX]
Definition: ntgdihdl.h:272
PVOID pUMPDev
Definition: ntgdihdl.h:295
union _ENTRY::_OBJECTOWNER ObjectOwner
Definition: ntgdihdl.h:239
WCHAR * LPWSTR
Definition: xmlstorage.h:184
LPWSTR pwszPort
Definition: ntgdihdl.h:290
MATRIX mxDeviceToWorld
Definition: ntgdihdl.h:350
ABORTPROC pAbortProc
Definition: ntgdihdl.h:291
struct _BRUSH_ATTR BRUSH_ATTR
POINTL ptlCurrent
Definition: ntgdihdl.h:329
HANDLE hPrinter
Definition: ntgdihdl.h:293
HBRUSH BrushColor
Definition: ntgdihdl.h:303
PUMDHPDEV pUMdhpdev
Definition: ntgdihdl.h:296
POINTL ptlWindowOrg
Definition: ntgdihdl.h:359
LONG lTextAlign
Definition: ntgdihdl.h:343
struct _DC_ATTR DC_ATTR
LIST_ENTRY leRecords
Definition: ntgdihdl.h:301
SIZEL szlVirtualDeviceMm
Definition: ntgdihdl.h:365
INT iGraphicsMode
Definition: ntgdihdl.h:324