Techwiki:Win32k/DC
Revision as of 01:57, 15 March 2009 by ThePhysicist (talk | contribs)
Windows XP version of DCOBJ
typedef enum { DCTYPE_DIRECT = 0 DCTYPE_MEMORY = 1 DCTYPE_INFO = 2 } DCTYPE;
fs:
#define DC_DISPLAY 1 #define DC_DIRECT 2 #define DC_CANCELED 4 #define DC_PERMANANT 0x08 #define DC_DIRTY_RAO 0x10 #define DC_ACCUM_WMGR 0x20 #define DC_ACCUM_APP 0x40 #define DC_RESET 0x80 #define DC_SYNCHRONIZEACCESS 0x100 #define DC_EPSPRINTINGESCAPE 0x200 #define DC_TEMPINFODC 0x400 #define DC_FULLSCREEN 0x800 #define DC_IN_CLONEPDEV 0x1000 #define DC_REDIRECTION 0x2000 #define DC_SHAREACCESS 0x4000
typedef struct { // W2k WXP Note BASEOBJECT BaseObject; // 000 000 DHPDEV dhpdev; // 010 010 Device handle to PDEV DCTYPE dctype; // 014 014 DC Type DWORD fs; // 018 018 Flags PPDEVOBJ ppdev; // 01c 01c PVOID hsem; // 020 FLONG flGraphicsCaps; // 024 FLONG flGraphicsCaps2; // 028 PVOID pdcattr; // 02c XP points to user mode DCATTR */ DCLEVEL dclevel; // 030 DCLEVEL is 0x1B8 Bytes DC_ATTR dcattr; // 1E8 DC_ATTR is 0x1D0 Bytes HDC hdcNext; // 3B8 HDC hdcPrev; // 3BC RECTL erclClip; // 3C0 POINTL ptlDCOrig; // 3D0 Ref in XDCOBJ::bCleanDC RECTL erclWindow; // 3D8 See note 1 RECTL erclBounds; // 3E8 SetGetBoundsRect stores the value here RECTL erclBoundsApp; // 3F8 PVOID prgnAPI; // 408 PVOID prgnVis; // 40C PVOID prgnRao; // 410 POINTL ptlFillOrigin; // 414 EBRUSHOBJ eboFill; // 41C Ref in XDCOBJ::bDeleteDC EBRUSHOBJ eboLine; // 478 " EBRUSHOBJ eboText; // 4D4 " EBRUSHOBJ eboBackground; // 530 " HFONT hlfntCur; // 58C FLONG flSimulationFlags; // 590 // 0x20 Italic & 0x80 Underline LONG lEscapement; // 594 RFONT * prfnt; // 598 -> 'Gfnt' XCLIPOBJ co; // 59C Ref in NtGdiSetPixel called XCLIPOBJ::vSetup PPFF pPFFList; // 618 PFF* Ref in XDCOBJ::bDeleteDC PVOID pClrxFormLnk; // 61C Ref in XDCOBJ::vCleanupColorTransform, COLORTRANSFORMOBJ see Note 2. INT ipfdDevMax; // 620 Ref in XDCOBJ::ipfdDevMax/Get, -1 NtGdiEndPage, 0 GreDoBanding ULONG ulCopyCount; // 624 Ref in NtGdiGetAndSetDCDword PVOID pSurfInfo; // 628 Ref in DC::bMakeInfoDC Copy from DCLEVEL.pSurface POINTL ptlDoBanding; // 62C Ref in GreDoBanding /* DCMEMOBJ XP size == 0x634 */ } DCOBJ;
Note:
1. NtGdiGetDeviceWidth
erclWindow: Rectangle Window 3D8 = LONG left; 3DC = LONG top; 3E0 = LONG right; 3E4 = LONG bottom; return (right - left);
2. Pointer to a link list of Color Transforms.
- The regions prgnAPI, prgnVis and prgnRao don't have a handle.