ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ntgdihdl.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.