The Print Monitor API

Port and language monitor function prototypes and structure definitions can be found in the Windows NT DDK winsplp.h include file.

The following table contains the print monitor API and implementation requirements on a per-monitor basis. InitializePrintMonitor and DllEntryPoint are the only two functions that a monitor's DLL must export; the spooler accesses all other functions through the function table returned by InitializePrintMonitor. For this reason, except for InitializePrintMonitor and DllEntryPoint, the names of all other required functions are pseudonames that can, in fact, have any name that the monitor developer wishes.

Implement?*
Function Name Description PM LM LMPM
InitializePrintMonitor Initializes the print monitor. X X X
DllEntryPoint Entry function; called when the spooler loads a monitor's DLL with the Win32 LoadLibrary function. X X X
OpenPort Opens a port for a newly connected printer. X X
OpenPortEx Opens a port for a newly connected printer. X X
ClosePort Closes a port when there are no printers connected to it. X X X
StartDocPort Performs the tasks required to start a print job on a port. X X X
WritePort Writes data to a printer port. X X X
ReadPort Reads data from a printer port. X X X
EndDocPort Performs end-of-print-job tasks on a port. X X X
AddPort or AddPortEx Creates a port. X X
DeletePort Deletes a port. X X
EnumPorts Enumerates the ports available for printing on a server. X X
ConfigurePort Performs port configuration. X X
SetPortTimeOuts Sets a time-out value on an open port. o o
GetPrinterDataFromPort Gets data from a bidirectional printer by providing IEEE 1284 support. o o o
* X = required; – = do not implement, o = optional

To perform the basic requirements of monitoring printers connected to ports and sending print job data through ports, all print monitors must implement the following functions:

InitializePrintMonitor StartDocPort
DllEntryPoint WritePort
OpenPort or OpenPortEx ReadPort
ClosePort EndDocPort

For information on DllEntryPoint, see the Win32 SDK.

Port monitors and LMPMs are required to implement the print monitor functions that perform port management. These functions are:

AddPort or AddPortEx EnumPorts
DeletePort ConfigurePort

Because port management is the port monitor's responsibility, a pure language monitor should not implement any of these routines.

The remaining functions of the print monitor API, SetPortTimeouts and GetPrinterDataFromPort, can be optionally implemented by port monitors and LMPMs. Pure language monitors can implement GetPrinterDataFromPort, but should not implement SetPortTimeouts because it is a port management function.