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.
 
 
 
 
 
 

1308 lines
30 KiB

/*++
Copyright (c) 1996-1999 Microsoft Corporation
Module Name:
oemutil.h
Abstract:
Declarations used to implement OEM plugin architecture
Environment:
Windows NT printer driver
Revision History:
01/21/97 -davidx-
Created it.
04/01/97 -zhanw-
Added Unidrv specific DDI hooks (OEMDitherColor, OEMNextBand, OEMStartBanding,
OEMPaint, OEMLineTo).
--*/
#ifndef _OEMUTIL_H_
#define _OEMUTIL_H_
#ifdef __cplusplus
extern "C" {
#endif
#ifdef WINNT_40
#undef IsEqualGUID
#define IsEqualGUID(rguid1, rguid2) \
(((PLONG) rguid1)[0] == ((PLONG) rguid2)[0] && \
((PLONG) rguid1)[1] == ((PLONG) rguid2)[1] && \
((PLONG) rguid1)[2] == ((PLONG) rguid2)[2] && \
((PLONG) rguid1)[3] == ((PLONG) rguid2)[3])
#include <wtypes.h>
#endif
typedef BOOL (APIENTRY *PFN_OEMGetInfo)(
DWORD dwMode,
PVOID pBuffer,
DWORD cbSize,
PDWORD pcbNeeded
);
typedef BOOL (APIENTRY *PFN_OEMDriverDMS)(
PVOID pDevObj,
PVOID pBuffer,
DWORD cbSize,
PDWORD pcbNeeded
);
typedef BOOL (APIENTRY *PFN_OEMDevMode)(
DWORD dwMode,
POEMDMPARAM pOemDMParam
);
//
// *** Kernel-mode rendering module - OEM entrypoints ***
//
#ifdef KERNEL_MODE
typedef BOOL (APIENTRY *PFN_OEMEnableDriver)(
DWORD DriverVersion,
DWORD cbSize,
PDRVENABLEDATA pded
);
typedef VOID (APIENTRY *PFN_OEMDisableDriver)(
VOID
);
typedef PDEVOEM (APIENTRY *PFN_OEMEnablePDEV)(
PDEVOBJ pdevobj,
PWSTR pPrinterName,
ULONG cPatterns,
HSURF *phsurfPatterns,
ULONG cjGdiInfo,
GDIINFO *pGdiInfo,
ULONG cjDevInfo,
DEVINFO *pDevInfo,
DRVENABLEDATA *pded
);
typedef VOID (APIENTRY *PFN_OEMDisablePDEV)(
PDEVOBJ pdevobj
);
typedef BOOL (APIENTRY *PFN_OEMResetPDEV)(
PDEVOBJ pdevobjOld,
PDEVOBJ pdevobjNew
);
typedef DWORD (APIENTRY *PFN_OEMCommand)(
PDEVOBJ pdevobj,
DWORD dwIndex,
PVOID pData,
DWORD cbSize
);
typedef INT (APIENTRY *PFN_OEMCommandCallback)(
PDEVOBJ pdevobj,
DWORD dwCallbackID,
DWORD dwCount,
PDWORD pdwParams
);
typedef PBYTE (APIENTRY *PFN_OEMImageProcessing)(
PDEVOBJ pdevobj,
PBYTE pSrcBitmap,
PBITMAPINFOHEADER pBitmapInfoHeader,
PBYTE pColorTable,
DWORD dwCallbackID,
PIPPARAMS pIPParams
);
typedef BOOL (APIENTRY *PFN_OEMFilterGraphics)(
PDEVOBJ pdevobj,
PBYTE pBuf,
DWORD dwLen
);
typedef INT (APIENTRY *PFN_OEMCompression)(
PDEVOBJ pdevobj,
PBYTE pInBuf,
PBYTE pOutBuf,
DWORD dwInLen,
DWORD dwOutLen
);
typedef BOOL (APIENTRY *PFN_OEMHalftonePattern)(
PDEVOBJ pdevobj,
PBYTE pHTPattern,
DWORD dwHTPatternX,
DWORD dwHTPatternY,
DWORD dwHTNumPatterns,
DWORD dwCallbackID,
PBYTE pResource,
DWORD dwResourceSize
);
typedef VOID (APIENTRY *PFN_OEMMemoryUsage)(
PDEVOBJ pdevobj,
POEMMEMORYUSAGE pMemoryUsage
);
typedef DWORD (APIENTRY *PFN_OEMDownloadFontHeader)(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj
);
typedef DWORD (APIENTRY *PFN_OEMDownloadCharGlyph)(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj,
HGLYPH hGlyph,
PDWORD pdwFreeMem
);
typedef DWORD (APIENTRY *PFN_OEMTTDownloadMethod)(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj
);
typedef VOID (APIENTRY *PFN_OEMOutputCharStr)(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj,
DWORD dwType,
DWORD dwCount,
PVOID pGlyph
);
typedef VOID (APIENTRY *PFN_OEMSendFontCmd)(
PDEVOBJ pdevobj,
PUNIFONTOBJ pUFObj,
PFINVOCATION pFInv
);
typedef BOOL (APIENTRY *PFN_OEMTTYGetInfo)(
PDEVOBJ pdevobj,
DWORD dwInfoIndex,
PVOID pOutputBuf,
DWORD dwSize,
DWORD *pcbNeeded
);
typedef BOOL (APIENTRY *PFN_OEMTextOutAsBitmap)(
SURFOBJ *pso,
STROBJ *pstro,
FONTOBJ *pfo,
CLIPOBJ *pco,
RECTL *prclExtra,
RECTL *prclOpaque,
BRUSHOBJ *pboFore,
BRUSHOBJ *pboOpaque,
POINTL *pptlOrg,
MIX mix
);
enum {
EP_OEMGetInfo,
EP_OEMDevMode,
EP_OEMEnableDriver,
EP_OEMDisableDriver,
EP_OEMEnablePDEV,
EP_OEMDisablePDEV,
EP_OEMResetPDEV,
EP_OEMCommand,
EP_OEMDriverDMS,
MAX_OEMENTRIES
};
#ifdef DEFINE_OEMPROC_NAMES
static CONST PSTR OEMProcNames[MAX_OEMENTRIES] = {
"OEMGetInfo",
"OEMDevMode",
"OEMEnableDriver",
"OEMDisableDriver",
"OEMEnablePDEV",
"OEMDisablePDEV",
"OEMResetPDEV",
"OEMCommand",
"OEMDriverDMS",
};
#endif // DEFINE_OEMPROC_NAMES
//
// NOTE: These are different from the entrypoints above.
// They are returned by the OEM module in a table instead
// of being exported by the DLL.
//
typedef BOOL (APIENTRY *PFN_OEMBitBlt)(
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_OEMStretchBlt)(
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_OEMCopyBits)(
SURFOBJ *psoDest,
SURFOBJ *psoSrc,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclDest,
POINTL *pptlSrc
);
typedef BOOL (APIENTRY *PFN_OEMTextOut)(
SURFOBJ *pso,
STROBJ *pstro,
FONTOBJ *pfo,
CLIPOBJ *pco,
RECTL *prclExtra,
RECTL *prclOpaque,
BRUSHOBJ *pboFore,
BRUSHOBJ *pboOpaque,
POINTL *pptlOrg,
MIX mix
);
typedef BOOL (APIENTRY *PFN_OEMStrokePath)(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
XFORMOBJ *pxo,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
LINEATTRS *plineattrs,
MIX mix
);
typedef BOOL (APIENTRY *PFN_OEMFillPath)(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
MIX mix,
FLONG flOptions
);
typedef BOOL (APIENTRY *PFN_OEMStrokeAndFillPath)(
SURFOBJ *pso,
PATHOBJ *ppo,
CLIPOBJ *pco,
XFORMOBJ *pxo,
BRUSHOBJ *pboStroke,
LINEATTRS *plineattrs,
BRUSHOBJ *pboFill,
POINTL *pptlBrushOrg,
MIX mixFill,
FLONG flOptions
);
typedef BOOL (APIENTRY *PFN_OEMRealizeBrush)(
BRUSHOBJ *pbo,
SURFOBJ *psoTarget,
SURFOBJ *psoPattern,
SURFOBJ *psoMask,
XLATEOBJ *pxlo,
ULONG iHatch
);
typedef BOOL (APIENTRY *PFN_OEMStartPage)(
SURFOBJ *pso
);
typedef BOOL (APIENTRY *PFN_OEMSendPage)(
SURFOBJ *pso
);
typedef ULONG (APIENTRY *PFN_OEMEscape)(
SURFOBJ *pso,
ULONG iEsc,
ULONG cjIn,
PVOID pvIn,
ULONG cjOut,
PVOID pvOut
);
typedef BOOL (APIENTRY *PFN_OEMStartDoc)(
SURFOBJ *pso,
PWSTR pwszDocName,
DWORD dwJobId
);
typedef BOOL (APIENTRY *PFN_OEMEndDoc)(
SURFOBJ *pso,
FLONG fl
);
typedef PIFIMETRICS (APIENTRY *PFN_OEMQueryFont)(
DHPDEV dhpdev,
ULONG_PTR iFile,
ULONG iFace,
ULONG_PTR *pid
);
typedef PVOID (APIENTRY *PFN_OEMQueryFontTree)(
DHPDEV dhpdev,
ULONG_PTR iFile,
ULONG iFace,
ULONG iMode,
ULONG_PTR *pid
);
typedef LONG (APIENTRY *PFN_OEMQueryFontData)(
DHPDEV dhpdev,
FONTOBJ *pfo,
ULONG iMode,
HGLYPH hg,
GLYPHDATA *pgd,
PVOID pv,
ULONG cjSize
);
typedef BOOL (APIENTRY *PFN_OEMQueryAdvanceWidths)(
DHPDEV dhpdev,
FONTOBJ *pfo,
ULONG iMode,
HGLYPH *phg,
PVOID pvWidths,
ULONG cGlyphs
);
typedef ULONG (APIENTRY *PFN_OEMFontManagement)(
SURFOBJ *pso,
FONTOBJ *pfo,
ULONG iMode,
ULONG cjIn,
PVOID pvIn,
ULONG cjOut,
PVOID pvOut
);
typedef ULONG (APIENTRY *PFN_OEMGetGlyphMode)(
DHPDEV dhpdev,
FONTOBJ *pfo
);
typedef BOOL (APIENTRY *PFN_OEMNextBand)(
SURFOBJ *pso,
POINTL *pptl
);
typedef BOOL (APIENTRY *PFN_OEMStartBanding)(
SURFOBJ *pso,
POINTL *pptl
);
typedef ULONG (APIENTRY *PFN_OEMDitherColor)(
DHPDEV dhpdev,
ULONG iMode,
ULONG rgbColor,
ULONG *pulDither
);
typedef BOOL (APIENTRY *PFN_OEMPaint)(
SURFOBJ *pso,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
MIX mix
);
typedef BOOL (APIENTRY *PFN_OEMLineTo)(
SURFOBJ *pso,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
LONG x1,
LONG y1,
LONG x2,
LONG y2,
RECTL *prclBounds,
MIX mix
);
#ifndef WINNT_40
typedef BOOL (APIENTRY *PFN_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
);
typedef BOOL (APIENTRY *PFN_OEMPlgBlt)(
SURFOBJ *psoDst,
SURFOBJ *psoSrc,
SURFOBJ *psoMask,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
COLORADJUSTMENT *pca,
POINTL *pptlBrushOrg,
POINTFIX *pptfixDest,
RECTL *prclSrc,
POINTL *pptlMask,
ULONG iMode
);
typedef BOOL (APIENTRY *PFN_OEMAlphaBlend)(
SURFOBJ *psoDest,
SURFOBJ *psoSrc,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclDest,
RECTL *prclSrc,
BLENDOBJ *pBlendObj
);
typedef BOOL (APIENTRY *PFN_OEMGradientFill)(
SURFOBJ *psoDest,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
TRIVERTEX *pVertex,
ULONG nVertex,
PVOID pMesh,
ULONG nMesh,
RECTL *prclExtents,
POINTL *pptlDitherOrg,
ULONG ulMode
);
typedef HANDLE (APIENTRY *PFN_OEMIcmCreateColorTransform)(
DHPDEV dhpdev,
LPLOGCOLORSPACEW pLogColorSpace,
PVOID pvSourceProfile,
ULONG cjSourceProfile,
PVOID pvDestProfile,
ULONG cjDestProfile,
PVOID pvTargetProfile,
ULONG cjTargetProfile,
DWORD dwReserved
);
typedef BOOL (APIENTRY *PFN_OEMIcmDeleteColorTransform)(
DHPDEV dhpdev,
HANDLE hcmXform
);
typedef BOOL (APIENTRY *PFN_OEMQueryDeviceSupport)(
SURFOBJ *pso,
XLATEOBJ *pxlo,
XFORMOBJ *pxo,
ULONG iType,
ULONG cjIn,
PVOID pvIn,
ULONG cjOut,
PVOID pvOut
);
typedef BOOL (APIENTRY *PFN_OEMTransparentBlt)(
SURFOBJ *psoDst,
SURFOBJ *psoSrc,
CLIPOBJ *pco,
XLATEOBJ *pxlo,
RECTL *prclDst,
RECTL *prclSrc,
ULONG iTransColor,
ULONG ulReserved
);
#endif // !WINNT_40
//
// WARNING!!!
// Do not change the following declaration without consulting with
// the people responsible for PSCRIPT and UNIDRV kernel modes.
//
enum {
EP_OEMRealizeBrush,
EP_OEMDitherColor,
EP_OEMCopyBits,
EP_OEMBitBlt,
EP_OEMStretchBlt,
EP_OEMStretchBltROP,
EP_OEMPlgBlt,
EP_OEMTransparentBlt,
EP_OEMAlphaBlend,
EP_OEMGradientFill,
EP_OEMTextOut,
EP_OEMStrokePath,
EP_OEMFillPath,
EP_OEMStrokeAndFillPath,
EP_OEMPaint,
EP_OEMLineTo,
EP_OEMStartPage,
EP_OEMSendPage,
EP_OEMEscape,
EP_OEMStartDoc,
EP_OEMEndDoc,
EP_OEMNextBand,
EP_OEMStartBanding,
EP_OEMQueryFont,
EP_OEMQueryFontTree,
EP_OEMQueryFontData,
EP_OEMQueryAdvanceWidths,
EP_OEMFontManagement,
EP_OEMGetGlyphMode,
EP_OEMIcmCreateColorTransform,
EP_OEMIcmDeleteColorTransform,
EP_OEMQueryDeviceSupport,
//
// The following Unidrv-specific callbacks allow at most one OEM to hook
// out for each function at a time. They must be exported by the OEM dll's.
// New callbacks must be added between EP_UNIDRV_ONLY_FIRST and
// EP_UNIDRV_ONLY_LAST. If you change the first or the last callback,
// remember to update these two constants!! Don't forget to update
// OEMUnidrvProcNames[] in unidrv\control\oemkm.c accordingly.
//
EP_UNIDRV_ONLY_FIRST,
EP_OEMCommandCallback = EP_UNIDRV_ONLY_FIRST,
EP_OEMImageProcessing,
EP_OEMFilterGraphics,
EP_OEMCompression,
EP_OEMHalftonePattern,
EP_OEMMemoryUsage,
EP_OEMDownloadFontHeader,
EP_OEMDownloadCharGlyph,
EP_OEMTTDownloadMethod,
EP_OEMOutputCharStr,
EP_OEMSendFontCmd,
EP_OEMTTYGetInfo,
EP_OEMTextOutAsBitmap,
EP_OEMWritePrinter,
EP_UNIDRV_ONLY_LAST = EP_OEMWritePrinter,
MAX_OEMHOOKS,
};
#define MAX_UNIDRV_ONLY_HOOKS (EP_UNIDRV_ONLY_LAST - EP_UNIDRV_ONLY_FIRST + 1)
#define INVALID_EP 0xFFFFFFFF
#endif // KERNEL_MODE
//
// *** User-mode UI module - OEM entrypoints ***
//
#ifndef KERNEL_MODE
typedef BOOL (APIENTRY *PFN_OEMCommonUIProp)(
DWORD dwMode,
POEMCUIPPARAM pOemCUIPParam
);
typedef LRESULT (APIENTRY *PFN_OEMDocumentPropertySheets)(
PPROPSHEETUI_INFO pPSUIInfo,
LPARAM lParam
);
typedef LRESULT (APIENTRY *PFN_OEMDevicePropertySheets)(
PPROPSHEETUI_INFO pPSUIInfo,
LPARAM lParam
);
typedef BOOL (APIENTRY *PFN_OEMDevQueryPrintEx)(
POEMUIOBJ poemuiobj,
PDEVQUERYPRINT_INFO pDQPInfo,
PDEVMODE pPublicDM,
PVOID pOEMDM
);
typedef DWORD (APIENTRY *PFN_OEMDeviceCapabilities)(
POEMUIOBJ poemuiobj,
HANDLE hPrinter,
PWSTR pDeviceName,
WORD wCapability,
PVOID pOutput,
PDEVMODE pPublicDM,
PVOID pOEMDM,
DWORD dwOld
);
typedef BOOL (APIENTRY *PFN_OEMUpgradePrinter)(
DWORD dwLevel,
PBYTE pDriverUpgradeInfo
);
typedef BOOL (APIENTRY *PFN_OEMPrinterEvent)(
PWSTR pPrinterName,
INT iDriverEvent,
DWORD dwFlags,
LPARAM lParam
);
typedef BOOL (APIENTRY *PFN_OEMDriverEvent)(
DWORD dwDriverEvent,
DWORD dwLevel,
LPBYTE pDriverInfo,
LPARAM lParam
);
typedef BOOL (APIENTRY *PFN_OEMQueryColorProfile)(
HANDLE hPrinter,
POEMUIOBJ poemuiobj,
PDEVMODE pPublicDM,
PVOID pOEMDM,
ULONG ulQueryMode,
VOID *pvProfileData,
ULONG *pcbProfileData,
FLONG *pflProfileData
);
typedef BOOL (APIENTRY *PFN_OEMUpgradeRegistry)(
DWORD dwLevel,
PBYTE pDriverUpgradeInfo,
PFN_DrvUpgradeRegistrySetting pfnUpgradeRegistry
);
typedef INT_PTR (CALLBACK *PFN_OEMFontInstallerDlgProc)(
HWND hWnd,
UINT usMsg,
WPARAM wParam,
LPARAM lParam
);
typedef BOOL (APIENTRY *PFN_OEMUpdateExternalFonts)(
HANDLE hPrinter,
HANDLE hHeap,
PWSTR pwstrCartridges
);
enum {
EP_OEMGetInfo,
EP_OEMDevMode,
EP_OEMCommonUIProp,
EP_OEMDocumentPropertySheets,
EP_OEMDevicePropertySheets,
EP_OEMDevQueryPrintEx,
EP_OEMDeviceCapabilities,
EP_OEMUpgradePrinter,
EP_OEMPrinterEvent,
EP_OEMQueryColorProfile,
EP_OEMUpgradeRegistry,
EP_OEMFontInstallerDlgProc,
EP_OEMUpdateExternalFonts,
EP_OEMDriverEvent,
MAX_OEMENTRIES
};
#ifdef DEFINE_OEMPROC_NAMES
static CONST PSTR OEMProcNames[MAX_OEMENTRIES] = {
"OEMGetInfo",
"OEMDevMode",
"OEMCommonUIProp",
"OEMDocumentPropertySheets",
"OEMDevicePropertySheets",
"OEMDevQueryPrintEx",
"OEMDeviceCapabilities",
"OEMUpgradePrinter",
"OEMPrinterEvent",
"OEMQueryColorProfile",
"OEMUpgradeRegistry",
"OEMFontInstallerDlgProc",
"OEMUpdateExternalFonts",
"OEMDriverEvent",
};
#endif // DEFINE_OEMPROC_NAMES
#endif // !KERNEL_MODE
//
// Data structure containing information about each OEM plugin
//
typedef LONG (APIENTRY *OEMPROC)();
// Constant flag bits for OEM_PLUGIN_ENTRY.dwFlags field
#define OEMENABLEDRIVER_CALLED 0x0001
#define OEMENABLEPDEV_CALLED 0x0002
#define OEMDEVMODE_CALLED 0x0004
#define OEMWRITEPRINTER_HOOKED 0x0008
#define OEMNOT_UNLOAD_PLUGIN 0x0010 //If set, the plugin dll will not be unloaded
#define MAX_OEM_PLUGINS 8
typedef struct _OEM_PLUGIN_ENTRY {
//
// Filenames are fully qualified, NULL means not present
//
PTSTR ptstrDriverFile; // KM module filename
PTSTR ptstrConfigFile; // UM module filename
PTSTR ptstrHelpFile; // help filename
DWORD dwSignature; // unique OEM signature
HANDLE hInstance; // handle to loaded KM or UM module
PVOID pParam; // extra pointer parameter for KM or UM module
DWORD dwFlags; // misc. flag bits
PVOID pOEMDM; // pointer to OEM private devmode
DWORD dwOEMDMSize; // size of OEM private devmode
//
// OEM interface information
//
PVOID pIntfOem; // pointer to OEM plugin's interface
GUID iidIntfOem; // OEM plugin's interface ID
//
// Pointers to various plugin entrypoints, NULL means not present.
// Note that the set of entrypoints diff for KM and UM module.
//
BYTE aubProcFlags[(MAX_OEMENTRIES + 7) / 8];
OEMPROC oemprocs[MAX_OEMENTRIES];
} OEM_PLUGIN_ENTRY, *POEM_PLUGIN_ENTRY;
//
// Information about all plugins assocaited with a driver
//
#define OEM_HAS_PUBLISHER_INFO 0x00000001
typedef struct _OEM_PLUGINS {
PVOID pdriverobj; // reference pointer to driver data structure
DWORD dwCount; // number of plugins
DWORD dwFlags; // misc flags
PUBLISHERINFO PublisherInfo; // info about publisher printing
OEM_PLUGIN_ENTRY aPlugins[1]; // information about each plugin
} OEM_PLUGINS, *POEM_PLUGINS;
//
// Get OEM plugin interface and publish driver helper interface
//
BOOL
BGetOemInterface(
POEM_PLUGIN_ENTRY pOemEntry
);
//
// Retrieve the latest interface supported by OEM plugin
//
BOOL
BQILatestOemInterface(
IN HANDLE hInstance,
IN REFCLSID rclsid,
IN const GUID *PrintOem_IIDs[],
OUT PVOID *ppIntfOem,
OUT GUID *piidIntfOem
);
//
// Release OEM interface
//
ULONG
ReleaseOemInterface(
POEM_PLUGIN_ENTRY pOemEntry
);
//
// Free OEM component
//
VOID
Driver_CoFreeOEMLibrary(
IN HANDLE hInstance
);
HRESULT
HComOEMGetInfo(
POEM_PLUGIN_ENTRY pOemEntry,
DWORD dwMode,
PVOID pBuffer,
DWORD cbSize,
PDWORD pcbNeeded
);
HRESULT
HComOEMDevMode(
POEM_PLUGIN_ENTRY pOemEntry,
DWORD dwMode,
POEMDMPARAM pOemDMParam
);
#if defined(KERNEL_MODE) && defined(WINNT_40)
typedef struct _OEM_PLUGIN_REFCOUNT {
DWORD dwRefCount; // ref count for the OEM render plugin DLL
PTSTR ptstrDriverFile; // OEM render plugin DLL name
struct _OEM_PLUGIN_REFCOUNT *pNext; // next ref count node
} OEM_PLUGIN_REFCOUNT, *POEM_PLUGIN_REFCOUNT;
BOOL
BOEMPluginFirstLoad(
IN PTSTR ptstrDriverFile,
IN OUT POEM_PLUGIN_REFCOUNT *ppOEMPluginRefCount
);
BOOL
BOEMPluginLastUnload(
IN PTSTR ptstrDriverFile,
IN OUT POEM_PLUGIN_REFCOUNT *ppOEMPluginRefCount
);
VOID
VFreePluginRefCountList(
IN OUT POEM_PLUGIN_REFCOUNT *ppOEMPluginRefCount
);
BOOL
BHandleOEMInitialize(
POEM_PLUGIN_ENTRY pOemEntry,
ULONG ulReason
);
#endif // KERNEL_MODE && WINNT_40
//
// In kernel mode, only OEM rendering module is used.
// In user mode, only OEM UI module is loaded.
//
#ifdef KERNEL_MODE
#define CURRENT_OEM_MODULE_NAME(pOemEntry) (pOemEntry)->ptstrDriverFile
HRESULT
HComOEMEnableDriver(
POEM_PLUGIN_ENTRY pOemEntry,
DWORD DriverVersion,
DWORD cbSize,
PDRVENABLEDATA pded
);
HRESULT
HComOEMEnablePDEV(
POEM_PLUGIN_ENTRY pOemEntry,
PDEVOBJ pdevobj,
PWSTR pPrinterName,
ULONG cPatterns,
HSURF *phsurfPatterns,
ULONG cjGdiInfo,
GDIINFO *pGdiInfo,
ULONG cjDevInfo,
DEVINFO *pDevInfo,
DRVENABLEDATA *pded,
OUT PDEVOEM *pDevOem
);
HRESULT
HComOEMResetPDEV(
POEM_PLUGIN_ENTRY pOemEntry,
PDEVOBJ pdevobjOld,
PDEVOBJ pdevobjNew
);
HRESULT
HComOEMDisablePDEV(
POEM_PLUGIN_ENTRY pOemEntry,
PDEVOBJ pdevobj
);
HRESULT
HComOEMDisableDriver(
POEM_PLUGIN_ENTRY pOemEntry
);
HRESULT
HComOEMCommand(
POEM_PLUGIN_ENTRY pOemEntry,
PDEVOBJ pdevobj,
DWORD dwIndex,
PVOID pData,
DWORD cbSize,
OUT DWORD *pdwResult
);
HRESULT
HComOEMWritePrinter(
POEM_PLUGIN_ENTRY pOemEntry,
PDEVOBJ pdevobj,
PVOID pBuf,
DWORD cbBuffer,
OUT PDWORD pcbWritten
);
HRESULT
HComOEMGetPDEVAdjustment(
POEM_PLUGIN_ENTRY pOemEntry,
PDEVOBJ pdevobj,
DWORD dwAdjustType,
PVOID pBuf,
DWORD cbBuffer,
OUT BOOL *pbAdjustmentDone);
#else // !KERNEL_MODE
#define CURRENT_OEM_MODULE_NAME(pOemEntry) (pOemEntry)->ptstrConfigFile
HRESULT
HComOEMCommonUIProp(
POEM_PLUGIN_ENTRY pOemEntry,
DWORD dwMode,
POEMCUIPPARAM pOemCUIPParam
);
HRESULT
HComOEMDocumentPropertySheets(
POEM_PLUGIN_ENTRY pOemEntry,
PPROPSHEETUI_INFO pPSUIInfo,
LPARAM lParam
);
HRESULT
HComOEMDevicePropertySheets(
POEM_PLUGIN_ENTRY pOemEntry,
PPROPSHEETUI_INFO pPSUIInfo,
LPARAM lParam
);
HRESULT
HComOEMDevQueryPrintEx(
POEM_PLUGIN_ENTRY pOemEntry,
POEMUIOBJ poemuiobj,
PDEVQUERYPRINT_INFO pDQPInfo,
PDEVMODE pPublicDM,
PVOID pOEMDM
);
HRESULT
HComOEMDeviceCapabilities(
POEM_PLUGIN_ENTRY pOemEntry,
POEMUIOBJ poemuiobj,
HANDLE hPrinter,
PWSTR pDeviceName,
WORD wCapability,
PVOID pOutput,
PDEVMODE pPublicDM,
PVOID pOEMDM,
DWORD dwOld,
DWORD *pdwResult
);
HRESULT
HComOEMUpgradePrinter(
POEM_PLUGIN_ENTRY pOemEntry,
DWORD dwLevel,
PBYTE pDriverUpgradeInfo
);
HRESULT
HComOEMPrinterEvent(
POEM_PLUGIN_ENTRY pOemEntry,
PWSTR pPrinterName,
INT iDriverEvent,
DWORD dwFlags,
LPARAM lParam
);
HRESULT
HComOEMDriverEvent(
POEM_PLUGIN_ENTRY pOemEntry,
DWORD dwDriverEvent,
DWORD dwLevel,
LPBYTE pDriverInfo,
LPARAM lParam
);
HRESULT
HComOEMQUeryColorProfile(
POEM_PLUGIN_ENTRY pOemEntry,
HANDLE hPrinter,
POEMUIOBJ poemuiobj,
PDEVMODE pPublicDM,
PVOID pOEMDM,
ULONG ulQueryMode,
VOID *pvProfileData,
ULONG *pcbProfileData,
FLONG *pflProfileData
);
HRESULT
HComOEMFontInstallerDlgProc(
POEM_PLUGIN_ENTRY pOemEntry,
HWND hWnd,
UINT usMsg,
WPARAM wParam,
LPARAM lParam
);
HRESULT
HComOEMUpdateExternalFonts(
POEM_PLUGIN_ENTRY pOemEntry,
HANDLE hPrinter,
HANDLE hHeap,
PWSTR pwstrCartridges
);
HRESULT
HComOEMQueryJobAttributes(
POEM_PLUGIN_ENTRY pOemEntry,
HANDLE hPrinter,
PDEVMODE pDevMode,
DWORD dwLevel,
LPBYTE lpAttributeInfo
);
HRESULT
HComOEMHideStandardUI(
POEM_PLUGIN_ENTRY pOemEntry,
DWORD dwMode
);
HRESULT
HComOEMDocumentEvent(
POEM_PLUGIN_ENTRY pOemEntry,
HANDLE hPrinter,
HDC hdc,
INT iEsc,
ULONG cbIn,
PVOID pbIn,
ULONG cbOut,
PVOID pbOut,
PINT piResult
);
#endif // KERNEL_MODE
//
// Get information about OEM plugins for a printer
//
POEM_PLUGINS
PGetOemPluginInfo(
HANDLE hPrinter,
LPCTSTR pctstrDriverPath,
PDRIVER_INFO_3 pDriverInfo3
);
//
// Load OEM plugins modules into memory
//
BOOL
BLoadOEMPluginModules(
POEM_PLUGINS pOemPlugins
);
//
// Dispose of information about OEM plugins and
// unload OEM plugin modules if necessary
//
VOID
VFreeOemPluginInfo(
POEM_PLUGINS pOemPlugins
);
//
// Macro to detect if OEM is using COM interface.
//
// Only exists for user mode drivers.
//
#define HAS_COM_INTERFACE(pOemEntry) \
((pOemEntry)->pIntfOem != NULL)
//
// Get the address for the specified OEM entrypoint.
//
// NOTE!!! You should always use the macro version
// instead of calling the function directly.
//
#define GET_OEM_ENTRYPOINT(pOemEntry, ep) (PFN_##ep) \
(BITTST((pOemEntry)->aubProcFlags, EP_##ep) ? \
(pOemEntry)->oemprocs[EP_##ep] : \
PGetOemEntrypointAddress(pOemEntry, EP_##ep))
OEMPROC
PGetOemEntrypointAddress(
POEM_PLUGIN_ENTRY pOemEntry,
DWORD dwIndex
);
//
// Find the OEM plugin entry having the specified signature
//
POEM_PLUGIN_ENTRY
PFindOemPluginWithSignature(
POEM_PLUGINS pOemPlugins,
DWORD dwSignature
);
//
// Calculate the total private devmode size for all OEM plugins
//
BOOL
BCalcTotalOEMDMSize(
HANDLE hPrinter,
POEM_PLUGINS pOemPlugins,
PDWORD pdwOemDMSize
);
//
// Initialize OEM plugin default devmodes
//
BOOL
BInitOemPluginDefaultDevmode(
IN HANDLE hPrinter,
IN PDEVMODE pPublicDM,
OUT POEM_DMEXTRAHEADER pOemDM,
IN OUT POEM_PLUGINS pOemPlugins
);
//
// Validate and merge OEM plugin private devmode fields
//
BOOL
BValidateAndMergeOemPluginDevmode(
IN HANDLE hPrinter,
OUT PDEVMODE pPublicDMOut,
IN PDEVMODE pPublicDMIn,
OUT POEM_DMEXTRAHEADER pOemDMOut,
IN POEM_DMEXTRAHEADER pOemDMIn,
IN OUT POEM_PLUGINS pOemPlugins
);
//
// This function scans through the OEM plugin devmodes block and
// verifies if every plugin devmode in that block is constructed correctly.
//
BOOL
bIsValidPluginDevmodes(
IN POEM_DMEXTRAHEADER pOemDM,
IN LONG cbOemDMSize
);
//
// Convert OEM plugin default devmodes to current version
//
BOOL
BConvertOemPluginDevmode(
IN HANDLE hPrinter,
OUT PDEVMODE pPublicDMOut,
IN PDEVMODE pPublicDMIn,
OUT POEM_DMEXTRAHEADER pOemDMOut,
IN POEM_DMEXTRAHEADER pOemDMIn,
IN LONG cbOemDMInSize,
IN POEM_PLUGINS pOemPlugins
);
//
// Function called by OEM plugins to access driver private devmode settings
//
BOOL
BGetDevmodeSettingForOEM(
IN PDEVMODE pdm,
IN DWORD dwIndex,
OUT PVOID pOutput,
IN DWORD cbSize,
OUT PDWORD pcbNeeded
);
//
// Function called by OEM plugins to access driver settings in registry
//
BOOL
BGetPrinterDataSettingForOEM(
IN PRINTERDATA *pPrinterData,
IN DWORD dwIndex,
OUT PVOID pOutput,
IN DWORD cbSize,
OUT PDWORD pcbNeeded
);
//
// Function called by OEM plugins to find out the currently selected
// option(s) for the specified feature
//
BOOL
BGetGenericOptionSettingForOEM(
IN PUIINFO pUIInfo,
IN POPTSELECT pOptionsArray,
IN PCSTR pstrFeatureName,
OUT PSTR pstrOutput,
IN DWORD cbSize,
OUT PDWORD pcbNeeded,
OUT PDWORD pdwOptionsReturned
);
#ifdef __cplusplus
}
#endif
#endif // !_OEMUTIL_H_