Difference between revisions of "Techwiki:Win32k/DC"

From ReactOS Wiki
Jump to: navigation, search
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;                          // 01c 01c
+
   [[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     XP points to user mode DCATTR */
+
   PVOID      pdcattr;                        // 02c 02c XP points to user mode DCATTR */
   [[techwiki/win32k/DCLEVEL|DCLEVEL]]    dclevel;                        // 030     DCLEVEL is 0x1B8 Bytes
+
   [[techwiki/win32k/DCLEVEL|DCLEVEL]]    dclevel;                        // 030 030 DCLEVEL is 0x1B8 Bytes
   [[techwiki/win32k/DC_ATTR|DC_ATTR]]    dcattr;                          // 1E8     DC_ATTR is 0x1D0 Bytes
+
   [[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     Ref in XDCOBJ::bCleanDC
+
   POINTL      ptlDCOrig;                      // 3D0 3D0 Ref in XDCOBJ::bCleanDC
   RECTL      erclWindow;                      // 3D8     See note 1
+
   RECTL      erclWindow;                      // 3D8 3D8 See note 1
   RECTL      erclBounds;                      // 3E8     SetGetBoundsRect stores the value here
+
   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     Ref in GreDoBanding
+
   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.