|
|
/*++
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_
|