⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntgdihdl.h

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 H
字号:
/*
 * COPYRIGHT:       See COPYING in the top level directory
 * PROJECT:         ReactOS Win32 Graphical Subsystem (WIN32K)
 * FILE:            include/win32k/ntgdihal.h
 * PURPOSE:         Win32 Shared GDI Handle/Object Types
 * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
 */

/* INCLUDES ******************************************************************/

#ifndef _NTGDIHDL_
#define _NTGDIHDL_

/* DEFINES *******************************************************************/

/* Base address where the handle table is mapped to */
#define GDI_HANDLE_TABLE_BASE_ADDRESS (0x400000)

/* GDI handle table can hold 0x4000 handles */
#define GDI_HANDLE_COUNT 0x4000
#define GDI_GLOBAL_PROCESS (0x0)

/* Handle Masks and shifts */
#define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1)
#define GDI_HANDLE_TYPE_MASK  0x007f0000
#define GDI_HANDLE_STOCK_MASK 0x00800000
#define GDI_HANDLE_REUSE_MASK 0xff000000
#define GDI_HANDLE_REUSECNT_SHIFT 24

/*! \defgroup GDI object types
 *
 *  GDI object types
 *
 */
/*@{*/
#define GDI_OBJECT_TYPE_DC          0x00010000
#define GDI_OBJECT_TYPE_REGION      0x00040000
#define GDI_OBJECT_TYPE_BITMAP      0x00050000
#define GDI_OBJECT_TYPE_PALETTE     0x00080000
#define GDI_OBJECT_TYPE_FONT        0x000a0000
#define GDI_OBJECT_TYPE_BRUSH       0x00100000
#define GDI_OBJECT_TYPE_EMF         0x00210000
#define GDI_OBJECT_TYPE_PEN         0x00300000
#define GDI_OBJECT_TYPE_EXTPEN      0x00500000
#define GDI_OBJECT_TYPE_COLORSPACE  0x00090000
#define GDI_OBJECT_TYPE_METADC      0x00660000
#define GDI_OBJECT_TYPE_METAFILE    0x00260000
#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000
/* Following object types made up for ROS */
#define GDI_OBJECT_TYPE_ENHMETADC   0x00740000
#define GDI_OBJECT_TYPE_MEMDC       0x00750000
#define GDI_OBJECT_TYPE_DCE         0x00770000
#define GDI_OBJECT_TYPE_DONTCARE    0x007f0000
/** Not really an object type. Forces GDI_FreeObj to be silent. */
#define GDI_OBJECT_TYPE_SILENT      0x80000000
/*@}*/

/* Handle macros */
#define GDI_HANDLE_CREATE(i, t)    \
    ((HANDLE)(((i) & GDI_HANDLE_INDEX_MASK) | ((t) & GDI_HANDLE_TYPE_MASK)))

#define GDI_HANDLE_GET_INDEX(h)    \
    (((ULONG_PTR)(h)) & GDI_HANDLE_INDEX_MASK)

#define GDI_HANDLE_GET_TYPE(h)     \
    (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK)

#define GDI_HANDLE_IS_TYPE(h, t)   \
    ((t) == (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK))

#define GDI_HANDLE_IS_STOCKOBJ(h)  \
    (0 != (((ULONG_PTR)(h)) & GDI_HANDLE_STOCK_MASK))

#define GDI_HANDLE_SET_STOCKOBJ(h) \
    ((h) = (HANDLE)(((ULONG_PTR)(h)) | GDI_HANDLE_STOCK_MASK))

/* DC_ATTR Dirty Flags */
#define DIRTY_FILL                          0x00000001#define DIRTY_LINE                          0x00000002#define DIRTY_TEXT                          0x00000004#define DIRTY_BACKGROUND                    0x00000008#define DIRTY_CHARSET                       0x00000010#define SLOW_WIDTHS                         0x00000020#define DC_CACHED_TM_VALID                  0x00000040#define DISPLAY_DC                          0x00000080#define DIRTY_PTLCURRENT                    0x00000100#define DIRTY_PTFXCURRENT                   0x00000200#define DIRTY_STYLESTATE                    0x00000400#define DC_PLAYMETAFILE                     0x00000800#define DC_BRUSH_DIRTY                      0x00001000#define DC_PEN_DIRTY                        0x00002000#define DC_DIBSECTION                       0x00004000#define DC_LAST_CLIPRGN_VALID               0x00008000#define DC_PRIMARY_DISPLAY                  0x00010000

#define LDC_LDC     0x01    // (init) local DC other than a normal DC
#define LDC_EMFLDC  0x02    // Enhance Meta File local DC

/* TYPES *********************************************************************/

typedef struct _GDI_TABLE_ENTRY
{
    PVOID KernelData; /* Points to the kernel mode structure */
    HANDLE ProcessId; /* process id that created the object, 0 for stock objects */
    LONG Type;        /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */
    PVOID UserData;   /* Points to the user mode structure, usually NULL though */
} GDI_TABLE_ENTRY, *PGDI_TABLE_ENTRY;

typedef struct _RGNATTR{    ULONG AttrFlags;    ULONG Flags;    RECTL Rect;} RGNATTR,*PRGNATTR;

// Local DC structure (_DC_ATTR) PVOID pvLDC;
typedef struct _LDC
{
    HDC hDC;
    ULONG Flags;
    INT iType;
    PVOID pEmfDC;         /* Pointer to ENHMETAHEADER structure */
    ABORTPROC pAbortProc; /* AbortProc for Printing */
} LDC, *PLDC;

typedef struct _DC_ATTR
{
    PVOID pvLDC;    ULONG ulDirty_;    HANDLE hbrush;    HANDLE hpen;    COLORREF crBackgroundClr;    ULONG ulBackgroundClr;    COLORREF crForegroundClr;    ULONG ulForegroundClr;    COLORREF crBrushClr;    ULONG ulBrushClr;    COLORREF crPenClr;    ULONG ulPenClr;    DWORD iCS_CP;    INT iGraphicsMode;    BYTE jROP2;    BYTE jBkMode;    BYTE jFillMode;    BYTE jStretchBltMode;    POINTL ptlCurrent;    POINTL ptfxCurrent;    LONG lBkMode;    LONG lFillMode;    LONG lStretchBltMode;    FLONG flFontMapper;    LONG lIcmMode;    HANDLE hcmXform;    HCOLORSPACE hColorSpace;    INT IcmBrushColor;    INT IcmPenColor;    FLONG flTextAlign;    LONG lTextAlign;    LONG lTextExtra;    LONG lRelAbs;    LONG lBreakExtra;    LONG cBreak;    HANDLE hlfntNew;    MATRIX_S mxWorldToDevice;    MATRIX_S mxDevicetoWorld;    MATRIX_S mxWorldToPage;    INT iMapMode;    DWORD dwLayout;    LONG lWindowOrgx;    POINTL ptlWindowOrg;    SIZEL szlWindowExt;    POINTL ptlViewportOrg;    SIZEL szlViewportExt;    FLONG flXform;    SIZEL szlVirtualDevicePixel;    SIZEL szlVirtualDeviceMm;    POINTL ptlBrushOrigin;    RGNATTR VisRectRegion;
} DC_ATTR, *PDC_ATTR;

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -