📄 printoem.h
字号:
/*++
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -