|
|
/******************************Module*Header*******************************\
* Module Name: escape.c * * Escape handler for MCD drivers and other escapes. * * Copyright (c) 1996 Microsoft Corporation \**************************************************************************/
#include "precomp.h"
//****************************************************************************
// ULONG DrvEscape(SURFOBJ *, ULONG, ULONG, VOID *, ULONG cjOut, VOID *pvOut)
//
// Driver escape entry point. This function should return TRUE for any
// supported escapes in response to QUERYESCSUPPORT, and FALSE for any
// others. All supported escapes are called from this routine.
//****************************************************************************
BOOL MCDrvGetEntryPoints(MCDSURFACE *pMCDSurface, MCDDRIVER *pMCDDriver);
ULONG DrvEscape(SURFOBJ *pso, ULONG iEsc, ULONG cjIn, VOID *pvIn, ULONG cjOut, VOID *pvOut) { ULONG retVal; PDEV *ppdev;
if (iEsc == MCDFUNCS) {
ppdev = (PDEV *)pso->dhpdev;
if (!ppdev->hMCD) { WCHAR uDllName[50]; UCHAR dllName[50]; ULONG nameSize;
EngMultiByteToUnicodeN(uDllName, sizeof(uDllName), &nameSize, MCDENGDLLNAME, sizeof(MCDENGDLLNAME));
if (ppdev->hMCD = EngLoadImage(uDllName)) { MCDENGINITFUNC pMCDEngInit = EngFindImageProcAddress(ppdev->hMCD, (LPSTR)MCDENGINITFUNCNAME);
if (pMCDEngInit) { (*pMCDEngInit)(pso, MCDrvGetEntryPoints); ppdev->pMCDFilterFunc = EngFindImageProcAddress(ppdev->hMCD, (LPSTR)MCDENGESCFILTERNAME); } } }
if (ppdev->pMCDFilterFunc) { if ((*ppdev->pMCDFilterFunc)(pso, iEsc, cjIn, pvIn, cjOut, pvOut, &retVal)) return retVal; } }
return (ULONG)FALSE; }
|