Difference between revisions of "Printing"
Colin Finck (talk | contribs) (→Current Status and Roadmap: Marshall* is implemented now) |
|||
(39 intermediate revisions by 14 users not shown) | |||
Line 1: | Line 1: | ||
− | + | 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 == | |
− | + | * [[Colin Finck]] | |
− | |||
− | |||
− | |||
− | |||
− | + | == Current Status and Roadmap == | |
+ | {| class="wikitable" | ||
+ | ! colspan="2"| Base Components | ||
+ | |- | ||
+ | | winspool.drv || | ||
+ | '''Provides all Printer APIs to the application world'''<br> | ||
+ | [[File:Symbol support vote.png]] Implements OpenPrinter, StartDocPrinter, StartPagePrinter, WritePrinter, EndPagePrinter, EndDocPrinter, ClosePrinter to send RAW data to the printer<br> | ||
+ | [[File:Symbol support vote.png]] Implements EnumPrinters for enumerating printers<br> | ||
+ | [[File:Symbol support vote.png]] Implements AddJob, GetJob, EnumJobs for handling print jobs of a printer<br> | ||
+ | [[File:Symbol support vote.png]] Implements EnumPorts for enumerating the available printer ports<br> | ||
+ | [[File:Symbol support vote.png]] Implements EnumMonitors for enumerating the available port monitors<br> | ||
+ | [[File:Symbol support vote.png]] Implements EnumPrintProcessorDatatypes for enumerating the datatypes of a Print Processor associated to a Printer<br> | ||
+ | [[File:Symbol support vote.png]] Implements getting and setting the default printer (GetDefaultPrinter/SetDefaultPrinter)<br> | ||
+ | [[File:Symbol support vote.png]] Implements support for storing and getting additional printer data (GetPrinterData(Ex), SetPrinterData(Ex))<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs fully working GetPrinter/SetPrinter implementation for altering a printer's parameters<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs support for adding and deleting Printer Drivers (AddPrinterDriver(Ex), DeletePrinterDriver(Ex))<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs support for handling forms (aka paper sizes, AddForm, DeleteForm, EnumForms)<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs support for managing ports (AddPort(Ex), DeletePort, SetPort)<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs an implementation of the DocumentProperties API<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs support for adding and deleting connections to shared printers (AddPrinterConnection, DeletePrinterConnection)<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs support for Printer Change Notifications<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs all A functions implemented as counterparts to the W functions<br> | ||
+ | |- | ||
+ | | spoolsv.exe || | ||
+ | '''Central service that receives all printing requests from local and remote machines'''<br> | ||
+ | [[File:Symbol support vote.png]] Listens on a local RPC link and forwards calls to spoolss.dll. Evolves together with the other components.<br> | ||
+ | [[File:Symbol oppose vote.png]] 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'''<br> | ||
+ | [[File:Symbol support vote.png]] Forwards calls to one or multiple Print Providers. Evolves together with the other components.<br> | ||
+ | [[File:Symbol support vote.png]] Provides helper APIs (like Marshall* and PackStrings) to assist the development of all Printing components. | ||
+ | |- | ||
+ | ! colspan="2"| Print Providers | ||
+ | |- | ||
+ | | localspl.dll || | ||
+ | '''Manages all local printers and their queues. Most of the fun happens here!'''<br> | ||
+ | Available WDK Samples: pp<br> | ||
+ | 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)'''<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | | inetpp.dll || | ||
+ | '''Handles TCP/IP Network Printers'''<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | ! colspan="2"| Print Monitors | ||
+ | |- | ||
+ | | localmon.dll || | ||
+ | '''Manages the legacy local ports and the virtual FILE port'''<br> | ||
+ | Available WDK Samples: localmon<br> | ||
+ | [[File:Symbol support vote.png]] Fully implements support for COM, LPT and FILE ports<br> | ||
+ | [[File:Symbol support vote.png]] The ReactOS implementation can be used as a drop-in replacement for the Windows counterpart<br> | ||
+ | [[File:Symbol oppose vote.png]] 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)'''<br> | ||
+ | Available WDK Samples: pjlmon<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented, not sure if still needed | ||
+ | |- | ||
+ | | tcpmon.dll || | ||
+ | '''Manages IP-based ports for TCP/IP network printers'''<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | | usbmon.dll || | ||
+ | '''Manages virtual USB001, USB002, etc. ports for USB printers'''<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | ! colspan="2"| Print Processors | ||
+ | |- | ||
+ | | winprint.dll || | ||
+ | '''Alters the print job data to perform a datatype conversion to RAW or apply job-specific settings'''<br> | ||
+ | Available WDK Samples: GenPrint / winprint (NT4 DDK)<br> | ||
+ | [[File:Symbol support vote.png]] Supports the RAW datatype and forwards data without any modification.<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs to support TEXT and multiple versions of EMF.<br> | ||
+ | [[File:Symbol oppose vote.png]] Needs to support Multiple Copies, Collation, Reverse Printing, Duplex Printing, and N-up Printing.<br> | ||
+ | |- | ||
+ | ! colspan="2"| GDI DDI Printer Drivers | ||
+ | |- | ||
+ | | pscript5.dll<br>ps5ui.dll || | ||
+ | '''Implements a generic driver for PostScript printers and serves as the base for every PDF Printer out there'''<br> | ||
+ | Available WDK Samples: psprint (NT4 DDK only!)<br> | ||
+ | WINE also has a "wineps.drv", but it is based on a WINE-proprietary interface<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | | unidrv.dll<br>unidrvui.dll || | ||
+ | '''Implements the User-Mode v3 Printer Driver Model, used by every such driver to assist converting GDI calls to the printer language'''<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | | tty.dll<br>ttyui.dll || | ||
+ | '''Implements the Generic / Text-Only Printer Driver'''<br> | ||
+ | Available WDK Samples: tty, msplot<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | ! colspan="2"| WDM Printer Drivers | ||
+ | |- | ||
+ | | usbprint.sys || | ||
+ | '''Implements the generic USB Printer Class for sending data to all USB-connected Printers'''<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | ! colspan="2"| Setup | ||
+ | |- | ||
+ | | ntprint.dll<br>ntprint.exe || | ||
+ | '''Used for installing the Printer Driver Class'''<br> | ||
+ | [[File:Symbol oppose vote.png]] Entirely unimplemented | ||
+ | |- | ||
+ | ! colspan="2"| UI Components | ||
+ | |- | ||
+ | | compstui.dll || | ||
+ | I still have to figure out how important these components are. They obviously contain UI elements :) | ||
+ | |- | ||
+ | | printui.dll<br>printui.exe || | ||
+ | I still have to figure out how important these components are. They obviously contain UI elements :) | ||
+ | |- | ||
+ | ! colspan="2"| 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. | ||
+ | |} | ||
− | The DDK has some nice diagrams to illustrate what goes on. | + | == Resources == |
+ | * The DDK has some nice diagrams to illustrate what goes on and also some samples. | ||
+ | * [http://www.fengyuan.com/ Feng Yuan's book: "Windows Graphics Programming: Win32 GDI and DirectDraw"] | ||
+ | * [http://ceps.sourceforge.net/ CEPS (Cisco enterprise print system)] | ||
+ | * [http://msdn.microsoft.com/en-us/library/aa506518.aspx Print Devices Reference] | ||
+ | * [http://www.codeproject.com/useritems/wpa.asp Windows printing architecture] | ||
+ | * [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_62ia.asp Printing and print spooler] | ||
+ | * [http://www.microsoft.com/whdc/device/print/default.mspx Printing – Architecture and Driver Support] | ||
+ | * [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/graphics/hh/graphics/splarch_ae5e7e21-9184-4597-b7a5-177998682b14.xml.asp Introduction to Print Providers] | ||
+ | * [http://www.microsoft.com/resources/documentation/Windows/2000/server/reskit/en-us/Default.asp?url=/resources/documentation/Windows/2000/server/reskit/en-us/core/fnbe_prn_EOEW.asp More printing architecture] | ||
+ | * [http://www.microsoft.com/windows2000/technologies/fileandprint/print/default.asp Windows 2000 Print Services] | ||
+ | * [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/graphics/hh/graphics/drvarch_b2c30d51-4fe1-4c8e-9fa2-b1a80bba3597.xml.asp Printer graphics dll] | ||
+ | * [http://www.lprng.com/ LPRng, Berkeley based LPR print spooler] | ||
+ | * [https://www.reactos.org/blogs/reactos-printing-first-time ReactOS printing for the first time! 2015/07/25 by Colin Finck] | ||
− | + | [[Category:Documentation]] | |
− | + | [[Category:ReactOS Components]] | |
− | [ | ||
− | [ | ||
− | |||
− | [ | ||
− | [ | ||
− |
Latest revision as of 11:54, 13 February 2018
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
Resources
- The DDK has some nice diagrams to illustrate what goes on and also some samples.
- Feng Yuan's book: "Windows Graphics Programming: Win32 GDI and DirectDraw"
- CEPS (Cisco enterprise print system)
- Print Devices Reference
- Windows printing architecture
- Printing and print spooler
- Printing – Architecture and Driver Support
- Introduction to Print Providers
- More printing architecture
- Windows 2000 Print Services
- Printer graphics dll
- LPRng, Berkeley based LPR print spooler
- ReactOS printing for the first time! 2015/07/25 by Colin Finck