Filter-based Print Drivers: Overview
Outline MetroDrv Architecture and Data Flow Filter Pipeline Implementation MetroDrv Filter Development Discussion Call to Action
Goals Define MetroDrv and the key components Understand information flow Communicate the requirements for developing MetroDrv drivers Windows Services IHV Supplied Components Present a set of sample filters for a MetroDrv driver Developed by Software Imaging
What is a MetroDrv driver? Extension of the Version 3 driver architecture Consumes Metro Spool Files in an extensible manner Sibling of the Unidrv and PScript core drivers Compatible with Windows XP and later Enabler for document and color workflow scenarios Persist richness of Avalon and Metro on paper Return to WYSIWYG High, wide and deep color from application to device
MetroDrv Driver Components Configuration Module Vendor defined Version 3 configuration module for the filter pipeline processing capabilities and device capabilities Requirements Support Version 3 driver configuration: Unidrv, PScript, monolithic configuration module PrintTicket/PrintCapabilities support GDI to Metro Converter Microsoft defined Version 3 driver rendering module Performs necessary conversions to support Win32 applications Processing Module (Filter Pipeline) Vendor defined processing module that processes Metro Reach Package content into the output PDL Filter Pipeline Configuration File Vendor defined setup file that describes the filters in the pipeline, including ordering, input and output data types
MetroDrv Driver Data Flow Provided by: Microsoft ISV IHV MetroDrv Driver Version 3 Driver Win32 App WinFX App Config Module/ Plug-in Conversion Render Module Filter Pipeline Filter 1 Filter N Metro
Filter Pipeline: Components and Interfaces
Filter Pipeline Outline Supports multiple vendor supplied filters Print Processing Filters Color conversion Filters Rendering Filters Setup by Filter Pipeline Configuration File XML file Defines filters in the pipeline and input/output data types Implicitly defines data processing order Public Interfaces implemented by vendors IPrintPipelineFilter IInterFilterCommunicator
Filter Pipeline Architecture Overview Service: PrintFilterPipelineSvc NT Authority\Local Service Normal non-admin user SeImpersonatePrivilegeSeCreateGlobalPrivilegeSeChangeNotifyPrivilege Controls Filter Creation and Communication Scheduler Inter Filter Communicator Property Bag Handle notifications from / to spooler
Filter Pipeline Architecture Overview PipelineManager PrintFilterPipelineSvc Control Tree Filters Reader/Writers Scheduler “Token” Value “Notify”“IDrvNotify” Property Bag N-UP Transparency Watermark Filter Pipeline Control Logic Provided by: Microsoft ISV IHV
Filter Pipeline Configuration File <Filter dll= “FirstFilter.dll" clsid= "{15e81b e9-a f3f09e9}" name= “Filter 1: NUp Filter" input= "{d4bb258b-ff10-4af0-b67e-bde41c5e0e1c}" output= "{f4873ed9-a87c-48e3-b6dd-f6e182fe97b8}“ /Filter> <Filter dll= “SecondFilter.dll" clsid= "{8c89b2aa-a151-4f94-92bf-7beaee679eab}" name= “Filter 2: Rendering Filter" input= "{f4873ed9-a87c-48e3-b6dd-f6e182fe97b8}" output= "{f50b8346-7a10-4d24-945c-1a2ca6fe9a11}“ /Filter>
Filter Interface interface IPrintPipelineFilter : IUnknown { HRESULT SetReadersWriters( IInterFilterCommunicator*pFilterCommunicator, IPrintPipelinePropertyBag*pIPropertyBag ); HRESULT ShutdownOperation( void ); HRESULT StartOperation( void ); }
Filter Communicator Interface interface IInterFilterCommunicator : IUnknown { HRESULT RequestReader( const wchar_t*pszStream, EPrintPipelineStreamAccessModeaccessMode, REFIIDiidRepresentation, REFIIDiidResultReader, void**ppReader ); HRESULT RequestWriter( const wchar_t*pszStream, EPrintPipelineStreamAccessModeaccessMode, EPrintPipelineStreamChangeModechangeMode, REFIIDiidRepresentation, REFIIDiidResultWriter, void**ppWriter ); }
Inter-Filter Communicator Details Filter Pipeline Manager Inter-FilterCommunicator FixedDocument Writer Metro Reader Stream FixedDocument Metro Spool File Inter-FilterCommunicator Stream Writer FixedDocument Reader Filter 1 Filter 2 … Filter N Provided by: Microsoft IHV
PrintFilterPipelineSvc Managed Code WinFx Printing Support Reach and Serialization Services Metro Spool File Winspool.drv and Extensions Spooler PrintQueue METR O Metro Reach Processing (Rich Content Structure) Scheduler FilterPipelinePrxy Port WinFX App Pipeline Manager Selector WaterMark Renderer N-Up Filter Pipeline Data Flow - Longhorn Provided by: Microsoft ISV IHV Unmanaged Code
PrintFilterPipelineSvc Managed Code WinFx Printing Support Reach and Serialization Services Metro Spool File Winspool.drv and Extensions Spooler PrintQueue METR O Scheduler MS Print Processor Port WinFX App Pipeline Manager Selector WaterMark Renderer N-Up Filter Pipeline Data Flow - Downlevel
Consuming Metro in a Driver Consuming Metro in a Driver Software Imaging
Outline Introduction Filter essentials Building a reusable filter Building functionality within the pipeline Sample Filter Pipeline
Software Imaging - Who are we? Specialists in printing and imaging technologies Founded 1989 Over 80 million drivers shipped worldwide Offices in North America, Japan and Europe Unidrv specialists and developers Developing solutions for the industry MetroDrv host drivers MetroDrv wide-gamut color printing (scRGB)
Filter Essentials: Filter Types Document modifier e.g. booklet printing, watermark Markup modifier e.g. color conversion Renderer e.g. Raster conversion, print output formatting Markup “simplifier” Handling unsupported features “Value add” e.g. print preview, status monitor, accounting, archiving
Filter Essentials: Handling the PrintTicket Every filter is interested in the PrintTicket (PT)! Three levels of PT: Job, Document, Page Validation of the Print Ticket Validate job-level PT Merge with default PT and validate For each document in the job Merge doc-level PT with job-level PT and validate For each page in the document Merge page-level PT with doc-level PT and validate Extract filter-relevant feature options
Building a Reusable Filter Metro in, Metro out Rely on the PrintTicket for control No device assumptions or dependencies Example: 2-up filter
Building Functionality Within the Pipeline Combining filters to build features Need inter-filter communication Could be PrintTicket Can use property bag Example: Booklet Page re-order filter 2-up filter
Sample Filter Pipeline
Call To Action Understand Windows codenamed “Longhorn” Print Architecture Identify strategic devices to target the Metro Print Path Identify extension scenarios Understand the Windows Color System Review the “Metro” v.7 specification and provide feedback to Start implementation with Beta 1! Convert GDI/DDI based drivers to MetroDrv drivers Explore the sample filters in Longhorn Beta 2 WDK Consider on-device rendering with a RIP implementation A reference implementation is planned for Longhorn Beta 2 tools
Additional Resources: Web Web resources WS-Devices Profile: lt.aspx?pull=/library/en-us/dnglobspec/html/devprof.asp Printer Working Group WHDC Printing home page: WHDC Still Imaging / WIA home page: Color Use Cases mspx mspx “Writing Effective Use Cases”, Alistair Cockburn, ISBN
Additional Resources: Other For developer print questions: For developer scan questions: For developer color questions: Developer kit references: SDK for Print Schema User Manual and Keywords: us/printschema/PrintSchema/Overviews/PrintSchema_entry.asp us/printschema/PrintSchema/Overviews/PrintSchema_entry.asp WDK for PT/PC interfaces: Reference\Printer Driver and Spooler Component Interfaces\Printer Driver Functions and Structures\Unidrv and Pscript Interfaces\Methods for Print Ticket Providers and Consumers WinFX Print System Object Documentation available in WinFX Beta 1 SDK
© 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.