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 struct
 
{
 
  /* 0x0000 */  [[techwiki/win32k/BASEOBJECT|BASEOBJECT]]  BaseObject;
 
  /* 0x0010 */  DHPDEV      dhpdev;    /* (Handle BITMAP) of PDev */
 
  /* 0x0014 */  DCTYPE      dctype;    /* DC Type */
 
  /* 0x0018 */  DWORD      fs;        /* Flags */
 
  /* 0x001C */  [[techwiki/win32k/PDEVOBJ|PPDEVOBJ]]    ppdev;    /* Pointer to structure. aka PDEVOBJ */
 
  /* 0x0020 */  PVOID      hsem; 
 
  /* 0x0024 */  FLONG      flGraphicsCaps;
 
  /* 0x0028 */  FLONG      flGraphicsCaps2;
 
  /* 0x002C */  PVOID      pdcattr;  /* XP points to user mode DCATTR */
 
  /* 0x0030 */  [[techwiki/win32k/DCLEVEL|DCLEVEL]]    dclevel;  /* DCLEVEL is 0x1B8 Bytes */
 
  /* 0x01E8 */  [[techwiki/win32k/DC_ATTR|DC_ATTR]]    dcattr;  /* DC_ATTR is 0x1D0 Bytes */
 
  /* 0x03B8 */  HDC        hdcNext;
 
  /* 0x03BC */  HDC        hdcPrev;
 
  /* 0x03C0 */  RECTL      erclClip;
 
  /* 0x03D0 */  POINTL      ptlDCOrig; /* Ref in XDCOBJ::bCleanDC */
 
  /* 0x03D8 */  RECTL      erclWindow; /* See note 1 */
 
  /* 0x03E8 */  RECTL      erclBounds; /* SetGetBoundsRect stores the value here */
 
  /* 0x03F8 */  RECTL      erclBoundsApp;
 
  /* 0x0408 */  PVOID      prgnAPI;
 
  /* 0x040C */  PVOID      prgnVis;
 
  /* 0x0410 */  PVOID      prgnRao;
 
  /* 0x0414 */  POINTL      ptlFillOrigin;
 
  /* 0x041C */  [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]]  eboFill; /* Ref in XDCOBJ::bDeleteDC */
 
  /* 0x0478 */  [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]]  eboLine; /*      " */
 
  /* 0x04D4 */  [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]]  eboText; /*      " */
 
  /* 0x0530 */  [[techwiki/win32k/EBRUSHOBJ|EBRUSHOBJ]]  eboBackground; /* " */
 
  /* 0x058C */  HFONT      hlfntCur;
 
  /* 0x0590 */  FLONG      flSimulationFlags; // 0x20 Italic & 0x80 Underline
 
  /* 0x0594 */  LONG        lEscapement;
 
  /* 0x0598 */  RFONT *    prfnt; // -> 'Gfnt'
 
  /* 0x059C */  [[Techwiki/win32k/ClipRgnWnd|XCLIPOBJ]]    co;          /* Ref in NtGdiSetPixel called XCLIPOBJ::vSetup */
 
  /* 0x0618 */  PPFF        pPFFList;    /* PFF* Ref in XDCOBJ::bDeleteDC */
 
  /* 0x061C */  PVOID      pClrxFormLnk; /* Ref in XDCOBJ::vCleanupColorTransform,
 
                                              COLORTRANSFORMOBJ see Note 2.*/
 
  /* 0x0620 */  INT        ipfdDevMax;  /* Ref in XDCOBJ::ipfdDevMax/Get, -1 NtGdiEndPage,
 
                                              0 GreDoBanding */
 
  /* 0x0624 */  ULONG      ulCopyCount;  /* Ref in NtGdiGetAndSetDCDword */
 
  /* 0x0628 */  PVOID      pSurfInfo;    /* Ref in DC::bMakeInfoDC Copy from DCLEVEL.pSurface */
 
  /* 0x062C */  POINTL      ptlDoBanding; /* Ref in GreDoBanding */
 
  /* DCMEMOBJ XP size == 0x634 */
 
} DCOBJ;
 
 
dctype:
 
 
  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.