Difference between revisions of "Techwiki:Win32k/DC"

From ReactOS Wiki
Jump to: navigation, search
Line 1: Line 1:
 
Windows XP version of DCOBJ
 
Windows XP version of DCOBJ
 
typedef enum
 
{
 
  DCTYPE_DIRECT = 0
 
  DCTYPE_MEMORY = 1
 
  DCTYPE_INFO = 2
 
} DCTYPE;
 
  
 
  typedef struct
 
  typedef struct
 
  { //                                              W2k WXP Note
 
  { //                                              W2k WXP Note
 
   [[techwiki/win32k/BASEOBJECT|BASEOBJECT]]  BaseObject;                      // 000 000
 
   [[techwiki/win32k/BASEOBJECT|BASEOBJECT]]  BaseObject;                      // 000 000
   DHPDEV      dhpdev;                          // 010 010 Device handle to PDEV
+
   DHPDEV      dhpdev;                          // 010 010
   DCTYPE      dctype;                          // 014 014 DC Type
+
   DCTYPE      dctype;                          // 014 014
 
   DWORD      fs;                              // 018 018 Flags
 
   DWORD      fs;                              // 018 018 Flags
 
   [[techwiki/win32k/PDEVOBJ|PPDEVOBJ]]    ppdev;                          // 01C 01C
 
   [[techwiki/win32k/PDEVOBJ|PPDEVOBJ]]    ppdev;                          // 01C 01C
Line 52: Line 45:
 
  } DCOBJ;
 
  } DCOBJ;
  
fs:
+
===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 cpmbination of the following values.
 +
 
 
  #define DC_DISPLAY  1
 
  #define DC_DISPLAY  1
 
  #define DC_DIRECT 2
 
  #define DC_DIRECT 2
Line 69: Line 79:
 
  #define DC_SHAREACCESS 0x4000
 
  #define DC_SHAREACCESS 0x4000
  
flPath:
+
''ppdev''
#define DCPATH_ACTIVE 1
+
:Pointer to the DCs PDEV.
#define DCPATH_SAVE 2
 
#define DCPATH_CLOCKWISE 4
 
  
flFontState:
+
''hsem''
#define DC_DIRTYFONT_XFORM 1
 
#define DC_DIRTYFONT_LFONT 2
 
#define DC_UFI_MAPPING 4
 
  
 +
''flGraphicsCaps''
  
Note:
+
''flGraphicsCaps2''
  
1. NtGdiGetDeviceWidth
+
''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!
  
erclWindow: Rectangle Window
+
''dclevel''
3D8 = LONG left;  
+
:DCLEVEL is 0x1B8 Bytes
3DC = LONG top;  
+
 
3E0 = LONG right;  
+
''dcattr''
3E4 = LONG bottom;
+
:DC_ATTR is 0x1D0 Bytes
return (right - left);
+
 
 +
''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''
 +
:Ref in XDCOBJ::bCleanDC
 +
 
 +
''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.
 +
 
 +
''prgnVis''
 +
:Doesn't have a handle.
 +
 
 +
''prgnRao''
 +
:Doesn't have a handle.
 +
 
 +
''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
  
2. Pointer to a link list of Color Transforms.
+
''pSurfInfo''
 +
:Ref in DC::bMakeInfoDC Copy from DCLEVEL.pSurface
  
* The regions prgnAPI, prgnVis and prgnRao don't have a handle.
+
''ptlDoBanding''
 +
:Ref in GreDoBanding

Revision as of 23:54, 19 March 2009

Windows XP version of DCOBJ

typedef struct
{ //                                              W2k WXP Note
  BASEOBJECT  BaseObject;                      // 000 000
  DHPDEV      dhpdev;                          // 010 010
  DCTYPE      dctype;                          // 014 014
  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;                    // 60C 62C Ref in GreDoBanding
  /* DCMEMOBJ XP size == 0x634 */
} DCOBJ;

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 cpmbination 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

Ref in XDCOBJ::bCleanDC

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.

prgnVis

Doesn't have a handle.

prgnRao

Doesn't have a handle.

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