Difference between revisions of "Techwiki:Win32k/DC"
ThePhysicist (talk | contribs) |
|||
(12 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | Windows XP version of | + | Windows XP version of DC |
− | typedef struct | + | typedef struct _DC |
{ // W2k WXP | { // W2k WXP | ||
− | [[techwiki | + | [[techwiki:win32k/BASEOBJECT|BASEOBJECT]] BaseObject; // 000 000 |
DHPDEV dhpdev; // 010 010 | DHPDEV dhpdev; // 010 010 | ||
DCTYPE dctype; // 014 014 | DCTYPE dctype; // 014 014 | ||
DWORD fs; // 018 018 | DWORD fs; // 018 018 | ||
− | [[techwiki | + | [[techwiki:win32k/PDEVOBJ|PPDEVOBJ]] ppdev; // 01C 01C |
PVOID hsem; // 020 020 | PVOID hsem; // 020 020 | ||
FLONG flGraphicsCaps; // 024 024 | FLONG flGraphicsCaps; // 024 024 | ||
FLONG flGraphicsCaps2; // 028 028 | FLONG flGraphicsCaps2; // 028 028 | ||
− | + | PDC_ATTR pdcattr; // 02c 02c | |
− | [[techwiki | + | [[techwiki:win32k/DCLEVEL|DCLEVEL]] dclevel; // 030 030 DCLEVEL is 0x1B8 Bytes |
− | [[techwiki | + | [[techwiki:win32k/DC_ATTR|DC_ATTR]] dcattr; // 1E8 1E8 DC_ATTR is 0x1D0 Bytes |
HDC hdcNext; // 3B8 3B8 | HDC hdcNext; // 3B8 3B8 | ||
HDC hdcPrev; // 3BC 3BC | HDC hdcPrev; // 3BC 3BC | ||
Line 21: | Line 21: | ||
RECTL erclBounds; // 3E8 3E8 | RECTL erclBounds; // 3E8 3E8 | ||
RECTL erclBoundsApp; // 3F8 3F8 | RECTL erclBoundsApp; // 3F8 3F8 | ||
− | + | PREGION prgnAPI; // 408 408 | |
− | + | PREGION prgnVis; // 40C 40C | |
− | + | PREGION prgnRao; // 410 410 | |
POINTL ptlFillOrigin; // 414 414 | POINTL ptlFillOrigin; // 414 414 | ||
− | [[techwiki | + | [[techwiki:win32k/EBRUSHOBJ|EBRUSHOBJ]] eboFill; // 41C 41C |
− | [[techwiki | + | [[techwiki:win32k/EBRUSHOBJ|EBRUSHOBJ]] eboLine; // 470 478 |
− | [[techwiki | + | [[techwiki:win32k/EBRUSHOBJ|EBRUSHOBJ]] eboText; // 4c4 4D4 |
− | [[techwiki | + | [[techwiki:win32k/EBRUSHOBJ|EBRUSHOBJ]] eboBackground; // 518 530 |
HFONT hlfntCur; // 56c 58C | HFONT hlfntCur; // 56c 58C | ||
FLONG flSimulationFlags; // 570 590 | FLONG flSimulationFlags; // 570 590 | ||
LONG lEscapement; // 574 594 | LONG lEscapement; // 574 594 | ||
RFONT * prfnt; // 578 598 | RFONT * prfnt; // 578 598 | ||
− | [[Techwiki | + | [[Techwiki:win32k/ClipRgnWnd|XCLIPOBJ]] co; // 57c 59C |
PPFF pPFFList; // 5f8 618 | PPFF pPFFList; // 5f8 618 | ||
PVOID pClrxFormLnk; // 61C | PVOID pClrxFormLnk; // 61C | ||
Line 41: | Line 41: | ||
POINTL ptlDoBanding; // 60C 62C | POINTL ptlDoBanding; // 60C 62C | ||
/* DCMEMOBJ XP size == 0x634 */ | /* DCMEMOBJ XP size == 0x634 */ | ||
− | } | + | } DC, *PDC; |
===Fields=== | ===Fields=== | ||
Line 53: | Line 53: | ||
typedef enum | typedef enum | ||
{ | { | ||
− | DCTYPE_DIRECT = 0 | + | DCTYPE_DIRECT = 0, |
− | DCTYPE_MEMORY = 1 | + | DCTYPE_MEMORY = 1, |
− | DCTYPE_INFO = 2 | + | DCTYPE_INFO = 2, |
} DCTYPE; | } DCTYPE; | ||
''fs'' | ''fs'' | ||
− | : Flags. Can be a | + | : Flags. Can be a combination of the following values. |
#define DC_DISPLAY 1 | #define DC_DISPLAY 1 | ||
Line 104: | Line 104: | ||
''ptlDCOrig'' | ''ptlDCOrig'' | ||
− | : | + | :The DC's origin. Describes the point in device coordinates that matches the logical coordinates (0,0). See also GetDCOrgEx. |
''erclWindow'' | ''erclWindow'' | ||
Line 121: | Line 121: | ||
''prgnAPI'' | ''prgnAPI'' | ||
− | :Doesn't have a handle. | + | :Doesn't have a handle. Intersection of the meta region and the clipping region. |
''prgnVis'' | ''prgnVis'' | ||
− | :Doesn't have a handle. | + | :Doesn't have a handle. |
''prgnRao'' | ''prgnRao'' | ||
− | :Doesn't have a handle. | + | :Doesn't have a handle. Intersection of the API region and the system region. |
''ptlFillOrigin'' | ''ptlFillOrigin'' | ||
Line 176: | Line 176: | ||
''ptlDoBanding'' | ''ptlDoBanding'' | ||
:Ref in GreDoBanding | :Ref in GreDoBanding | ||
+ | |||
+ | |||
+ | == See also == | ||
+ | [[techwiki:DC State Saving]] | ||
+ | |||
+ | ===References=== | ||
+ | * [https://books.google.hr/books?id=-O92IIF1Bj4C&pg=PA197&lpg=PA197 Feng Yuan - Windows Graphics Programming: Win32 GDI and DirectDraw] | ||
+ | * gdikdx |
Latest revision as of 00:45, 10 January 2020
Windows XP version of DC
typedef struct _DC { // W2k WXP BASEOBJECT BaseObject; // 000 000 DHPDEV dhpdev; // 010 010 DCTYPE dctype; // 014 014 DWORD fs; // 018 018 PPDEVOBJ ppdev; // 01C 01C PVOID hsem; // 020 020 FLONG flGraphicsCaps; // 024 024 FLONG flGraphicsCaps2; // 028 028 PDC_ATTR pdcattr; // 02c 02c 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 RECTL erclWindow; // 3D8 3D8 RECTL erclBounds; // 3E8 3E8 RECTL erclBoundsApp; // 3F8 3F8 PREGION prgnAPI; // 408 408 PREGION prgnVis; // 40C 40C PREGION prgnRao; // 410 410 POINTL ptlFillOrigin; // 414 414 EBRUSHOBJ eboFill; // 41C 41C EBRUSHOBJ eboLine; // 470 478 EBRUSHOBJ eboText; // 4c4 4D4 EBRUSHOBJ eboBackground; // 518 530 HFONT hlfntCur; // 56c 58C FLONG flSimulationFlags; // 570 590 LONG lEscapement; // 574 594 RFONT * prfnt; // 578 598 XCLIPOBJ co; // 57c 59C PPFF pPFFList; // 5f8 618 PVOID pClrxFormLnk; // 61C INT ipfdDevMax; // 600 620 ULONG ulCopyCount; // 604 624 PVOID pSurfInfo; // 608 628 POINTL ptlDoBanding; // 60C 62C /* DCMEMOBJ XP size == 0x634 */ } DC, *PDC;
Fields
dhpdev
- Device handle to the PDEV.
dctype
- The type of DC. Can be one of the following values:
typedef enum { DCTYPE_DIRECT = 0, DCTYPE_MEMORY = 1, DCTYPE_INFO = 2, } DCTYPE;
fs
- Flags. Can be a combination of the following values.
#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
ppdev
- Pointer to the DCs PDEV.
hsem
flGraphicsCaps
flGraphicsCaps2
pdcattr
- Pointer to the DCs DC_ATTR. User mode pointer for user mode objects. Points to DC.dcattr if the DC is a kernel DC. Never NULL!
dclevel
- DCLEVEL is 0x1B8 Bytes
dcattr
- DC_ATTR is 0x1D0 Bytes
hdcNext
- Points to the next DC in the global list of DCs.
hdcPrev
erclClip
- a RECTL structure, describing the bounding box of the DCs clip reagion.
ptlDCOrig
- The DC's origin. Describes the point in device coordinates that matches the logical coordinates (0,0). See also GetDCOrgEx.
erclWindow
- NtGdiGetDeviceWidth
- erclWindow: Rectangle Window
- 3D8 = LONG left;
- 3DC = LONG top;
- 3E0 = LONG right;
- 3E4 = LONG bottom;
- return (right - left);
erclBounds
- SetGetBoundsRect stores the value here
erclBoundsApp
prgnAPI
- Doesn't have a handle. Intersection of the meta region and the clipping region.
prgnVis
- Doesn't have a handle.
prgnRao
- Doesn't have a handle. Intersection of the API region and the system region.
ptlFillOrigin
eboFill
- Describes the currently active fill brush. Might need to be updated from the DC_ATTR.
- Ref in XDCOBJ::bDeleteDC
eboLine
- Describes the currently active Line brush. Might need to be updated from the DC_ATTR.
eboText
- Describes the currently active text brush. Might need to be updated from the DC_ATTR.
eboBackground
- Describes the currently active background brush. Might need to be updated from the DC_ATTR.
hlfntCur
- Handle to the currently selected font.
flSimulationFlags
- Flags that describe font simulation. 0x20 Italic & 0x80 Underline
lEscapement
prfnt
- Pointer to the currently selected fon's RFONT. Might need to be updated from the DC_ATTR.
co
- Ref in NtGdiSetPixel called XCLIPOBJ::vSetup
pPFFList
- PFF* Ref in XDCOBJ::bDeleteDC
pClrxFormLnk
- Pointer to a link list of Color Transforms.
- Ref in XDCOBJ::vCleanupColorTransform, COLORTRANSFORMOBJ
ipfdDevMax
- Ref in XDCOBJ::ipfdDevMax/Get, -1 NtGdiEndPage, 0 GreDoBanding
ulCopyCount
- Ref in NtGdiGetAndSetDCDword
pSurfInfo
- Ref in DC::bMakeInfoDC Copy from DCLEVEL.pSurface
ptlDoBanding
- Ref in GreDoBanding