DrvDocumentEvent

INT DrvDocumentEvent(

    HANDLE hPrinter,

    HDC hdc,

    int iEsc,

    ULONG cbIn,

    PULONG  pbIn,

    ULONG cbOut,

    PULONG pbOut

   );

DrvDocumentEvent allows the printer driver UI to hook certain printer management calls.

Parameters

hPrinter
Handle that identifies the printer.
hdc
Handle to the device context
iEsc
Specifies the escape code that identifies the event to be handled. The escape code is packed in the LOWORD of iEsc, and the HIWORD contains zero. This parameter can be one of the following values:

Escape

Definition

DOCUMENTEVENT_CREATEDCPRE

User-mode GDI is calling DrvDocumentEvent before sending an application’s CreateDC call to kernel-mode GDI for processing.
pbIn points to an array of four ULONGs that are 0, pointer to the printer name, pointer to the input DEVMODE, and a Boolean value that specifies whether the call was CreateIC (TRUE) or CreateDC (FALSE).
The driver should return a pointer to the output DEVMODE in pbOut.

DOCUMENTEVENT_CREATEDCPOST

User-mode GDI is calling DrvDocumentEvent after kernel-mode GDI has processed an application’s CreateDC call.
pbIn points to the DEVMODE structure returned by a previous call to DrvDocumentEvent with an iEsc of DOCUMENTEVENT_CREATEDCPRE.
pbOut is not used.

DOCUMENTEVENT_RESETDCPRE

User-mode GDI is calling DrvDocumentEvent before sending an application’s ResetDC call to kernel-mode GDI for processing.
pbIn points to an input DEVMODE.
The driver should return a pointer to the output DEVMODE in pbOut.

DOCUMENTEVENT_RESETDCPOST

User-mode GDI is calling DrvDocumentEvent after kernel-mode GDI has processed an application’s ResetDC call.
pbIn points to the DEVMODE structure returned by a previous call to DrvDocumentEvent with an iEsc of DOCUMENTEVENT_RESETDCPRE.
pbOut is not used.

DOCUMENTEVENT_STARTDOCPRE
DOCUMENTEVENT_STARTDOC

User-mode GDI is calling DrvDocumentEvent before sending an application’s StartDoc call to kernel-mode GDI for processing.
pbIn points to an input DOCINFO structure.
pbOut is not used.

DOCUMENTEVENT_STARTDOCPOST

User-mode GDI is calling DrvDocumentEvent after kernel-mode GDI has processed an application’s StartDoc call.
pbIn points to a ULONG that specifies the ID of the current print job.
pbOut is not used.

DOCUMENTEVENT_STARTPAGE

User-mode GDI is calling DrvDocumentEvent before sending an application’s StartPage call to kernel-mode GDI for processing.
Neither pbIn or pbOut are used.

DOCUMENTEVENT_ENDPAGE

User-mode GDI is calling DrvDocumentEvent before sending an application’s EndPage call to kernel-mode GDI for processing.
Neither pbIn or pbOut are used.

DOCUMENTEVENT_ENDDOCPRE
DOCUMENTEVENT_ENDDOC

User-mode GDI is calling DrvDocumentEvent before sending an application’s EndDoc call to kernel-mode GDI for processing.
Neither pbIn or pbOut are used.

DOCUMENTEVENT_ENDDOCPOST

User-mode GDI is calling DrvDocumentEvent after kernel-mode GDI has processed an application’s EndDoc call.
Neither pbIn or pbOut are used.

DOCUMENTEVENT_ABORTDOC

User-mode GDI is calling DrvDocumentEvent before sending an application’s AbortDoc call to kernel-mode GDI for processing.
Neither pbIn or pbOut are used.

DOCUMENTEVENT_DELETEDC

User-mode GDI is calling DrvDocumentEvent before sending an application’s DeleteDC call to kernel-mode GDI for processing.
Neither pbIn or pbOut are used.

DOCUMENTEVENT_ESCAPE

User-mode GDI is calling DrvDocumentEvent before sending an application’s ExtEscape call to kernel-mode GDI for processing.
pbIn points to an array of three ULONGs that specify the nEscape, cbInput, and lpszInData parameters of the Win32 ExtEscape.
The driver should return cbOut and pbOut so that they correspond with the cbOutput and lpszOutData parameters to ExtEscape.

cbIn
Size in bytes of the buffer to which pbIn points.
pbIn
Pointer to the input data associated with iEsc, if any. See the description of iEsc for details.
cbOut
Size in bytes of the buffer to which pbOut points.
pbOut
Pointer to the output data associated with iEsc, if any. See the description of iEsc for details.

Return Value

DrvDocumentEvent returns one of the following values:

Return Value

Meaning

DOCUMENTEVENT_SUCCESS

The driver successfully handled the hooked call identified by iEsc.

DOCUMENTEVENT_UNSUPPORTED

The driver does not support the hooked call identified by iEsc.

DOCUMENTEVENT_FAILURE

The driver supports the hooked call identified by iEsc, but failed to handle the request.

Comments

A printer driver UI can optionally implement DrvDocumentEvent to hook certain printer management calls made by an application to GDI. This enables the printer driver’s UI module to process data in user mode before GDI passes the call to kernel-mode, and to post-process the data returned from kernel-mode before GDI returns it to the application. DrvDocumentEvent is executed in the context of the application’s process.

GDI calls DrvDocumentEvent before sending the application call on to kernel-mode GDI when the escape code definition has no suffix or is suffixed with PRE. For those escape code definitions suffixed with POST, GDI calls DrvDocumentEvent after the call is processed by kernel-mode GDI but before the results are returned to the application.

A FAX driver can implement DrvDocumentEvent so that it displays a user interface dialog box upon a call to the Win32 StartDoc routine.