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