Windows Server 2008: Client-side Rendering

It's Day Ten of our Windows Server 2008 series.  Seventeen Days to go.  Today we'll be talking about Client-Side Rendering. Client-Side Rendering (CSR) is a new feature that allows print jobs to be fully rendered on the client when targeting a shared printer hosted on a Windows Vista or Windows Server 2008 computer acting as […]

It's Day Ten of our Windows Server 2008 series.  Seventeen Days to go.  Today we'll be talking about Client-Side Rendering.

Client-Side Rendering (CSR) is a new feature that allows print jobs to be fully rendered on the client when targeting a shared printer hosted on a Windows Vista or Windows Server 2008 computer acting as a print server.  After being rendered on the client, the print job is sent to the print server for queuing and printing by the print spooler without additional server-side rendering.  This feature is enabled by default on Windows Vista and Windows Server 2008, however it is not available on earlier versions of Windows.

With CSR enabled, the print job is first spooled as EMF on the client to provide quick return to the application.  The client printer driver then converts the spooled EMF data to the Page Description Language (PDL), such as PCL or Postscript, for the printer.  The RAW-format PDL data is then sent to the print server for queuing and printing by the print spooler.  The RAW data type is device-specific and indicates to the remote Print Spooler that the print job has been rendered by the printer driver.  The remote spooler can then send RAW data streams directly to the printer, or it can store them in spool files.

In addition to moving the processing requirements of print-job rendering from the server to the client, improving print server performance and scalability, CSR provides additional advantages such as:

  • Elimination of driver mismatches.  Because the computer that spooled the print job also rendered the EMF-format data, there are no inconsistencies that may be caused by client / server print driver mismatches.
  • Support for Offline Printing.  Print jobs targeted at a remote printer may be spooled even if there is no physical connection to the print server that hosts the printer.  When the client computer establishes a connection to the print server, the rendered print job is automatically printed.

Client-Side Rendering functionality is implemented in win32spl.dll, which is the network print provider.  Offline printing functionality is implemented in printcom.dll which provides the online / offline notifications to win32spl.dll.  The client-side rendering components, printcom.dll and win32spl.dll, are both loaded in the Print Spooler service, spoolsv.exe, when it is started.

There are some registry values to consider when dealing with CSR.  When a shared network printer connection is created on a Windows Vista or Windows Server 2008 "client", the connection is created in the same registry location, using the same naming convention used in Windows Server 2003: HKEY_CURRENT_USER\Printers\Connections\<connection>.  The <connection> subkey in the registry is the name of the print server and printer, in the following format: ,,<servername>,<printersharename>.  There are some additional values to be aware of in the <connection> subkey:

  • DefaultDevMode: This is the per-user devmode for this connection.  The DevMode data structure contains information about the device initialization and environment of a printer
  • GuidPrinter: this is a random Globally Unique Identifier (GUID) assigned to the remote printer connection on the client.  Each connection to a shared network printer creates a GuidPrinter that is used to identify the printer as a remote printer.  Print jobs sent to a GuidPrinter are rendered as if they are being printed to a local printer but are then sent to the print server using the Client Side Port monitor (see below) instead of being written to a local port.
  • LocalConnection: This is set to 1 if this is a locally created printer, as opposed to a "pushed" printer.
  • Provider: The Print Provider for this printer connection.  Typically this will be win32spl.dll
  • RemotePrinterCache: This is a binary blob that contains the configuration of the print driver on the server the last time that the client printed to this printer connection
  • Server: name of the server hosting the shared printer

Full Article

Microsoft, WS2008, Windows Server 2008, Client, Architecture, Printing, Knowledgebase