Difference between revisions of "Techwiki:Win32k/DC"
ThePhysicist (talk | contribs) |
ThePhysicist (talk | contribs) |
||
Line 1: | Line 1: | ||
Windows XP version of DCOBJ | Windows XP version of DCOBJ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
typedef enum | typedef enum | ||
{ | { | ||
Line 52: | Line 7: | ||
DCTYPE_INFO = 2 | DCTYPE_INFO = 2 | ||
} DCTYPE; | } DCTYPE; | ||
+ | |||
+ | typedef struct | ||
+ | { // W2k WXP Note | ||
+ | [[techwiki/win32k/BASEOBJECT|BASEOBJECT]] BaseObject; // 000 000 | ||
+ | DHPDEV dhpdev; // 010 010 Device handle to PDEV | ||
+ | DCTYPE dctype; // 014 014 DC Type | ||
+ | DWORD fs; // 018 Flags | ||
+ | [[techwiki/win32k/PDEVOBJ|PPDEVOBJ]] ppdev; // 01c | ||
+ | PVOID hsem; // 020 | ||
+ | FLONG flGraphicsCaps; // 024 | ||
+ | FLONG flGraphicsCaps2; // 028 | ||
+ | PVOID pdcattr; // 02c XP points to user mode DCATTR */ | ||
+ | [[techwiki/win32k/DCLEVEL|DCLEVEL]] dclevel; // 030 DCLEVEL is 0x1B8 Bytes | ||
+ | [[techwiki/win32k/DC_ATTR|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 | ||
+ | [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]] eboFill; // 41C Ref in XDCOBJ::bDeleteDC | ||
+ | [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]] eboLine; // 478 " | ||
+ | [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]] eboText; // 4D4 " | ||
+ | [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]] eboBackground; // 530 " | ||
+ | HFONT hlfntCur; // 58C | ||
+ | FLONG flSimulationFlags; // 590 // 0x20 Italic & 0x80 Underline | ||
+ | LONG lEscapement; // 594 | ||
+ | RFONT * prfnt; // 598 -> 'Gfnt' | ||
+ | [[Techwiki/win32k/ClipRgnWnd|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; | ||
fs: | fs: |
Revision as of 01:47, 15 March 2009
Windows XP version of DCOBJ
typedef enum { DCTYPE_DIRECT = 0 DCTYPE_MEMORY = 1 DCTYPE_INFO = 2 } DCTYPE;
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 Flags PPDEVOBJ ppdev; // 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;
fs:
#define DC_DISPLAY #define DC_CANCELED #define DC_PERMANANT #define DC_DIRTY_RAO #define DC_ACCUM_WMGR #define DC_ACCUM_APP #define DC_RESET #define DC_SYNCHRONIZEACCESS #define DC_EPSPRINTINGESCAPE #define DC_TEMPINFODC #define DC_FULLSCREEN #define DC_IN_CLONEPDEV #define DC_REDIRECTION #define DC_SHAREACCESS
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.