Difference between revisions of "Techwiki:Win32k/DC"
ThePhysicist (talk | contribs) |
ThePhysicist (talk | contribs) |
||
Line 31: | Line 31: | ||
DCTYPE dctype; // 014 014 DC Type | DCTYPE dctype; // 014 014 DC Type | ||
DWORD fs; // 018 018 Flags | DWORD fs; // 018 018 Flags | ||
− | [[techwiki/win32k/PDEVOBJ|PPDEVOBJ]] ppdev; // | + | [[techwiki/win32k/PDEVOBJ|PPDEVOBJ]] ppdev; // 01C 01C |
− | PVOID hsem; // 020 | + | PVOID hsem; // 020 020 |
− | FLONG flGraphicsCaps; // 024 | + | FLONG flGraphicsCaps; // 024 024 |
− | FLONG flGraphicsCaps2; // 028 | + | FLONG flGraphicsCaps2; // 028 028 |
− | PVOID pdcattr; // 02c | + | PVOID pdcattr; // 02c 02c XP points to user mode DCATTR */ |
− | [[techwiki/win32k/DCLEVEL|DCLEVEL]] dclevel; // 030 | + | [[techwiki/win32k/DCLEVEL|DCLEVEL]] dclevel; // 030 030 DCLEVEL is 0x1B8 Bytes |
− | [[techwiki/win32k/DC_ATTR|DC_ATTR]] dcattr; // 1E8 | + | [[techwiki/win32k/DC_ATTR|DC_ATTR]] dcattr; // 1E8 1E8 DC_ATTR is 0x1D0 Bytes |
− | HDC hdcNext; // 3B8 | + | HDC hdcNext; // 3B8 3B8 |
− | HDC hdcPrev; // 3BC | + | HDC hdcPrev; // 3BC 3BC |
− | RECTL erclClip; // 3C0 | + | RECTL erclClip; // 3C0 3C0 |
− | POINTL ptlDCOrig; // 3D0 | + | POINTL ptlDCOrig; // 3D0 3D0 Ref in XDCOBJ::bCleanDC |
− | RECTL erclWindow; // 3D8 | + | RECTL erclWindow; // 3D8 3D8 See note 1 |
− | RECTL erclBounds; // 3E8 | + | RECTL erclBounds; // 3E8 3E8 SetGetBoundsRect stores the value here |
− | RECTL erclBoundsApp; // 3F8 | + | RECTL erclBoundsApp; // 3F8 3F8 |
− | PVOID prgnAPI; // 408 | + | PVOID prgnAPI; // 408 408 |
− | PVOID prgnVis; // 40C | + | PVOID prgnVis; // 40C 40C |
− | PVOID prgnRao; // 410 | + | PVOID prgnRao; // 410 410 |
− | POINTL ptlFillOrigin; // 414 | + | POINTL ptlFillOrigin; // 414 414 |
[[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]] eboFill; // 41C 41C Ref in XDCOBJ::bDeleteDC | [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]] eboFill; // 41C 41C Ref in XDCOBJ::bDeleteDC | ||
[[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]] eboLine; // 470 478 " | [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]] eboLine; // 470 478 " | ||
Line 65: | Line 65: | ||
ULONG ulCopyCount; // 604 624 Ref in NtGdiGetAndSetDCDword | ULONG ulCopyCount; // 604 624 Ref in NtGdiGetAndSetDCDword | ||
PVOID pSurfInfo; // 608 628 Ref in DC::bMakeInfoDC Copy from DCLEVEL.pSurface | PVOID pSurfInfo; // 608 628 Ref in DC::bMakeInfoDC Copy from DCLEVEL.pSurface | ||
− | POINTL ptlDoBanding; // 62C | + | POINTL ptlDoBanding; // 62C Ref in GreDoBanding |
/* DCMEMOBJ XP size == 0x634 */ | /* DCMEMOBJ XP size == 0x634 */ | ||
} DCOBJ; | } DCOBJ; |
Revision as of 02:17, 15 March 2009
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 020 FLONG flGraphicsCaps; // 024 024 FLONG flGraphicsCaps2; // 028 028 PVOID pdcattr; // 02c 02c XP points to user mode DCATTR */ DCLEVEL dclevel; // 030 030 DCLEVEL is 0x1B8 Bytes DC_ATTR dcattr; // 1E8 1E8 DC_ATTR is 0x1D0 Bytes HDC hdcNext; // 3B8 3B8 HDC hdcPrev; // 3BC 3BC RECTL erclClip; // 3C0 3C0 POINTL ptlDCOrig; // 3D0 3D0 Ref in XDCOBJ::bCleanDC RECTL erclWindow; // 3D8 3D8 See note 1 RECTL erclBounds; // 3E8 3E8 SetGetBoundsRect stores the value here RECTL erclBoundsApp; // 3F8 3F8 PVOID prgnAPI; // 408 408 PVOID prgnVis; // 40C 40C PVOID prgnRao; // 410 410 POINTL ptlFillOrigin; // 414 414 EBRUSHOBJ eboFill; // 41C 41C Ref in XDCOBJ::bDeleteDC EBRUSHOBJ eboLine; // 470 478 " EBRUSHOBJ eboText; // 4c4 4D4 " EBRUSHOBJ eboBackground; // 518 530 " HFONT hlfntCur; // 56c 58C FLONG flSimulationFlags; // 570 590 // 0x20 Italic & 0x80 Underline LONG lEscapement; // 574 594 RFONT * prfnt; // 578 598 -> 'Gfnt' XCLIPOBJ co; // 57c 59C Ref in NtGdiSetPixel called XCLIPOBJ::vSetup PPFF pPFFList; // 5f8 618 PFF* Ref in XDCOBJ::bDeleteDC PVOID pClrxFormLnk; // 61C Ref in XDCOBJ::vCleanupColorTransform, COLORTRANSFORMOBJ see Note 2. INT ipfdDevMax; // 600 620 Ref in XDCOBJ::ipfdDevMax/Get, -1 NtGdiEndPage, 0 GreDoBanding ULONG ulCopyCount; // 604 624 Ref in NtGdiGetAndSetDCDword PVOID pSurfInfo; // 608 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.