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.
388 lines
8.7 KiB
388 lines
8.7 KiB
/*++
|
|
|
|
Copyright (c) 1996 - 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
oemkm.h
|
|
|
|
Abstract:
|
|
|
|
Header file to support kernel mode OEM plugins
|
|
|
|
Environment:
|
|
|
|
Windows NT Universal Printer driver (UNIDRV)
|
|
|
|
Revision History:
|
|
|
|
03/28/97 -zhanw-
|
|
Adapted from Pscript driver.
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _OEMKM_H_
|
|
#define _OEMKM_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <printoem.h>
|
|
#include "oemutil.h"
|
|
|
|
|
|
//
|
|
// Information about OEM hooks
|
|
//
|
|
|
|
typedef struct _OEM_HOOK_INFO
|
|
{
|
|
OEMPROC pfnHook; // function address of the hook
|
|
POEM_PLUGIN_ENTRY pOemEntry; // which OEM plugin hooked it
|
|
} OEM_HOOK_INFO, *POEM_HOOK_INFO;
|
|
|
|
//
|
|
// This macro should be placed near the beginning of every
|
|
// DDI entrypoint which can be hooked by OEM plugin
|
|
//
|
|
|
|
#define HANDLE_OEMHOOKS(pdev, ep, pfnType, resultType, args) \
|
|
if ((pdev)->pOemHookInfo != NULL && \
|
|
(pdev)->pOemHookInfo[ep].pfnHook != NULL && \
|
|
(pdev)->dwCallingFuncID != ep) \
|
|
{ \
|
|
resultType result; \
|
|
DWORD dwCallerFuncID;\
|
|
dwCallerFuncID = (pdev)->dwCallingFuncID;\
|
|
(pdev)->dwCallingFuncID = ep; \
|
|
(pdev)->devobj.hOEM = ((pdev)->pOemHookInfo[ep].pOemEntry)->hInstance; \
|
|
(pdev)->devobj.pdevOEM = ((pdev)->pOemHookInfo[ep].pOemEntry)->pParam; \
|
|
(pdev)->devobj.pOEMDM = ((pdev)->pOemHookInfo[ep].pOemEntry)->pOEMDM; \
|
|
result = ((pfnType) (pdev)->pOemHookInfo[ep].pfnHook) args; \
|
|
(pdev)->dwCallingFuncID = dwCallerFuncID; \
|
|
return result; \
|
|
}
|
|
|
|
//
|
|
// Macros used to call an entrypoint for all OEM plugins
|
|
//
|
|
|
|
#define START_OEMENTRYPOINT_LOOP(pdev) \
|
|
{ \
|
|
DWORD _oemCount = (pdev)->pOemPlugins->dwCount; \
|
|
POEM_PLUGIN_ENTRY pOemEntry = (pdev)->pOemPlugins->aPlugins; \
|
|
for ( ; _oemCount--; pOemEntry++) \
|
|
{ \
|
|
if (pOemEntry->hInstance == NULL) continue; \
|
|
(pdev)->devobj.hOEM = pOemEntry->hInstance; \
|
|
(pdev)->devobj.pdevOEM = pOemEntry->pParam; \
|
|
(pdev)->devobj.pOEMDM = pOemEntry->pOEMDM;
|
|
|
|
#define END_OEMENTRYPOINT_LOOP \
|
|
} \
|
|
}
|
|
|
|
//
|
|
// Get information about OEM plugins associated with the current device
|
|
// Load them into memory and call OEMEnableDriver for each of them
|
|
//
|
|
|
|
typedef struct _PDEV PDEV;
|
|
|
|
#ifdef WINNT_40
|
|
|
|
PVOID
|
|
DrvMemAllocZ(
|
|
ULONG ulSize
|
|
);
|
|
|
|
VOID
|
|
DrvMemFree(
|
|
PVOID pMem
|
|
);
|
|
|
|
|
|
LONG
|
|
DrvInterlockedIncrement(
|
|
PLONG pRef
|
|
);
|
|
|
|
LONG
|
|
DrvInterlockedDecrement(
|
|
PLONG pRef
|
|
);
|
|
|
|
#endif //WINNT_40
|
|
|
|
|
|
BOOL
|
|
BLoadAndInitOemPlugins(
|
|
PDEV *pPDev
|
|
);
|
|
|
|
// Constant flag bits for OEM_PLUGIN_ENTRY.dwFlags field
|
|
|
|
#define OEMENABLEDRIVER_CALLED 0x0001
|
|
#define OEMENABLEPDEV_CALLED 0x0002
|
|
|
|
//
|
|
// Unload OEM plugins and free all relevant resources
|
|
//
|
|
|
|
VOID
|
|
VUnloadOemPlugins(
|
|
PDEV *pPDev
|
|
);
|
|
|
|
#define FIX_DEVOBJ(pPDev, ep) \
|
|
{ \
|
|
(pPDev)->devobj.pdevOEM = (pPDev)->pOemHookInfo[ep].pOemEntry->pParam; \
|
|
(pPDev)->devobj.pOEMDM = (pPDev)->pOemHookInfo[ep].pOemEntry->pOEMDM; \
|
|
(pPDev)->pOemEntry = (PVOID)((pPDev)->pOemHookInfo[ep].pOemEntry); \
|
|
} \
|
|
|
|
|
|
//
|
|
// Provide OEM plugins access to driver private settings
|
|
//
|
|
|
|
BOOL
|
|
BGetDriverSettingForOEM(
|
|
PDEV *pPDev,
|
|
PCSTR pFeatureKeyword,
|
|
PVOID pOutput,
|
|
DWORD cbSize,
|
|
PDWORD pcbNeeded,
|
|
PDWORD pdwOptionsReturned
|
|
);
|
|
|
|
BOOL
|
|
BSetDriverSettingForOEM(
|
|
PDEVMODE pdm,
|
|
PTSTR pPrinterName,
|
|
PCSTR pFeatureKeyword,
|
|
PCSTR pOptionKeyword
|
|
);
|
|
|
|
|
|
|
|
|
|
//
|
|
// Unidrv specific COM wrappers
|
|
//
|
|
|
|
//
|
|
// Method for getting the implemented method.
|
|
// Returns S_OK if the given method is implemneted.
|
|
// Returns S_FALSE if the given method is notimplemneted.
|
|
//
|
|
|
|
HRESULT HComGetImplementedMethod(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PSTR pMethodName
|
|
);
|
|
|
|
|
|
//
|
|
// OEMDriverDMS - UNIDRV only,
|
|
//
|
|
|
|
HRESULT HComDriverDMS(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PVOID pDevObj,
|
|
PVOID pBuffer,
|
|
WORD cbSize,
|
|
PDWORD pcbNeeded
|
|
);
|
|
|
|
//
|
|
// OEMCommandCallback - UNIDRV only,
|
|
//
|
|
|
|
HRESULT HComCommandCallback(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
DWORD dwCallbackID,
|
|
DWORD dwCount,
|
|
PDWORD pdwParams,
|
|
OUT INT *piResult
|
|
) ;
|
|
|
|
|
|
//
|
|
// OEMImageProcessing - UNIDRV only,
|
|
//
|
|
|
|
HRESULT HComImageProcessing(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PBYTE pSrcBitmap,
|
|
PBITMAPINFOHEADER pBitmapInfoHeader,
|
|
PBYTE pColorTable,
|
|
DWORD dwCallbackID,
|
|
PIPPARAMS pIPParams,
|
|
OUT PBYTE *ppbResult
|
|
);
|
|
|
|
//
|
|
// OEMFilterGraphics - UNIDRV only,
|
|
//
|
|
|
|
HRESULT HComFilterGraphics(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PBYTE pBuf,
|
|
DWORD dwLen
|
|
);
|
|
|
|
//
|
|
// OEMCompression - UNIDRV only,
|
|
//
|
|
|
|
HRESULT HComCompression(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PBYTE pInBuf,
|
|
PBYTE pOutBuf,
|
|
DWORD dwInLen,
|
|
DWORD dwOutLen,
|
|
OUT INT *piResult
|
|
);
|
|
|
|
//
|
|
// OEMHalftone - UNIDRV only
|
|
//
|
|
|
|
HRESULT HComHalftonePattern(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PBYTE pHTPattern,
|
|
DWORD dwHTPatternX,
|
|
DWORD dwHTPatternY,
|
|
DWORD dwHTNumPatterns,
|
|
DWORD dwCallbackID,
|
|
PBYTE pResource,
|
|
DWORD dwResourceSize
|
|
) ;
|
|
|
|
//
|
|
// OEMMemoryUsage - UNIDRV only,
|
|
//
|
|
|
|
HRESULT HComMemoryUsage(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
POEMMEMORYUSAGE pMemoryUsage
|
|
);
|
|
|
|
//
|
|
// OEMTTYGetInfo - UNIDRV only
|
|
//
|
|
|
|
HRESULT HComTTYGetInfo(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
DWORD dwInfoIndex,
|
|
PVOID pOutputBuf,
|
|
DWORD dwSize,
|
|
DWORD *pcbcNeeded
|
|
);
|
|
//
|
|
// OEMDownloadFontheader - UNIDRV only
|
|
//
|
|
|
|
HRESULT HComDownloadFontHeader(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj,
|
|
OUT DWORD *pdwResult
|
|
);
|
|
|
|
//
|
|
// OEMDownloadCharGlyph - UNIDRV only
|
|
//
|
|
|
|
HRESULT HComDownloadCharGlyph(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj,
|
|
HGLYPH hGlyph,
|
|
PDWORD pdwWidth,
|
|
OUT DWORD *pdwResult
|
|
);
|
|
|
|
|
|
//
|
|
// OEMTTDownloadMethod - UNIDRV only
|
|
//
|
|
|
|
HRESULT HComTTDownloadMethod(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj,
|
|
OUT DWORD *pdwResult
|
|
);
|
|
|
|
//
|
|
// OEMOutputCharStr - UNIDRV only
|
|
//
|
|
|
|
HRESULT HComOutputCharStr(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj,
|
|
DWORD dwType,
|
|
DWORD dwCount,
|
|
PVOID pGlyph
|
|
);
|
|
|
|
//
|
|
// OEMSendFontCmd - UNIDRV only
|
|
//
|
|
|
|
|
|
HRESULT HComSendFontCmd(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj,
|
|
PFINVOCATION pFInv
|
|
);
|
|
|
|
//
|
|
// OEMTextOutAsBitmap - UNIDRV only
|
|
//
|
|
|
|
HRESULT HComTextOutAsBitmap(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
SURFOBJ *pso,
|
|
STROBJ *pstro,
|
|
FONTOBJ *pfo,
|
|
CLIPOBJ *pco,
|
|
RECTL *prclExtra,
|
|
RECTL *prclOpaque,
|
|
BRUSHOBJ *pboFore,
|
|
BRUSHOBJ *pboOpaque,
|
|
POINTL *pptlOrg,
|
|
MIX mix
|
|
);
|
|
|
|
//
|
|
// OEMWritePrinter - UNIDRV only (Interface 2 only)
|
|
//
|
|
|
|
HRESULT HComWritePrinter(
|
|
POEM_PLUGIN_ENTRY pOemEntry,
|
|
PDEVOBJ pdevobj,
|
|
LPVOID pBuf,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbWritten
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // !_OEMKM_H_
|
|
|