Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenntgdihdl.h
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS Win32 Graphical Subsystem (WIN32K) 00004 * FILE: include/win32k/ntgdihal.h 00005 * PURPOSE: Win32 Shared GDI Handle/Object Types 00006 * PROGRAMMER: Alex Ionescu (alex@relsoft.net) 00007 */ 00008 00009 /* INCLUDES ******************************************************************/ 00010 00011 #ifndef _NTGDIHDL_ 00012 #define _NTGDIHDL_ 00013 00014 #include <winddi.h> 00015 00016 /* DEFINES *******************************************************************/ 00017 00018 /* Base address where the handle table is mapped to */ 00019 #define GDI_HANDLE_TABLE_BASE_ADDRESS (0x400000) 00020 00021 /* GDI handle table can hold 0x10000 handles */ 00022 #define GDI_HANDLE_COUNT 0x10000 00023 #define GDI_GLOBAL_PROCESS (0x0) 00024 #define GDI_CFONT_MAX 16 00025 00026 /* Handle Masks and shifts */ 00027 #define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1) 00028 #define GDI_HANDLE_TYPE_MASK 0x007f0000 00029 #define GDI_HANDLE_BASETYPE_MASK 0x001f0000 00030 #define GDI_HANDLE_STOCK_MASK 0x00800000 00031 #define GDI_HANDLE_REUSE_MASK 0xff000000 00032 #define GDI_HANDLE_UPPER_MASK (GDI_HANDLE_TYPE_MASK|GDI_HANDLE_STOCK_MASK|GDI_HANDLE_REUSE_MASK) 00033 #define GDI_HANDLE_REUSECNT_SHIFT 24 00034 #define GDI_HANDLE_BASETYPE_SHIFT 16 00035 00036 #define GDI_ENTRY_STOCK_MASK 0x00000080 00037 #define GDI_ENTRY_REUSE_MASK 0x0000ff00 00038 #define GDI_ENTRY_REUSE_INC 0x00000100 00039 #define GDI_ENTRY_BASETYPE_MASK 0x001f0000 00040 #define GDI_ENTRY_FLAGS_MASK 0xff000000 00041 #define GDI_ENTRY_REUSECNT_SHIFT 8 00042 #define GDI_ENTRY_UPPER_SHIFT 16 00043 00044 /* GDI Entry Flags */ 00045 #define GDI_ENTRY_UNDELETABLE 1 /* Mark Object as nonremovable */ 00046 #define GDI_ENTRY_DELETING 2 /* Used when deleting Font Objects */ 00047 #define GDI_ENTRY_VALIDATE_VIS 4 /* Validating Visible region data */ 00048 #define GDI_ENTRY_ALLOCATE_LAL 0x80 /* Object Allocated with Look aside List */ 00049 00056 #define GDI_OBJECT_TYPE_DC 0x00010000 00057 #define GDI_OBJECT_TYPE_DD_SURFACE 0x00030000 /* Should be moved away from gdi objects */ 00058 #define GDI_OBJECT_TYPE_REGION 0x00040000 00059 #define GDI_OBJECT_TYPE_BITMAP 0x00050000 00060 #define GDI_OBJECT_TYPE_CLIOBJ 0x00060000 00061 #define GDI_OBJECT_TYPE_PATH 0x00070000 00062 #define GDI_OBJECT_TYPE_PALETTE 0x00080000 00063 #define GDI_OBJECT_TYPE_COLORSPACE 0x00090000 00064 #define GDI_OBJECT_TYPE_FONT 0x000a0000 00065 00066 #define GDI_OBJECT_TYPE_BRUSH 0x00100000 00067 #define GDI_OBJECT_TYPE_DD_VIDEOPORT 0x00120000 /* Should be moved away from gdi objects */ 00068 #define GDI_OBJECT_TYPE_DD_MOTIONCOMP 0x00140000 /* Should be moved away from gdi objects */ 00069 #define GDI_OBJECT_TYPE_ENUMFONT 0x00160000 00070 #define GDI_OBJECT_TYPE_DRIVEROBJ 0x001C0000 00071 00072 /* Confrim on XP value is taken from NtGdiCreateDirectDrawObject */ 00073 #define GDI_OBJECT_TYPE_DIRECTDRAW 0x00200000 00074 00075 /* Following object types are derived types from the above base types 00076 use 0x001f0000 as mask to get the base type */ 00077 #define GDI_OBJECT_TYPE_EMF 0x00210000 00078 00079 #define GDI_OBJECT_TYPE_METAFILE 0x00260000 00080 #define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000 00081 #define GDI_OBJECT_TYPE_PEN 0x00300000 00082 #define GDI_OBJECT_TYPE_EXTPEN 0x00500000 00083 #define GDI_OBJECT_TYPE_METADC 0x00660000 00084 /*#define GDI_OBJECT_TYPE_DD_PALETTE 0x00630000 unused at the moment, other value required */ 00085 /*#define GDI_OBJECT_TYPE_DD_CLIPPER 0x00640000 unused at the moment, other value required */ 00086 00087 /* Following object types made up for ROS */ 00088 #define GDI_OBJECT_TYPE_DONTCARE 0x007f0000 00089 00090 #define GDI_OBJECT_TYPE_SILENT 0x80000000 00091 00093 /* Handle macros */ 00094 #define GDI_HANDLE_CREATE(i, t) \ 00095 ((HANDLE)(((i) & GDI_HANDLE_INDEX_MASK) | ((t) & GDI_HANDLE_TYPE_MASK))) 00096 00097 #define GDI_HANDLE_GET_INDEX(h) \ 00098 (((ULONG_PTR)(h)) & GDI_HANDLE_INDEX_MASK) 00099 00100 #define GDI_HANDLE_GET_TYPE(h) \ 00101 (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK) 00102 00103 #define GDI_HANDLE_IS_TYPE(h, t) \ 00104 ((t) == (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK)) 00105 00106 #define GDI_HANDLE_IS_STOCKOBJ(h) \ 00107 (0 != (((ULONG_PTR)(h)) & GDI_HANDLE_STOCK_MASK)) 00108 00109 #define GDI_HANDLE_SET_STOCKOBJ(h) \ 00110 ((h) = (HANDLE)(((ULONG_PTR)(h)) | GDI_HANDLE_STOCK_MASK)) 00111 00112 #define GDI_HANDLE_GET_UPPER(h) \ 00113 (((ULONG_PTR)(h)) & GDI_HANDLE_UPPER_MASK) 00114 00115 #define GDI_HANDLE_GET_REUSECNT(h) \ 00116 (((ULONG_PTR)(h)) >> GDI_HANDLE_REUSECNT_SHIFT) 00117 00118 #define GDI_ENTRY_GET_REUSECNT(e) \ 00119 ((((ULONG_PTR)(e)) & GDI_ENTRY_REUSE_MASK) >> GDI_ENTRY_REUSECNT_SHIFT) 00120 00121 #define GDI_OBJECT_GET_TYPE_INDEX(t) \ 00122 ((t & GDI_HANDLE_BASETYPE_MASK) >> GDI_HANDLE_BASETYPE_SHIFT) 00123 00124 /* Gdi Object Handle Managment Pid lock masking sets. */ 00125 /* Ref: used with DxEngSetDCOwner */ 00126 #define GDI_OBJ_HMGR_PUBLIC 0 /* Public owner, Open access? */ 00127 #define GDI_OBJ_HMGR_POWNED 0x80000002 /* Set to current owner. */ 00128 #define GDI_OBJ_HMGR_NONE 0x80000012 /* No owner, Open access? */ 00129 #define GDI_OBJ_HMGR_RESTRICTED 0x80000022 /* Restricted? */ 00130 00131 00132 /* DC OBJ Types */ 00133 #define DC_TYPE_DIRECT 0 /* normal device context */ 00134 #define DC_TYPE_MEMORY 1 /* memory device context */ 00135 #define DC_TYPE_INFO 2 /* information context */ 00136 00137 /* DC OBJ Flags */ 00138 #define DC_FLAG_DISPLAY 0x0001 00139 #define DC_FLAG_DIRECT 0x0002 00140 #define DC_FLAG_CANCELLED 0x0004 00141 #define DC_FLAG_PERMANENT 0x0008 00142 #define DC_FLAG_DIRTY_RAO 0x0010 00143 #define DC_FLAG_ACCUM_WMGR 0x0020 00144 #define DC_FLAG_ACCUM_APP 0x0040 00145 #define DC_FLAG_RESET 0x0080 00146 #define DC_FLAG_SYNCHRONIZEACCESS 0x0100 00147 #define DC_FLAG_EPSPRINTINGESCAPE 0x0200 00148 #define DC_FLAG_TEMPINFODC 0x0400 00149 #define DC_FLAG_FULLSCREEN 0x0800 00150 #define DC_FLAG_IN_CLONEPDEV 0x1000 00151 #define DC_FLAG_REDIRECTION 0x2000 00152 #define DC_FLAG_SHAREACCESS 0x4000 00153 00154 /* DC_ATTR Dirty Flags */ 00155 #define DIRTY_FILL 0x00000001 00156 #define DIRTY_LINE 0x00000002 00157 #define DIRTY_TEXT 0x00000004 00158 #define DIRTY_BACKGROUND 0x00000008 00159 #define DIRTY_CHARSET 0x00000010 00160 #define SLOW_WIDTHS 0x00000020 00161 #define DC_CACHED_TM_VALID 0x00000040 00162 #define DISPLAY_DC 0x00000080 00163 #define DIRTY_PTLCURRENT 0x00000100 00164 #define DIRTY_PTFXCURRENT 0x00000200 00165 #define DIRTY_STYLESTATE 0x00000400 00166 #define DC_PLAYMETAFILE 0x00000800 00167 #define DC_BRUSH_DIRTY 0x00001000 00168 #define DC_PEN_DIRTY 0x00002000 00169 #define DC_DIBSECTION 0x00004000 00170 #define DC_LAST_CLIPRGN_VALID 0x00008000 00171 #define DC_PRIMARY_DISPLAY 0x00010000 00172 #define DC_ICM_NOT_CALIBRATED 0x00020000 00173 #define DC_ICM_BRUSH_DIRTY 0x00040000 00174 #define DC_ICM_PEN_DIRTY 0x00080000 00175 #define DC_ICM_NOT_SET 0x00100000 00176 #define DC_MODE_DIRTY 0x00200000 00177 #define DC_FONTTEXT_DIRTY 0x00400000 00178 00179 /* DC_ATTR LCD Flags */ 00180 #define LDC_LDC 0x00000001 /* (init) local DC other than a normal DC */ 00181 #define LDC_EMFLDC 0x00000002 /* Enhance Meta File local DC */ 00182 #define LDC_SAPCALLBACK 0x00000020 00183 #define LDC_INIT_DOCUMENT 0x00000040 00184 #define LDC_INIT_PAGE 0x00000080 00185 #define LDC_STARTPAGE 0x00000100 00186 #define LDC_PLAY_MFDC 0x00000800 00187 #define LDC_CLOCKWISE 0x00002000 00188 #define LDC_KILL_DOCUMENT 0x00010000 00189 #define LDC_META_PRINT 0x00020000 00190 #define LDC_INFODC 0x01000000 /* If CreateIC was passed. */ 00191 #define LDC_DEVCAPS 0x02000000 00192 #define LDC_ATENDPAGE 0x10000000 00193 00194 /* DC_ATTR Xform Flags */ 00195 #define METAFILE_TO_WORLD_IDENTITY 0x00000001 00196 #define WORLD_TO_PAGE_IDENTITY 0x00000002 00197 #define DEVICE_TO_PAGE_INVALID 0x00000008 00198 #define DEVICE_TO_WORLD_INVALID 0x00000010 00199 #define WORLD_TRANSFORM_SET 0x00000020 00200 #define POSITIVE_Y_IS_UP 0x00000040 00201 #define INVALIDATE_ATTRIBUTES 0x00000080 00202 #define PTOD_EFM11_NEGATIVE 0x00000100 00203 #define PTOD_EFM22_NEGATIVE 0x00000200 00204 #define ISO_OR_ANISO_MAP_MODE 0x00000400 00205 #define PAGE_TO_DEVICE_IDENTITY 0x00000800 00206 #define PAGE_TO_DEVICE_SCALE_IDENTITY 0x00001000 00207 #define PAGE_XLATE_CHANGED 0x00002000 00208 #define PAGE_EXTENTS_CHANGED 0x00004000 00209 #define WORLD_XFORM_CHANGED 0x00008000 00210 00211 /* BRUSH/RGN_ATTR Flags */ 00212 #define ATTR_CACHED 0x00000001 00213 #define ATTR_TO_BE_DELETED 0x00000002 00214 #define ATTR_NEW_COLOR 0x00000004 00215 #define ATTR_CANT_SELECT 0x00000008 00216 #define ATTR_RGN_VALID 0x00000010 00217 #define ATTR_RGN_DIRTY 0x00000020 00218 00219 00220 /* TYPES *********************************************************************/ 00221 00222 typedef struct _GDI_TABLE_ENTRY 00223 { 00224 PVOID KernelData; /* Points to the kernel mode structure */ 00225 DWORD ProcessId; /* process id that created the object, 0 for stock objects */ 00226 union{ /* temp union structure. */ 00227 LONG Type; /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */ 00228 struct{ 00229 USHORT FullUnique; /* unique */ 00230 UCHAR ObjectType; /* objt */ 00231 UCHAR Flags; /* Flags */ 00232 };}; 00233 PVOID UserData; /* pUser Points to the user mode structure, usually NULL though */ 00234 } GDI_TABLE_ENTRY, *PGDI_TABLE_ENTRY; 00235 00236 typedef struct _ENTRY 00237 { 00238 union _EINFO 00239 { 00240 struct _BASEOBJECT *pobj; 00241 HGDIOBJ hFree; 00242 } einfo; 00243 00244 union _OBJECTOWNER 00245 { 00246 struct _OBJECTOWNER_S 00247 { 00248 unsigned Lock:1; 00249 unsigned Pid_Shifted:31; 00250 } Share; 00251 ULONG ulObj; 00252 } ObjectOwner; 00253 00254 USHORT FullUnique; 00255 UCHAR Objt; 00256 UCHAR Flags; 00257 PVOID pUser; 00258 } ENTRY, *PENTRY; 00259 00260 /* 00261 * User space only structure! 00262 */ 00263 typedef struct __GDI_SHARED_HANDLE_TABLE /* Must match win32k/include/gdiobj.h */ 00264 { 00265 GDI_TABLE_ENTRY Entries[GDI_HANDLE_COUNT]; /* Handle table. */ 00266 DEVCAPS DevCaps; /* Shared device capabilities. */ 00267 FLONG flDeviceUniq; /* Device settings uniqueness. */ 00268 PVOID pvLangPack; /* Lanuage Pack. */ 00269 CFONT cfPublic[GDI_CFONT_MAX]; /* Public Fonts. */ 00270 DWORD dwCFCount; 00271 } GDI_SHARED_HANDLE_TABLE, *PGDI_SHARED_HANDLE_TABLE; 00272 00273 typedef struct _RGN_ATTR 00274 { 00275 ULONG AttrFlags; 00276 ULONG Flags; /* Clipping region's complexity. NULL, SIMPLE & COMPLEXREGION */ 00277 RECTL Rect; 00278 } RGN_ATTR,*PRGN_ATTR; 00279 00280 /* Local DC structure (_DC_ATTR) PVOID pvLDC; */ 00281 typedef struct _LDC 00282 { 00283 HDC hDC; 00284 ULONG Flags; 00285 INT iType; 00286 PVOID pvEmfDC; /* Pointer to ENHMETAFILE structure */ 00287 LPWSTR pwszPort; 00288 ABORTPROC pAbortProc; /* AbortProc for Printing */ 00289 DWORD CallBackTick; 00290 HANDLE hPrinter; /* Local or Remote Printer driver */ 00291 PVOID pUMPDev; 00292 PUMDHPDEV pUMdhpdev; 00293 DEVCAPS DevCaps; 00294 HBRUSH BrushColor; 00295 HPEN PenColor; 00296 } LDC, *PLDC; 00297 00298 typedef struct _DC_ATTR 00299 { 00300 PVOID pvLDC; 00301 ULONG ulDirty_; 00302 HANDLE hbrush; 00303 HANDLE hpen; 00304 COLORREF crBackgroundClr; 00305 ULONG ulBackgroundClr; 00306 COLORREF crForegroundClr; 00307 ULONG ulForegroundClr; 00308 COLORREF crBrushClr; 00309 ULONG ulBrushClr; 00310 COLORREF crPenClr; 00311 ULONG ulPenClr; 00312 DWORD iCS_CP; 00313 INT iGraphicsMode; 00314 BYTE jROP2; 00315 BYTE jBkMode; 00316 BYTE jFillMode; 00317 BYTE jStretchBltMode; 00318 POINTL ptlCurrent; 00319 POINTL ptfxCurrent; 00320 LONG lBkMode; 00321 LONG lFillMode; 00322 LONG lStretchBltMode; 00323 FLONG flFontMapper; 00324 LONG lIcmMode; 00325 HANDLE hcmXform; 00326 HCOLORSPACE hColorSpace; 00327 FLONG flIcmFlags; 00328 INT IcmBrushColor; 00329 INT IcmPenColor; 00330 PVOID pvLIcm; 00331 FLONG flTextAlign; 00332 LONG lTextAlign; 00333 LONG lTextExtra; 00334 LONG lRelAbs; 00335 LONG lBreakExtra; 00336 LONG cBreak; 00337 HANDLE hlfntNew; 00338 MATRIX mxWorldToDevice; 00339 MATRIX mxDeviceToWorld; 00340 MATRIX mxWorldToPage; 00341 FLOATOBJ efM11PtoD; 00342 FLOATOBJ efM22PtoD; 00343 FLOATOBJ efDxPtoD; 00344 FLOATOBJ efDyPtoD; 00345 INT iMapMode; 00346 DWORD dwLayout; 00347 LONG lWindowOrgx; 00348 POINTL ptlWindowOrg; 00349 SIZEL szlWindowExt; 00350 POINTL ptlViewportOrg; 00351 SIZEL szlViewportExt; 00352 FLONG flXform; 00353 SIZEL szlVirtualDevicePixel; 00354 SIZEL szlVirtualDeviceMm; 00355 SIZEL szlVirtualDeviceSize; 00356 POINTL ptlBrushOrigin; 00357 RGN_ATTR VisRectRegion; 00358 } DC_ATTR, *PDC_ATTR; 00359 00360 typedef struct _BRUSH_ATTR /* Used with pen too. */ 00361 { 00362 FLONG AttrFlags; 00363 COLORREF lbColor; 00364 } BRUSH_ATTR, *PBRUSH_ATTR; 00365 00366 typedef struct _FONT_ATTR 00367 { 00368 BOOL bSlowWidths; 00369 PCFONT pCharWidthData; 00370 } FONT_ATTR, *PFONT_ATTR; 00371 00372 00373 #endif Generated on Mon May 28 2012 04:38:15 for ReactOS by
1.7.6.1
|