Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

100 lines
3.1 KiB

/******************************Module*Header*******************************\
* Module Name: ldev.h
*
* defines the LDEV structure
*
* Copyright (c) 1995 Microsoft Corporation
\**************************************************************************/
/******************************Conventions*********************************\
*
* Function Dispatching:
*
* The dispatch table in an ldev consists of an array of function
* pointers. The functions the device does not support have 0's in them.
* The functions it does support contain pointers to the function in the
* device driver dll.
*
* For a surface output call you check if the device has hooked the call.
* (Signaled by the flags passed in EngAssociateSurface) If it has
* dispatch the call via the ldev in so.hldevOwner(). If it has not
* hooked the call, the simulations should be called. This is what is
* done by the macro PFNGET.
*
* For some optional calls like DrvSetPalette, DrvCreateDeviceBitmap
* you must check for 0 in the driver dispatch table. This is what
* the macro PFNVALID does.
*
\**************************************************************************/
typedef enum _LDEVTYPE { /* ldt */
LDEV_DEVICE_DISPLAY = 1,
LDEV_DEVICE_PRINTER = 2,
LDEV_FONT = 3,
LDEV_META_DEVICE = 4,
LDEV_IMAGE = 5,
} LDEVTYPE;
/******************************Public*MACRO*******************************\
* PFNDRV/PFNGET
*
* PFNDRV gets the device driver entry point, period.
* PFNGET gets the device driver entry point if it is hooked, otherwise gets
* the engine entry point. The flag is set by EngAssociate in the surface.
*
\**************************************************************************/
#define HOOK_BitBlt HOOK_BITBLT
#define HOOK_StretchBlt HOOK_STRETCHBLT
#define HOOK_PlgBlt HOOK_PLGBLT
#define HOOK_TextOut HOOK_TEXTOUT
#define HOOK_Paint HOOK_PAINT
#define HOOK_StrokePath HOOK_STROKEPATH
#define HOOK_FillPath HOOK_FILLPATH
#define HOOK_StrokeAndFillPath HOOK_STROKEANDFILLPATH
#define HOOK_CopyBits HOOK_COPYBITS
#define PFNDRV(lo,name) ((PFN_Drv##name) (lo).pfn(INDEX_Drv##name))
/*********************************Class************************************\
* LDEV structure
*
\**************************************************************************/
typedef struct _LDEV {
LDEVTYPE ldevType; // Type of ldev
ULONG cRefs; // Count of open PDEVs.
PSYSTEM_GDI_DRIVER_INFORMATION pGdiDriverInfo; // Driver module handle.
struct _LDEV *pldevNext; // link to the next LDEV in list
struct _LDEV *pldevPrev; // link to the previous LDEV in list
//
// DDI version number of the driver.
//
ULONG ulDriverVersion;
//
// Dispatch Table
//
PFN apfn[INDEX_LAST]; // Dispatch table.
} LDEV, *PLDEV;
extern
PLDEV
ldevLoadImage(
PWSZ pstrDriver,
BOOL bImage,
PBOOL pbAlreadyLoaded
);
VOID
ldevUnloadImage(
PLDEV pldev
);