ReactOS Trunk has first Printing Support since the "colins-printing-for-freedom" branch has been merged in r73039 on October 26, 2016.
This page shall track all involved components, their current status and the next steps that need to be done. Many components still need research, so your help is welcome!
Contacts
Current Status and Roadmap
Base Components
|
winspool.drv |
Provides all Printer APIs to the application world
Implements OpenPrinter, StartDocPrinter, StartPagePrinter, WritePrinter, EndPagePrinter, EndDocPrinter, ClosePrinter to send RAW data to the printer
Implements EnumPrinters for enumerating printers
Implements AddJob, GetJob, EnumJobs for handling print jobs of a printer
Implements EnumPorts for enumerating the available printer ports
Implements EnumMonitors for enumerating the available port monitors
Implements EnumPrintProcessorDatatypes for enumerating the datatypes of a Print Processor associated to a Printer
Implements getting and setting the default printer (GetDefaultPrinter/SetDefaultPrinter)
Implements support for storing and getting additional printer data (GetPrinterData(Ex), SetPrinterData(Ex))
Needs fully working GetPrinter/SetPrinter implementation for altering a printer's parameters
Needs support for adding and deleting Printer Drivers (AddPrinterDriver(Ex), DeletePrinterDriver(Ex))
Needs support for handling forms (aka paper sizes, AddForm, DeleteForm, EnumForms)
Needs support for managing ports (AddPort(Ex), DeletePort, SetPort)
Needs an implementation of the DocumentProperties API
Needs support for adding and deleting connections to shared printers (AddPrinterConnection, DeletePrinterConnection)
Needs support for Printer Change Notifications
Needs all A functions implemented as counterparts to the W functions
|
spoolsv.exe |
Central service that receives all printing requests from local and remote machines
Listens on a local RPC link and forwards calls to spoolss.dll. Evolves together with the other components.
Needs to listen for remote RPC calls on the network too and handle them appropriately.
|
spoolss.dll |
Component used by spoolsv.exe to determine the Print Provider(s) that shall handle a call
Forwards calls to one or multiple Print Providers. Evolves together with the other components.
Provides helper APIs (like Marshall* and PackStrings) to assist the development of all Printing components.
|
Print Providers
|
localspl.dll |
Manages all local printers and their queues. Most of the fun happens here!
Available WDK Samples: pp
This component evolves together with the other components and the ToDo list is mostly the same as for winspool.drv.
|
win32spl.dll |
Calls a remote Spool Server to forward the calls to (Windows Printer Sharing)
Entirely unimplemented
|
inetpp.dll |
Handles TCP/IP Network Printers
Entirely unimplemented
|
Print Monitors
|
localmon.dll |
Manages the legacy local ports and the virtual FILE port
Available WDK Samples: localmon
Fully implements support for COM, LPT and FILE ports
The ReactOS implementation can be used as a drop-in replacement for the Windows counterpart
Original Windows Local Port Monitor also implements support for IrDA Printers, but I don't think this has any priority
|
pjlmon.dll |
Language Monitor for interpreting and acting according to the HP PJL (Printer Job Language)
Available WDK Samples: pjlmon
Entirely unimplemented, not sure if still needed
|
tcpmon.dll |
Manages IP-based ports for TCP/IP network printers
Entirely unimplemented
|
usbmon.dll |
Manages virtual USB001, USB002, etc. ports for USB printers
Entirely unimplemented
|
Print Processors
|
winprint.dll |
Alters the print job data to perform a datatype conversion to RAW or apply job-specific settings
Available WDK Samples: GenPrint / winprint (NT4 DDK)
Supports the RAW datatype and forwards data without any modification.
Needs to support TEXT and multiple versions of EMF.
Needs to support Multiple Copies, Collation, Reverse Printing, Duplex Printing, and N-up Printing.
|
GDI DDI Printer Drivers
|
pscript5.dll ps5ui.dll |
Implements a generic driver for PostScript printers and serves as the base for every PDF Printer out there
Available WDK Samples: psprint (NT4 DDK only!)
WINE also has a "wineps.drv", but it is based on a WINE-proprietary interface
Entirely unimplemented
|
unidrv.dll unidrvui.dll |
Implements the User-Mode v3 Printer Driver Model, used by every such driver to assist converting GDI calls to the printer language
Entirely unimplemented
|
tty.dll ttyui.dll |
Implements the Generic / Text-Only Printer Driver
Available WDK Samples: tty, msplot
Entirely unimplemented
|
WDM Printer Drivers
|
usbprint.sys |
Implements the generic USB Printer Class for sending data to all USB-connected Printers
Entirely unimplemented
|
Setup
|
ntprint.dll ntprint.exe |
Used for installing the Printer Driver Class
Entirely unimplemented
|
UI Components
|
compstui.dll |
I still have to figure out how important these components are. They obviously contain UI elements :)
|
printui.dll printui.exe |
I still have to figure out how important these components are. They obviously contain UI elements :)
|
GDI / Win32k Parts
|
? |
GDI-based Printing functions like StartDoc and Printer DCs need to be supported. This still needs general investigation, which components are involved and what functions need to be implemented.
|
Resources