Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

532 lines
12 KiB

/*++
Copyright (c) 1997-1999 Microsoft Corporation
Module Name:
umpd.cxx
Abstract:
User-mode printer driver support
Environment:
Windows NT 5.0
Revision History:
07/8/97 -lingyunw-
Created it.
--*/
#ifndef __UMPD__
#define __UMPD__
#define INDEX_UMPDDrvEnableDriver INDEX_LAST+1
#define INDEX_LoadUMPrinterDrv INDEX_LAST+2 // used for WOW64, spooler calls
#define INDEX_UnloadUMPrinterDrv INDEX_LAST+3
#define INDEX_UMDriverFN INDEX_LAST+4
#define INDEX_DocumentEvent INDEX_LAST+5
#define INDEX_StartDocPrinterW INDEX_LAST+6
#define INDEX_StartPagePrinter INDEX_LAST+7
#define INDEX_EndPagePrinter INDEX_LAST+8
#define INDEX_EndDocPrinter INDEX_LAST+9
#define INDEX_AbortPrinter INDEX_LAST+10
#define INDEX_ResetPrinterW INDEX_LAST+11
#define INDEX_QueryColorProfile INDEX_LAST+12
#define INDEX_UMPDAllocUserMem INDEX_LAST+13 // used for WOW64, large bitmaps
#define INDEX_UMPDCopyMemory INDEX_LAST+14
#define INDEX_UMPDFreeMemory INDEX_LAST+15
#define INDEX_UMPDEngFreeUserMem INDEX_LAST+16
typedef struct _HPRINTERLIST
{
struct _HPRINTERLIST *pNext;
DWORD clientPid;
DWORD hPrinter32;
HANDLE hPrinter64;
}HPRINTERLIST, *PHPRINTERLIST;
typedef struct _UMPD {
DWORD dwSignature; // data structure signature
struct _UMPD * pNext; // linked list pointer
PDRIVER_INFO_2W pDriverInfo2; // pointer to driver info
HINSTANCE hInst; // instance handle to user-mode printer driver module
DWORD dwFlags; // misc. flags
BOOL bArtificialIncrement; // indicates if the ref cnt has been bumped up to
// defer unloading
DWORD dwDriverVersion; // version number of the loaded driver
INT iRefCount; // reference count
struct ProxyPort * pp; // UMPD proxy server
KERNEL_PVOID umpdCookie; // cookie returned back from proxy
PHPRINTERLIST pHandleList; // list of hPrinter's opened on the proxy server
PFN apfn[INDEX_LAST]; // driver function table
} UMPD, *PUMPD;
typedef struct _UMDHPDEV {
PUMPD pUMPD;
DHPDEV dhpdev;
// HDC hdc; // the printer DC that's associated with the pdev
// PBYTE pvEMF; // the pointer to the emf if we are playing the emf on the hdc
// PBYTE pvCurrentRecord; // the pointer to the current emf record if we are playing emf
} UMDHPDEV, *PUMDHPDEV;
typedef KERNEL_PVOID KERNEL_PUMDHPDEV;
typedef struct
{
UMTHDR umthdr;
HUMPD humpd;
} UMPDTHDR;
typedef struct
{
UMPDTHDR umpdthdr;
KERNEL_PVOID cookie;
} DRVDRIVERFNINPUT, *PDRVDRIVERFNINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
PWSTR pwszDriver;
} DRVENABLEDRIVERINPUT, *PDRVENABLEDRIVERINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
KERNEL_PVOID umpdCookie;
PDEVMODEW pdm;
PWSTR pLogAddress;
ULONG cPatterns;
HSURF *phsurfPatterns;
ULONG cjCaps;
ULONG *pdevcaps;
ULONG cjDevInfo;
DEVINFO *pDevInfo;
HDEV hdev;
PWSTR pDeviceName;
HANDLE hPrinter;
BOOL bWOW64;
DWORD clientPid;
#if defined(_WIN64)
ULONG cxHTPat;
ULONG cyHTPat;
LPBYTE pHTPatA, pHTPatB, pHTPatC;
BOOL bHTPatA, bHTPatB, bHTPatC;
#endif
} DRVENABLEPDEVINPUT, *PDRVENABLEPDEVINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
HDEV hdev;
} DRVCOMPLETEPDEVINPUT, *PDRVCOMPLETEPDEVINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdevOld;
DHPDEV dhpdevNew;
} DRVRESETPDEVINPUT, *PDRVRESETPDEVINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
} DHPDEVINPUT, *PDHPDEVINPUT;
//
// Note: can't pass kernel pointers over to client side.
//
typedef struct _DRVESCAPEINPUT
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
ULONG iEsc;
ULONG cjIn;
PVOID pvIn;
ULONG cjOut;
PVOID pvOut;
} DRVESCAPEINPUT, *PDRVESCAPEINPUT;
typedef struct _DRVDRAWESCAPEINPUT
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
ULONG iEsc;
CLIPOBJ *pco;
RECTL *prcl;
ULONG cjIn;
PVOID pvIn;
} DRVDRAWESCAPEINPUT, *PDRVDRAWESCAPEINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
CLIPOBJ *pco;
BRUSHOBJ *pbo;
POINTL *pptlBrushOrg;
POINTL ptlBrushOrg;
MIX mix;
} DRVPAINTINPUT, *PDRVPAINTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
CLIPOBJ *pco;
BRUSHOBJ *pbo;
LONG x1;
LONG y1;
LONG x2;
LONG y2;
RECTL *prclBounds;
MIX mix;
} DRVLINETOINPUT, *PDRVLINETOINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *psoTrg;
SURFOBJ *psoSrc;
SURFOBJ *psoMask;
CLIPOBJ *pco;
XLATEOBJ *pxlo;
RECTL *prclTrg;
POINTL *pptlSrc;
POINTL *pptlMask;
BRUSHOBJ *pbo;
POINTL *pptlBrush;
ROP4 rop4;
} DRVBITBLTINPUT, *PDRVBITBLTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *psoTrg;
SURFOBJ *psoSrc;
CLIPOBJ *pco;
XLATEOBJ *pxlo;
RECTL *prclTrg;
POINTL *pptlSrc;
} DRVCOPYBITSINPUT, *PDRVCOPYBITSINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *psoTrg;
SURFOBJ *psoSrc;
SURFOBJ *psoMask;
CLIPOBJ *pco;
XLATEOBJ *pxlo;
COLORADJUSTMENT *pca;
POINTL *pptlHTOrg;
RECTL *prclTrg;
RECTL *prclSrc;
POINTL *pptlMask;
ULONG iMode;
BRUSHOBJ *pbo;
ROP4 rop4;
} DRVSTRETCHBLTINPUT, *PDRVSTRETCHBLTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *psoTrg;
SURFOBJ *psoSrc;
SURFOBJ *psoMask;
CLIPOBJ *pco;
XLATEOBJ *pxlo;
COLORADJUSTMENT *pca;
POINTL *pptlBrushOrg;
POINTFIX *pptfx;
RECTL *prcl;
POINTL *pptl;
ULONG iMode;
} DRVPLGBLTINPUT, *PDRVPLGBLTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *psoTrg;
SURFOBJ *psoSrc;
CLIPOBJ *pco;
XLATEOBJ *pxlo;
RECTL *prclDest;
RECTL *prclSrc;
BLENDOBJ *pBlendObj;
} ALPHAINPUT, *PALPHAINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *psoTrg;
SURFOBJ *psoSrc;
CLIPOBJ *pco;
XLATEOBJ *pxlo;
RECTL *prclDst;
RECTL *prclSrc;
ULONG TransColor;
UINT ulReserved;
} TRANSPARENTINPUT, *PTRANSPARENTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *psoTrg;
CLIPOBJ *pco;
XLATEOBJ *pxlo;
TRIVERTEX *pVertex;
ULONG nVertex;
PVOID pMesh;
ULONG nMesh;
RECTL *prclExtents;
POINTL *pptlDitherOrg;
ULONG ulMode;
} GRADIENTINPUT, *PGRADIENTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
PWSTR pwszDocName;
DWORD dwJobId;
} DRVSTARTDOCINPUT, *PDRVSTARTDOCINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
FLONG fl;
} DRVENDDOCINPUT, *PDRVENDDOCINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
} SURFOBJINPUT, *PSURFOBJINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
POINTL *pptl;
} DRVBANDINGINPUT, *PDRVBANDINGINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
PERBANDINFO *pbi;
} DRVPERBANDINPUT, *PDRVPERBANDINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *psoTrg;
SURFOBJ *psoPat;
SURFOBJ *psoMsk;
BRUSHOBJ *pbo;
XLATEOBJ *pxlo;
ULONG iHatch;
} DRVREALIZEBRUSHINPUT, *PDRVREALIZEBRUSHINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
PATHOBJ *ppo;
CLIPOBJ *pco;
XFORMOBJ *pxo;
BRUSHOBJ *pbo;
POINTL *pptlBrushOrg;
LINEATTRS *plineattrs;
BRUSHOBJ *pboFill;
MIX mix;
FLONG flOptions;
} STORKEANDFILLINPUT, *PSTROKEANDFILLINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
STROBJ *pstro;
FONTOBJ *pfo;
CLIPOBJ *pco;
RECTL *prclExtra;
RECTL *prclOpaque;
BRUSHOBJ *pboFore;
BRUSHOBJ *pboOpaque;
POINTL *pptlOrg;
MIX mix;
} TEXTOUTINPUT, *PTEXTOUTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
ULONG_PTR iFile;
ULONG iFace;
ULONG iMode;
ULONG *pid;
ULONG cjMaxData;
PVOID pv;
} QUERYFONTINPUT, *PQUERYFONTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
FONTOBJ *pfo;
ULONG iMode;
HGLYPH hg;
GLYPHDATA *pgd;
PVOID pv;
ULONG cjSize;
} QUERYFONTDATAINPUT, *PQUERYFONTDATAINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
FONTOBJ *pfo;
ULONG iMode;
HGLYPH *phg;
PVOID pvWidths;
ULONG cGlyphs;
} QUERYADVWIDTHSINPUT, *PQUERYADVWIDTHSINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
FONTOBJ *pfo;
} GETGLYPHMODEINPUT, *PGETGLYPHMODEINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
DHPDEV dhpdev;
FONTOBJ *pfo;
ULONG iMode;
ULONG cjIn;
PVOID pvIn;
ULONG cjOut;
PVOID pvOut;
} FONTMANAGEMENTINPUT, *PFONTMANAGEMENTINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
ULONG iMode;
ULONG rgb;
ULONG *pul;
} DRVDITHERCOLORINPUT, *PDRVDITHERCOLORINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
PVOID pv;
ULONG id;
} DRVFREEINPUT, *PDRVFREEINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
DHSURF dhsurf;
} DRVDELETEDEVBITMAP, *PDRVDELETEDEVBITMAP;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
HANDLE hcmXform;
} DRVICMDELETECOLOR, *PDRVICMDELETECOLOR;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
LPLOGCOLORSPACEW pLogColorSpace;
PVOID pvSourceProfile;
ULONG cjSourceProfile;
PVOID pvDestProfile;
ULONG cjDestProfile;
PVOID pvTargetProfile;
ULONG cjTargetProfile;
DWORD dwReserved;
} DRVICMCREATECOLORINPUT, *PDRVICMCREATECOLORINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
DHPDEV dhpdev;
HANDLE hColorTransform;
SURFOBJ *pso;
PBYTE paResults;
} DRVICMCHECKBITMAPINPUT, *PDRVICMCHECKBITMAPINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
SURFOBJ *pso;
XLATEOBJ *pxlo;
XFORMOBJ *pxo;
ULONG iType;
ULONG cjIn;
PVOID pvIn;
ULONG cjOut;
PVOID pvOut;
} DRVQUERYDEVICEINPUT, *PDRVQUERYDEVICEINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
ULONG cjSize;
} UMPDALLOCUSERMEMINPUT, *PUMPDALLOCUSERMEMINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
KERNEL_PVOID pvSrc;
KERNEL_PVOID pvDest;
ULONG cjSize;
} UMPDCOPYMEMINPUT, *PUMPDCOPYMEMINPUT;
typedef struct
{
UMPDTHDR umpdthdr;
KERNEL_PVOID pvTrg;
KERNEL_PVOID pvSrc;
KERNEL_PVOID pvMsk;
} UMPDFREEMEMINPUT, *PUMPDFREEMEMINPUT;
#endif // __UMPD__