windows-nt/Source/XPSP1/NT/public/oak/inc/printoem.h
2020-09-26 16:20:57 +08:00

1713 lines
37 KiB
C

/*++
Copyright (c) 1996-1997 Microsoft Corporation
Module Name:
printoem.h
Abstract:
Declarations for Windows NT printer driver OEM plugins
--*/
#ifndef _PRINTOEM_
#define _PRINTOEM_
#ifdef __cplusplus
extern "C" {
#endif
//
// Current OEM plugin interface version number
//
#define PRINTER_OEMINTF_VERSION 0x00010000
#define OEM_MODE_PUBLISHER 0x00000001
typedef struct _PUBLISHERINFO {
DWORD dwMode; // flags for publisher
WORD wMinoutlinePPEM; // min size to download as Type1
WORD wMaxbitmapPPEM; // max size to download as Type3
} PUBLISHERINFO, *PPUBLISHERINFO;
#define OEMGI_GETSIGNATURE 1
#define OEMGI_GETINTERFACEVERSION 2
#define OEMGI_GETVERSION 3
#define OEMGI_GETPUBLISHERINFO 4
//
// OEMGetInfo
//
BOOL APIENTRY
OEMGetInfo(
IN DWORD dwMode,
OUT PVOID pBuffer,
IN DWORD cbSize,
OUT PDWORD pcbNeeded
);
BOOL APIENTRY
OEMDriverDMS(
PVOID pDevObj,
PVOID pBuffer,
DWORD cbSize,
PDWORD pcbNeeded
);
//
// OEMDevMode
//
#define OEMDM_SIZE 1
#define OEMDM_DEFAULT 2
#define OEMDM_CONVERT 3
#define OEMDM_MERGE 4
typedef struct _OEMDMPARAM {
DWORD cbSize; // size of OEM_DEVMODEPARAM
PVOID pdriverobj; // reference to driver data structure
HANDLE hPrinter; // PRINTER handle
HANDLE hModule; // OEM module handle
PDEVMODE pPublicDMIn; // public devmode in
PDEVMODE pPublicDMOut; // public devmode out
PVOID pOEMDMIn; // OEM private devmode in
PVOID pOEMDMOut; // OEM private devmode out
DWORD cbBufSize; // output size of pOEMDMOut buffer
} OEMDMPARAM, *POEMDMPARAM;
typedef struct _OEM_DMEXTRAHEADER {
DWORD dwSize; // size of OEM extra data
DWORD dwSignature; // Unique OEM signature
DWORD dwVersion; // OEM DLL version number
} OEM_DMEXTRAHEADER, *POEM_DMEXTRAHEADER;
//
// USERDATA for OPTITEM.UserData
//
typedef struct _USERDATA {
DWORD dwSize; // Size of this structure
ULONG_PTR dwItemID; // XXX_ITEM or pointer to FEATURE
PSTR pKeyWordName; // Keyword name
DWORD dwReserved[8];
} USERDATA, *PUSERDATA;
BOOL APIENTRY
OEMDevMode(
DWORD dwMode,
POEMDMPARAM pOemDMParam
);
//
// Callback function provided by the driver to
// allow OEM plugins access/set/update to driver private settings
//
typedef BOOL (APIENTRY *PFN_DrvGetDriverSetting)(
PVOID pdriverobj,
PCSTR Feature,
PVOID pOutput,
DWORD cbSize,
PDWORD pcbNeeded,
PDWORD pdwOptionsReturned
);
//
// Callback function provided by the driver to
// allow OEM plugins upgrade private registry settings.
//
typedef BOOL (APIENTRY *PFN_DrvUpgradeRegistrySetting)(
HANDLE hPrinter,
PCSTR pFeature,
PCSTR pOption
);
//
// Callback function provided by the driver UI to
// allow OEM plugins to update the driver UI settings and
// shows constraint. This function is called only when the UI is present.
//
typedef BOOL (APIENTRY *PFN_DrvUpdateUISetting)(
PVOID pdriverobj,
PVOID pOptItem,
DWORD dwPreviousSelection,
DWORD dwMode
);
// Predefined feature indices used for accessing driver private settings
#define OEMGDS_MIN_DOCSTICKY 1
#define OEMGDS_PSDM_FLAGS 1 // DWORD - misc. flag bits
#define OEMGDS_PSDM_DIALECT 2 // INT - PS output option
#define OEMGDS_PSDM_TTDLFMT 3 // INT - TrueType font downloading option
#define OEMGDS_PSDM_NUP 4 // INT - N-up option
#define OEMGDS_PSDM_PSLEVEL 5 // INT - target language level
#define OEMGDS_PSDM_CUSTOMSIZE 6 // 5*DWORD - custom page size parameters
#define OEMGDS_UNIDM_GPDVER 0x4000 // WORD - GPD Version
#define OEMGDS_UNIDM_FLAGS 0x4001 // DWORD - misc flag bits
// Indices for private devmode fields - start at 0x4000
#define OEMGDS_MIN_PRINTERSTICKY 0x8000
#define OEMGDS_PRINTFLAGS 0x8000 // DWORD - misc. flag bits
#define OEMGDS_FREEMEM 0x8001 // DWORD - amount of VM, ps only
#define OEMGDS_JOBTIMEOUT 0x8002 // DWORD - job timeout, ps only
#define OEMGDS_WAITTIMEOUT 0x8003 // DWORD - wait timeout, ps only
#define OEMGDS_PROTOCOL 0x8004 // WORD - output protocol, ps only
#define OEMGDS_MINOUTLINE 0x8005 // WORD - min outline font size, ps only
#define OEMGDS_MAXBITMAP 0x8006 // WORD - max bitmap font size, ps only
#define OEMGDS_MAX 0x10000
// dwType flags for use with STDMETHOD (DrvGetGPDData)
#define GPD_OEMCUSTOMDATA 1
/*******************************************************************************
*
* Definitions used by kernel-mode rendering module only:
* Make sure the macro KERNEL_MODE is defined and
* the header file winddi.h is included before this file.
*/
#ifdef KERNEL_MODE
//
// OEMEnableDriver
//
BOOL APIENTRY
OEMEnableDriver(
DWORD dwOemIntfVersion,
DWORD cbSize,
PDRVENABLEDATA pded
);
typedef struct _DEVOBJ *PDEVOBJ;
typedef PVOID PDEVOEM;
typedef DWORD (APIENTRY *PFN_DrvWriteSpoolBuf)(
PDEVOBJ pdevobj,
PVOID pBuffer,
DWORD cbSize
);
typedef DWORD (APIENTRY *PFN_DrvWriteAbortBuf)(
PDEVOBJ pdevobj,
PVOID pBuffer,
DWORD cbSize,
DWORD dwWait
);
typedef INT (APIENTRY *PFN_DrvXMoveTo)(
PDEVOBJ pdevobj,
INT x,
DWORD dwFlags
);
typedef INT (APIENTRY *PFN_DrvYMoveTo)(
PDEVOBJ pdevobj,
INT y,
DWORD dwFlags
);
typedef BOOL (APIENTRY *PFN_DrvGetStandardVariable)(
PDEVOBJ pdevobj,
DWORD dwIndex,
PVOID pBuffer,
DWORD cbSize,
PDWORD pcbNeeded
);
typedef enum _STDVARIABLEINDEX{
SVI_NUMDATABYTES, // "NumOfDataBytes"
SVI_WIDTHINBYTES, // "RasterDataWidthInBytes"
SVI_HEIGHTINPIXELS, // "RasterDataHeightInPixels"
SVI_COPIES, // "NumOfCopies"
SVI_PRINTDIRECTION, // "PrintDirInCCDegrees"
SVI_DESTX, // "DestX"
SVI_DESTY, // "DestY"
SVI_DESTXREL, // "DestXRel"
SVI_DESTYREL, // "DestYRel"
SVI_LINEFEEDSPACING, // "LinefeedSpacing"
SVI_RECTXSIZE, // "RectXSize"
SVI_RECTYSIZE, // "RectYSize"
SVI_GRAYPERCENT, // "GrayPercentage"
SVI_NEXTFONTID, // "NextFontID"
SVI_NEXTGLYPH, // "NextGlyph"
SVI_PHYSPAPERLENGTH, // "PhysPaperLength"
SVI_PHYSPAPERWIDTH, // "PhysPaperWidth"
SVI_FONTHEIGHT, // "FontHeight"
SVI_FONTWIDTH, // "FontWidth"
SVI_FONTMAXWIDTH, // "FontMaxWidth"
SVI_FONTBOLD, // "FontBold"
SVI_FONTITALIC, // "FontItalic"
SVI_FONTUNDERLINE, // "FontUnderline"
SVI_FONTSTRIKETHRU, // "FontStrikeThru"
SVI_CURRENTFONTID, // "CurrentFontID"
SVI_TEXTYRES, // "TextYRes"
SVI_TEXTXRES, // "TextXRes"
// #ifdef BETA2
SVI_GRAPHICSYRES, // "GraphicsYRes"
SVI_GRAPHICSXRES, // "GraphicsXRes"
// #endif
SVI_ROP3, // "Rop3"
SVI_REDVALUE, // "RedValue"
SVI_GREENVALUE, // "GreenValue"
SVI_BLUEVALUE, // "BlueValue"
SVI_PALETTEINDEXTOPROGRAM, // "PaletteIndexToProgram"
SVI_CURRENTPALETTEINDEX, // "CurrentPaletteIndex"
SVI_PATTERNBRUSH_TYPE, // "PatternBrushType"
SVI_PATTERNBRUSH_ID, // "PatternBrushID"
SVI_PATTERNBRUSH_SIZE, // "PatternBrushSize"
SVI_CURSORORIGINX, // "CursorOriginX"
SVI_CURSORORIGINY, // "CursorOriginY"
// this is in MasterUnits and in the coordinates of the currently selected orientation.
// this value is defined as ImageableOrigin - CursorOrigin
SVI_PAGENUMBER, // "PageNumber"
// this value tracks number of times DrvStartBand has been called since
// StartDoc.
SVI_MAX // Just a placeholder do not use.
}STDVARIABLEINDEX;
typedef BOOL (APIENTRY *PFN_DrvUnidriverTextOut)(
SURFOBJ *pso,
STROBJ *pstro,
FONTOBJ *pfo,
CLIPOBJ *pco,
RECTL *prclExtra,
RECTL *prclOpaque,
BRUSHOBJ *pboFore,
BRUSHOBJ *pboOpaque,
POINTL *pptlBrushOrg,
MIX mix
);
//
// bit fields defined for dwFlags
//
// Note: The following Bit values are reserved for an internal use!
// 0x4000
// 0x8000
//
//
#define MV_UPDATE 0x0001
#define MV_RELATIVE 0x0002
#define MV_GRAPHICS 0x0004
#define MV_PHYSICAL 0x0008
#define MV_SENDXMOVECMD 0x0010
#define MV_SENDYMOVECMD 0x0020
typedef struct _DRVPROCS {
PFN_DrvWriteSpoolBuf DrvWriteSpoolBuf; // common to both pscript and unidrv
PFN_DrvXMoveTo DrvXMoveTo; // unidrv specific
PFN_DrvYMoveTo DrvYMoveTo; // unidrv specific
PFN_DrvGetDriverSetting DrvGetDriverSetting;// common to both pscript and unidrv
PFN_DrvGetStandardVariable BGetStandardVariable; // unidrv specific
PFN_DrvUnidriverTextOut DrvUnidriverTextOut; // unidrv specific
PFN_DrvWriteAbortBuf DrvWriteAbortBuf; // unidrv specific
} DRVPROCS, *PDRVPROCS;
typedef struct _DEVOBJ {
DWORD dwSize; // size of DEVOBJ structure
PDEVOEM pdevOEM; // pointer to OEM's device data
HANDLE hEngine; // GDI handle for current printer
HANDLE hPrinter; // spooler handle for current printer
HANDLE hOEM; // handle to OEM dll
PDEVMODE pPublicDM; // public devmode
PVOID pOEMDM; // OEM private devmode
PDRVPROCS pDrvProcs; // pointer to kernel mode helper function table
} DEVOBJ;
//
// OEMDisableDriver
//
VOID APIENTRY
OEMDisableDriver(
VOID
);
//
// OEMEnablePDEV
//
PDEVOEM APIENTRY
OEMEnablePDEV(
PDEVOBJ pdevobj,
PWSTR pPrinterName,
ULONG cPatterns,
HSURF *phsurfPatterns,
ULONG cjGdiInfo,
GDIINFO *pGdiInfo,
ULONG cjDevInfo,
DEVINFO *pDevInfo,
DRVENABLEDATA *pded
);
//
// OEMDisablePDEV
//
VOID APIENTRY
OEMDisablePDEV(
PDEVOBJ pdevobj
);
//
// OEMResetPDEV
//
BOOL APIENTRY
OEMResetPDEV(
PDEVOBJ pdevobjOld,
PDEVOBJ pdevobjNew
);
//
// OEMCommand - PSCRIPT only
//
DWORD APIENTRY
OEMCommand(
PDEVOBJ pdevobj,
DWORD dwIndex,
PVOID pData,
DWORD cbSize
);
INT APIENTRY
OEMCommandCallback(
PDEVOBJ pdevobj,
DWORD dwCallbackID,
DWORD dwCount,
PDWORD pdwParams
);
//
// OEMImageProcessing - UNIDRV only
//
typedef struct {
DWORD dwSize;
POINT ptOffset;
PSTR pHalftoneOption;
BOOL bBanding;
BOOL bBlankBand;
} IPPARAMS, *PIPPARAMS;
PBYTE APIENTRY
OEMImageProcessing(
PDEVOBJ pdevobj,
PBYTE pSrcBitmap,
PBITMAPINFOHEADER pBitmapInfoHeader,
PBYTE pColorTable,
DWORD dwCallbackID,
PIPPARAMS pIPParams
);
//
// OEMFilterGraphics - UNIDRV only
//
BOOL APIENTRY
OEMFilterGraphics(
PDEVOBJ pdevobj,
PBYTE pBuf,
DWORD dwLen
);
//
// OEMCompression - UNIDRV only
//
INT APIENTRY
OEMCompression(
PDEVOBJ pdevobj,
PBYTE pInBuf,
PBYTE pOutBuf,
DWORD dwInLen,
DWORD dwOutLen
);
//
// OEMHalftone - UNIDRV only
//
BOOL APIENTRY
OEMHalftonePattern(
PDEVOBJ pdevobj,
PBYTE pHTPattern,
DWORD dwHTPatternX,
DWORD dwHTPatternY,
DWORD dwHTNumPatterns,
DWORD dwCallbackID,
PBYTE pResource,
DWORD dwResourceSize
);
//
// OEMMemoryUsage - UNIDRV only
//
typedef struct {
DWORD dwFixedMemoryUsage;
DWORD dwPercentMemoryUsage;
DWORD dwMaxBandSize;
} OEMMEMORYUSAGE, *POEMMEMORYUSAGE;
VOID APIENTRY
OEMMemoryUsage(
PDEVOBJ pdevobj,
POEMMEMORYUSAGE pMemoryUsage
);
//
// OEMTTYGetInfo - UNIDRV only
//
INT APIENTRY
OEMTTYGetInfo(
PDEVOBJ pdevobj,
DWORD dwInfoIndex,
PVOID pOutputBuf,
DWORD dwSize,
DWORD *pcbcNeeded
);
#define OEMTTY_INFO_MARGINS 1
#define OEMTTY_INFO_CODEPAGE 2
#define OEMTTY_INFO_NUM_UFMS 3
#define OEMTTY_INFO_UFM_IDS 4
//
// UNIDRV font callback
//
typedef BOOL (*PFNGETINFO)(struct _UNIFONTOBJ*, DWORD, PVOID, DWORD, PDWORD);
typedef struct _UNIFONTOBJ {
ULONG ulFontID;
DWORD dwFlags; // General flags
IFIMETRICS *pIFIMetrics; // Pointer to IFIMETRICS
PFNGETINFO pfnGetInfo; // Pointer to UNIFONTOBJ_GetInfo callback
} UNIFONTOBJ, *PUNIFONTOBJ;
//
// UNIFONTOBJ.dwFlags
//
#define UFOFLAG_TTFONT 0x00000001
#define UFOFLAG_TTDOWNLOAD_BITMAP 0x00000002
#define UFOFLAG_TTDOWNLOAD_TTOUTLINE 0x00000004
#define UFOFLAG_TTOUTLINE_BOLD_SIM 0x00000008
#define UFOFLAG_TTOUTLINE_ITALIC_SIM 0x00000010
#define UFOFLAG_TTOUTLINE_VERTICAL 0x00000020
#define UFOFLAG_TTSUBSTITUTED 0x00000040
//
// UNIFONTOBJ callback ID
//
#define UFO_GETINFO_FONTOBJ 1
#define UFO_GETINFO_GLYPHSTRING 2
#define UFO_GETINFO_GLYPHBITMAP 3
#define UFO_GETINFO_GLYPHWIDTH 4
#define UFO_GETINFO_MEMORY 5
#define UFO_GETINFO_STDVARIABLE 6
//
// UFO_GETINFO_FONTOBJ callback structure
//
typedef struct _GETINFO_FONTOBJ {
DWORD dwSize; // Size of this structure
FONTOBJ *pFontObj; // Pointer to the FONTOBJ
} GETINFO_FONTOBJ, *PGETINFO_FONTOBJ;
//
// UFO_GETINFO_FONTOBJ callback structure
//
typedef struct _GETINFO_GLYPHSTRING {
DWORD dwSize; // Size of this structure
DWORD dwCount; // Count of glyphs in pGlyphIn
DWORD dwTypeIn; // Glyph type of pGlyphIn, TYPE_GLYPHID/TYPE_HANDLE.
PVOID pGlyphIn; // Pointer to the input glyph string
DWORD dwTypeOut; // Glyph type of pGlyphOut, TYPE_UNICODE/TYPE_TRANSDATA.
PVOID pGlyphOut; // Pointer to the output glyph string
DWORD dwGlyphOutSize; // The size of pGlyphOut buffer
} GETINFO_GLYPHSTRING, *PGETINFO_GLYPHSTRING;
//
// UFO_GETINFO_GLYPHBITMAP
//
typedef struct _GETINFO_GLYPHBITMAP {
DWORD dwSize; // Size of this structure
HGLYPH hGlyph; // Glyph hangle passed in OEMDownloadCharGlyph
GLYPHDATA *pGlyphData; // Pointer to the GLYPHDATA data structure
} GETINFO_GLYPHBITMAP, *PGETINFO_GLYPHBITMAP;
//
// UFO_GETINFO_GLYPHWIDTH
//
typedef struct _GETINFO_GLYPHWIDTH {
DWORD dwSize; // Size of this structure
DWORD dwType; // Type of glyph stirng in pGlyph, TYPE_GLYPHHANDLE/GLYPHID.
DWORD dwCount; // Count of glyph in pGlyph
PVOID pGlyph; // Pointer to a glyph string
PLONG plWidth; // Pointer to the buffer of width table.
// Minidriver has to prepare this.
} GETINFO_GLYPHWIDTH, *PGETINFO_GLYPHWIDTH;
//
// UFO_GETINFO_MEMORY
//
typedef struct _GETINFO_MEMORY {
DWORD dwSize;
DWORD dwRemainingMemory;
} GETINFO_MEMORY, PGETINFO_MEMROY;
//
// UFO_GETINFO_STDVARIABLE
//
// OEM DLL has to prepare all StdVar buffer and set ID in dwStdVarID.
//
typedef struct _GETINFO_STDVAR {
DWORD dwSize;
DWORD dwNumOfVariable;
struct {
DWORD dwStdVarID;
LONG lStdVariable;
} StdVar[1];
} GETINFO_STDVAR, *PGETINFO_STDVAR;
#define FNT_INFO_PRINTDIRINCCDEGREES 0 // PrintDirInCCDegrees
#define FNT_INFO_GRAYPERCENTAGE 1 // GrayPercentage
#define FNT_INFO_NEXTFONTID 2 // NextfontID
#define FNT_INFO_NEXTGLYPH 3 // NextGlyph
#define FNT_INFO_FONTHEIGHT 4 // FontHeight
#define FNT_INFO_FONTWIDTH 5 // FontWidth
#define FNT_INFO_FONTBOLD 6 // FontBold
#define FNT_INFO_FONTITALIC 7 // FontItalic
#define FNT_INFO_FONTUNDERLINE 8 // FontUnderline
#define FNT_INFO_FONTSTRIKETHRU 9 // FontStrikeThru
#define FNT_INFO_CURRENTFONTID 10 // Current
#define FNT_INFO_TEXTYRES 11 // TextYRes
#define FNT_INFO_TEXTXRES 12 // TextXRes
#define FNT_INFO_FONTMAXWIDTH 13 // FontMaxWidth
#define FNT_INFO_MAX 14
//
// OEMDownloadFontheader - UNIDRV only
//
DWORD APIENTRY
OEMDownloadFontHeader(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj
);
//
// OEMDownloadCharGlyph - UNIDRV only
//
DWORD APIENTRY
OEMDownloadCharGlyph(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj,
HGLYPH hGlyph,
PDWORD pdwWidth
);
//
// OEMTTDownloadMethod - UNIDRV only
//
DWORD APIENTRY
OEMTTDownloadMethod(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj
);
#define TTDOWNLOAD_DONTCARE 0
#define TTDOWNLOAD_GRAPHICS 1
#define TTDOWNLOAD_BITMAP 2
#define TTDOWNLOAD_TTOUTLINE 3
//
// OEMOutputCharStr - UNIDRV only
//
VOID APIENTRY
OEMOutputCharStr(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj,
DWORD dwType,
DWORD dwCount,
PVOID pGlyph
);
#define TYPE_UNICODE 1
#define TYPE_TRANSDATA 2
#define TYPE_GLYPHHANDLE 3
#define TYPE_GLYPHID 4
//
// OEMSendFontCmd - UNIDRV only
//
typedef struct _FINVOCATION {
DWORD dwCount; // Size of command
PBYTE pubCommand; // Pointer to font selection command
} FINVOCATION, *PFINVOCATION;
VOID APIENTRY
OEMSendFontCmd(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj,
PFINVOCATION pFInv
);
//
// OEMTextOutAsBitmap - UNIDRV only
//
BOOL APIENTRY
OEMTextOutAsBitmap(
SURFOBJ *pso,
STROBJ *pstro,
FONTOBJ *pfo,
CLIPOBJ *pco,
RECTL *prclExtra,
RECTL *prclOpaque,
BRUSHOBJ *pboFore,
BRUSHOBJ *pboOpaque,
POINTL *pptlOrg,
MIX mix
);
//
// OEMBitBlt
//
BOOL APIENTRY
OEMBitBlt(
SURFOBJ *psoTrg,
SURFOBJ *psoSrc,
SURFOBJ *psoMask,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclTrg,
POINTL *pptlSrc,
POINTL *pptlMask,
BRUSHOBJ *pbo,
POINTL *pptlBrush,
ROP4 rop4
);
//
// OEMStretchBlt
//
BOOL APIENTRY
OEMStretchBlt(
SURFOBJ *psoDest,
SURFOBJ *psoSrc,
SURFOBJ *psoMask,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
COLORADJUSTMENT *pca,
POINTL *pptlHTOrg,
RECTL *prclDest,
RECTL *prclSrc,
POINTL *pptlMask,
ULONG iMode
);
//
// OEMCopyBits
//
BOOL APIENTRY
OEMCopyBits(
SURFOBJ *psoDest,
SURFOBJ *psoSrc,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclDest,
POINTL *pptlSrc
);
//
// OEMTextOut
//
BOOL APIENTRY
OEMTextOut(
SURFOBJ *pso,
STROBJ *pstro,
FONTOBJ *pfo,
CLIPOBJ *pco,
RECTL *prclExtra,
RECTL *prclOpaque,
BRUSHOBJ *pboFore,
BRUSHOBJ *pboOpaque,
POINTL *pptlOrg,
MIX mix
);
//
// OEMStrokePath
//
BOOL APIENTRY
OEMStrokePath(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
XFORMOBJ *pxo,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
LINEATTRS *plineattrs,
MIX mix
);
//
// OEMFillPath
//
BOOL APIENTRY
OEMFillPath(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
MIX mix,
FLONG flOptions
);
//
// OEMStrokeAndFillPath
//
BOOL APIENTRY
OEMStrokeAndFillPath(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
XFORMOBJ *pxo,
BRUSHOBJ *pboStroke,
LINEATTRS *plineattrs,
BRUSHOBJ *pboFill,
POINTL *pptlBrushOrg,
MIX mixFill,
FLONG flOptions
);
//
// OEMRealizeBrush
//
BOOL APIENTRY
OEMRealizeBrush(
BRUSHOBJ *pbo,
SURFOBJ *psoTarget,
SURFOBJ *psoPattern,
SURFOBJ *psoMask,
XLATEOBJ *pxlo,
ULONG iHatch
);
//
// OEMStartPage
//
BOOL APIENTRY
OEMStartPage(
SURFOBJ *pso
);
//
// OEMSendPage
//
BOOL APIENTRY
OEMSendPage(
SURFOBJ *pso
);
//
// OEMEscape
//
ULONG APIENTRY
OEMEscape(
SURFOBJ *pso,
ULONG iEsc,
ULONG cjIn,
PVOID pvIn,
ULONG cjOut,
PVOID pvOut
);
//
// OEMStartDoc
//
BOOL APIENTRY
OEMStartDoc(
SURFOBJ *pso,
PWSTR pwszDocName,
DWORD dwJobId
);
//
// OEMEndDoc
//
BOOL APIENTRY
OEMEndDoc(
SURFOBJ *pso,
FLONG fl
);
//
// OEMQueryFont
//
PIFIMETRICS APIENTRY
OEMQueryFont(
DHPDEV dhpdev,
ULONG_PTR iFile,
ULONG iFace,
ULONG_PTR *pid
);
//
// OEMQueryFontTree
//
PVOID APIENTRY
OEMQueryFontTree(
DHPDEV dhpdev,
ULONG_PTR iFile,
ULONG iFace,
ULONG iMode,
ULONG_PTR *pid
);
//
// OEMQueryFontData
//
LONG APIENTRY
OEMQueryFontData(
DHPDEV dhpdev,
FONTOBJ *pfo,
ULONG iMode,
HGLYPH hg,
GLYPHDATA *pgd,
PVOID pv,
ULONG cjSize
);
//
// OEMQueryAdvanceWidths
//
BOOL APIENTRY
OEMQueryAdvanceWidths(
DHPDEV dhpdev,
FONTOBJ *pfo,
ULONG iMode,
HGLYPH *phg,
PVOID pvWidths,
ULONG cGlyphs
);
//
// OEMFontManagement
//
ULONG APIENTRY
OEMFontManagement(
SURFOBJ *pso,
FONTOBJ *pfo,
ULONG iMode,
ULONG cjIn,
PVOID pvIn,
ULONG cjOut,
PVOID pvOut
);
//
// OEMGetGlyphMode
//
ULONG APIENTRY
OEMGetGlyphMode(
DHPDEV dhpdev,
FONTOBJ *pfo
);
BOOL APIENTRY
OEMNextBand(
SURFOBJ *pso,
POINTL *pptl
);
BOOL APIENTRY
OEMStartBanding(
SURFOBJ *pso,
POINTL *pptl
);
ULONG APIENTRY
OEMDitherColor(
DHPDEV dhpdev,
ULONG iMode,
ULONG rgbColor,
ULONG *pulDither
);
BOOL APIENTRY
OEMPaint(
SURFOBJ *pso,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
MIX mix
);
BOOL APIENTRY
OEMLineTo(
SURFOBJ *pso,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
LONG x1,
LONG y1,
LONG x2,
LONG y2,
RECTL *prclBounds,
MIX mix
);
#ifndef WINNT_40
//
// OEMStretchBltROP
//
BOOL APIENTRY
OEMStretchBltROP(
SURFOBJ *psoDest,
SURFOBJ *psoSrc,
SURFOBJ *psoMask,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
COLORADJUSTMENT *pca,
POINTL *pptlHTOrg,
RECTL *prclDest,
RECTL *prclSrc,
POINTL *pptlMask,
ULONG iMode,
BRUSHOBJ *pbo,
ROP4 rop4
);
//
// OEMPlgBlt
//
BOOL APIENTRY
OEMPlgBlt(
SURFOBJ *psoDst,
SURFOBJ *psoSrc,
SURFOBJ *psoMask,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
COLORADJUSTMENT *pca,
POINTL *pptlBrushOrg,
POINTFIX *pptfixDest,
RECTL *prclSrc,
POINTL *pptlMask,
ULONG iMode
);
//
// OEMAlphaBlend
//
BOOL APIENTRY
OEMAlphaBlend(
SURFOBJ *psoDest,
SURFOBJ *psoSrc,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclDest,
RECTL *prclSrc,
BLENDOBJ *pBlendObj
);
//
// OEMGradientFill
//
BOOL APIENTRY
OEMGradientFill(
SURFOBJ *psoDest,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
TRIVERTEX *pVertex,
ULONG nVertex,
PVOID pMesh,
ULONG nMesh,
RECTL *prclExtents,
POINTL *pptlDitherOrg,
ULONG ulMode
);
//
// OEMIcmCreateTransform
//
HANDLE APIENTRY
OEMIcmCreateColorTransform(
DHPDEV dhpdev,
LPLOGCOLORSPACEW pLogColorSpace,
PVOID pvSourceProfile,
ULONG cjSourceProfile,
PVOID pvDestProfile,
ULONG cjDestProfile,
PVOID pvTargetProfile,
ULONG cjTargetProfile,
DWORD dwReserved
);
//
// OEMIcmDeleteTransform
//
BOOL APIENTRY
OEMIcmDeleteColorTransform(
DHPDEV dhpdev,
HANDLE hcmXform
);
//
// OEMQueryDeviceSupport
//
BOOL APIENTRY
OEMQueryDeviceSupport(
SURFOBJ *pso,
XLATEOBJ *pxlo,
XFORMOBJ *pxo,
ULONG iType,
ULONG cjIn,
PVOID pvIn,
ULONG cjOut,
PVOID pvOut
);
//
// OEMTransparentBlt
//
BOOL APIENTRY
OEMTransparentBlt(
SURFOBJ *psoDst,
SURFOBJ *psoSrc,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclDst,
RECTL *prclSrc,
ULONG iTransColor,
ULONG ulReserved
);
#endif // !WINNT_40
//
// Function prototype define's for the driver hooks.
//
// NOTE: These are only needed for NT4. For NT5, they are defined in winddi.h.
//
#ifdef WINNT_40
typedef BOOL (APIENTRY *LPFNDLLINITIALIZE)(
ULONG ulReason
);
typedef BOOL (APIENTRY *PFN_DrvBitBlt)(
SURFOBJ *psoTrg,
SURFOBJ *psoSrc,
SURFOBJ *psoMask,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclTrg,
POINTL *pptlSrc,
POINTL *pptlMask,
BRUSHOBJ *pbo,
POINTL *pptlBrush,
ROP4 rop4
);
typedef BOOL (APIENTRY *PFN_DrvStretchBlt)(
SURFOBJ *psoDest,
SURFOBJ *psoSrc,
SURFOBJ *psoMask,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
COLORADJUSTMENT *pca,
POINTL *pptlHTOrg,
RECTL *prclDest,
RECTL *prclSrc,
POINTL *pptlMask,
ULONG iMode
);
typedef BOOL (APIENTRY *PFN_DrvCopyBits)(
SURFOBJ *psoDest,
SURFOBJ *psoSrc,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclDest,
POINTL *pptlSrc
);
typedef BOOL (APIENTRY *PFN_DrvTextOut)(
SURFOBJ *pso,
STROBJ *pstro,
FONTOBJ *pfo,
CLIPOBJ *pco,
RECTL *prclExtra,
RECTL *prclOpaque,
BRUSHOBJ *pboFore,
BRUSHOBJ *pboOpaque,
POINTL *pptlOrg,
MIX mix
);
typedef BOOL (APIENTRY *PFN_DrvStrokePath)(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
XFORMOBJ *pxo,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
LINEATTRS *plineattrs,
MIX mix
);
typedef BOOL (APIENTRY *PFN_DrvFillPath)(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
MIX mix,
FLONG flOptions
);
typedef BOOL (APIENTRY *PFN_DrvStrokeAndFillPath)(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
XFORMOBJ *pxo,
BRUSHOBJ *pboStroke,
LINEATTRS *plineattrs,
BRUSHOBJ *pboFill,
POINTL *pptlBrushOrg,
MIX mixFill,
FLONG flOptions
);
typedef BOOL (APIENTRY *PFN_DrvRealizeBrush)(
BRUSHOBJ *pbo,
SURFOBJ *psoTarget,
SURFOBJ *psoPattern,
SURFOBJ *psoMask,
XLATEOBJ *pxlo,
ULONG iHatch
);
typedef BOOL (APIENTRY *PFN_DrvStartPage)(
SURFOBJ *pso
);
typedef BOOL (APIENTRY *PFN_DrvSendPage)(
SURFOBJ *pso
);
typedef ULONG (APIENTRY *PFN_DrvEscape)(
SURFOBJ *pso,
ULONG iEsc,
ULONG cjIn,
PVOID pvIn,
ULONG cjOut,
PVOID pvOut
);
typedef BOOL (APIENTRY *PFN_DrvStartDoc)(
SURFOBJ *pso,
PWSTR pwszDocName,
DWORD dwJobId
);
typedef BOOL (APIENTRY *PFN_DrvEndDoc)(
SURFOBJ *pso,
FLONG fl
);
typedef PIFIMETRICS (APIENTRY *PFN_DrvQueryFont)(
DHPDEV dhpdev,
ULONG_PTR iFile,
ULONG iFace,
ULONG_PTR *pid
);
typedef PVOID (APIENTRY *PFN_DrvQueryFontTree)(
DHPDEV dhpdev,
ULONG_PTR iFile,
ULONG iFace,
ULONG iMode,
ULONG_PTR *pid
);
typedef LONG (APIENTRY *PFN_DrvQueryFontData)(
DHPDEV dhpdev,
FONTOBJ *pfo,
ULONG iMode,
HGLYPH hg,
GLYPHDATA *pgd,
PVOID pv,
ULONG cjSize
);
typedef BOOL (APIENTRY *PFN_DrvQueryAdvanceWidths)(
DHPDEV dhpdev,
FONTOBJ *pfo,
ULONG iMode,
HGLYPH *phg,
PVOID pvWidths,
ULONG cGlyphs
);
typedef ULONG (APIENTRY *PFN_DrvFontManagement)(
SURFOBJ *pso,
FONTOBJ *pfo,
ULONG iMode,
ULONG cjIn,
PVOID pvIn,
ULONG cjOut,
PVOID pvOut
);
typedef ULONG (APIENTRY *PFN_DrvGetGlyphMode)(
DHPDEV dhpdev,
FONTOBJ *pfo
);
typedef BOOL (APIENTRY *PFN_DrvNextBand)(
SURFOBJ *pso,
POINTL *pptl
);
typedef BOOL (APIENTRY *PFN_DrvStartBanding)(
SURFOBJ *pso,
POINTL *pptl
);
typedef ULONG (APIENTRY *PFN_DrvDitherColor)(
DHPDEV dhpdev,
ULONG iMode,
ULONG rgbColor,
ULONG *pulDither
);
typedef BOOL (APIENTRY *PFN_DrvPaint)(
SURFOBJ *pso,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
MIX mix
);
typedef BOOL (APIENTRY *PFN_DrvLineTo)(
SURFOBJ *pso,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
LONG x1,
LONG y1,
LONG x2,
LONG y2,
RECTL *prclBounds,
MIX mix
);
#endif // WINNT_40
//
// for the IPrintOemPS2::GetPDEVAdjustment call
//
#define PDEV_ADJUST_PAPER_MARGIN_TYPE 1
typedef struct _PDEV_ADJUST_PAPER_MARGIN {
RECTL rcImageableArea; // contains the imageable area in 0.001 mm units
} PDEV_ADJUST_PAPER_MARGIN;
#define PDEV_HOSTFONT_ENABLED_TYPE 2
typedef struct _PDEV_HOSTFONT_ENABLED {
BOOL bHostfontEnabled;
} PDEV_HOSTFONT_ENABLED;
#define PDEV_USE_TRUE_COLOR_TYPE 3
typedef struct _PDEV_USE_TRUE_COLOR {
BOOL bUseTrueColor;
} PDEV_USE_TRUE_COLOR;
#endif // KERNEL_MODE
/*******************************************************************************
*
* Definitions used by user-mode UI module only:
* Make sure the macro KERNEL_MODE is NOT defined and
* the header file winddiui.h is included before this file.
*
*/
#ifndef KERNEL_MODE
//
// Reports capability of simulated features
//
typedef struct _SIMULATE_CAPS_1 {
DWORD dwLevel;
DWORD dwPageOrderFlags; // Reverse page order
DWORD dwNumberOfCopies; // Max number of copies
DWORD dwCollate; // Collate support
DWORD dwNupOptions; // The (1-base) bit set represents the N-up option available.
// 0x0001 means 1-up
// 0x0002 means 2-up
// 0x0008 means 4-up
// 0x812B means (1,2,4,6,9,16)
} SIMULATE_CAPS_1, *PSIMULATE_CAPS_1;
//
// Reference to driver data structure. This is passed to
// most of the OEM UI DLL entrypoints.
//
typedef struct _OEMUIPROCS {
PFN_DrvGetDriverSetting DrvGetDriverSetting;
PFN_DrvUpdateUISetting DrvUpdateUISetting;
} OEMUIPROCS, *POEMUIPROCS;
typedef struct _OEMUIOBJ {
DWORD cbSize; // size of this structure
POEMUIPROCS pOemUIProcs; // pointer to user mode helper function table
} OEMUIOBJ, *POEMUIOBJ;
//
// OEMCommonUIProp
//
typedef struct _OEMCUIPPARAM *POEMCUIPPARAM;
typedef LONG (APIENTRY *OEMCUIPCALLBACK)(PCPSUICBPARAM, POEMCUIPPARAM);
typedef struct _OEMCUIPPARAM {
DWORD cbSize; // size of this structure
POEMUIOBJ poemuiobj; // reference to driver data structure
HANDLE hPrinter; // handle to the current printer
PWSTR pPrinterName; // name of current printer
HANDLE hModule; // instance handle to OEM DLL
HANDLE hOEMHeap; // handle to the OEM memory heap
PDEVMODE pPublicDM; // public devmode
PVOID pOEMDM; // OEM private devmode
DWORD dwFlags; // misc. flag bits
POPTITEM pDrvOptItems; // pointer to driver items
DWORD cDrvOptItems; // number of driver items
POPTITEM pOEMOptItems; // pointer to OEM items
DWORD cOEMOptItems; // number of OEM items
PVOID pOEMUserData; // pointer to OEM private data
OEMCUIPCALLBACK OEMCUIPCallback; // address of callback function
} OEMCUIPPARAM;
BOOL APIENTRY
OEMCommonUIProp(
DWORD dwMode,
POEMCUIPPARAM pOemCUIPParam
);
//
// OEMCommonUIProp dwMode parameter value
//
#define OEMCUIP_DOCPROP 1
#define OEMCUIP_PRNPROP 2
//
// OEMDocumentPropertySheets
//
LRESULT APIENTRY
OEMDocumentPropertySheets(
PPROPSHEETUI_INFO pPSUIInfo,
LPARAM lParam
);
//
// OEMDevicePropertySheets
//
LRESULT APIENTRY
OEMDevicePropertySheets(
PPROPSHEETUI_INFO pPSUIInfo,
LPARAM lParam
);
//
// pPSUIInfo->lParamInit is a pointer to _OEMUIPSPARAM structure defined below.
//
typedef struct _OEMUIPSPARAM {
DWORD cbSize; // size of this structure
POEMUIOBJ poemuiobj; // reference to driver data structure
HANDLE hPrinter; // handle to the current printer
PWSTR pPrinterName; // name of current printer
HANDLE hModule; // instance handle to OEM DLL
HANDLE hOEMHeap; // handle to the OEM memory heap
PDEVMODE pPublicDM; // public devmode
PVOID pOEMDM; // OEM private devmode
PVOID pOEMUserData; // pointer to OEM private data
DWORD dwFlags; // misc. flag bits
PVOID pOemEntry;
} OEMUIPSPARAM, *POEMUIPSPARAM;
//
// OEMDevQueryPrintEx
//
BOOL APIENTRY
OEMDevQueryPrintEx(
POEMUIOBJ poemuiobj,
PDEVQUERYPRINT_INFO pDQPInfo,
PDEVMODE pPublicDM,
PVOID pOEMDM
);
//
// OEMDeviceCapabilities
//
DWORD APIENTRY
OEMDeviceCapabilities(
POEMUIOBJ poemuiobj,
HANDLE hPrinter,
PWSTR pDeviceName,
WORD wCapability,
PVOID pOutput,
PDEVMODE pPublicDM,
PVOID pOEMDM,
DWORD dwLastResult
);
//
// OEMUpgradePrinter
//
BOOL APIENTRY
OEMUpgradePrinter(
DWORD dwLevel,
PBYTE pDriverUpgradeInfo
);
//
// OEMUpgradeRegistry
//
BOOL APIENTRY
OEMUpgradeRegistry(
DWORD dwLevel,
PBYTE pDriverUpgradeInfo,
PFN_DrvUpgradeRegistrySetting pfnUpgrade
);
//
// OEMPrinterEvent
//
BOOL APIENTRY
OEMPrinterEvent(
PWSTR pPrinterName,
INT iDriverEvent,
DWORD dwFlags,
LPARAM lParam
);
//
// OEMDriverEvent
//
BOOL APIENTRY
OEMPDriverEvent(
DWORD dwDriverEvent,
DWORD dwLevel,
LPBYTE pDriverInfo,
LPARAM lParam
);
//
// OEMQueryColorProfile
//
BOOL APIENTRY
OEMQueryColorProfile(
HANDLE hPrinter,
POEMUIOBJ poemuiobj,
PDEVMODE pPublicDM,
PVOID pOEMDM,
ULONG ulQueryMode,
VOID *pvProfileData,
ULONG *pcbProfileData,
FLONG *pflProfileData
);
//
// Font Installer dialog proc
//
INT_PTR CALLBACK
OEMFontInstallerDlgProc(
HWND hWnd,
UINT usMsg,
WPARAM wParam,
LPARAM lParam
);
BOOL CALLBACK
OEMUpdateExternalFonts(
HANDLE hPrinter,
HANDLE hHeap,
PWSTR pwstrCartridges
);
#endif // !KERNEL_MODE
//
// Datatypes for attributes plugin can get by calling core driver's
// following helper functions:
//
// GetGlobalAttribute, GetFeatureAttribute, GetOptionAttribute
//
typedef enum _EATTRIBUTE_DATATYPE {
kADT_UNKNOWN,
kADT_BOOL,
kADT_INT,
kADT_LONG,
kADT_DWORD,
kADT_ASCII, // NULL terminated ASCII string
kADT_UNICODE, // NULL terminated Unicode string
kADT_BINARY, // binary blob
kADT_SIZE,
kADT_RECT,
kADT_CUSTOMSIZEPARAMS, // array of CUSTOMSIZEPARAM structures
} EATTRIBUTE_DATATYPE;
//
// Data structure for storing information about PPD's *ParamCustomPageSize entries
//
#define CUSTOMPARAM_WIDTH 0
#define CUSTOMPARAM_HEIGHT 1
#define CUSTOMPARAM_WIDTHOFFSET 2
#define CUSTOMPARAM_HEIGHTOFFSET 3
#define CUSTOMPARAM_ORIENTATION 4
#define CUSTOMPARAM_MAX 5
typedef struct _CUSTOMSIZEPARAM {
LONG dwOrder; // order value
LONG lMinVal; // min value (in microns)
LONG lMaxVal; // max value (in microns)
} CUSTOMSIZEPARAM, *PCUSTOMSIZEPARAM;
//
// constants for SetOptions helper function
//
// SetOptions flag
//
#define SETOPTIONS_FLAG_RESOLVE_CONFLICT 0x00000001
#define SETOPTIONS_FLAG_KEEP_CONFLICT 0x00000002
//
// SetOptions result code
//
#define SETOPTIONS_RESULT_NO_CONFLICT 0
#define SETOPTIONS_RESULT_CONFLICT_RESOLVED 1
#define SETOPTIONS_RESULT_CONFLICT_REMAINED 2
#ifdef __cplusplus
}
#endif
#endif // !_PRINTOEM_