2024年3月23日发(作者:)
打印机驱动程序的基础知识
1. 什么是打印机驱动?
打印机驱动是一种基于操作系统的DDI接口而开发的,用于将各种Application数据翻
译成打印机能解释的数据,并输出到打印机而开发的程序。
2. 为什么要做打印机驱动?
打印机的语言有很多种(如ps,lips,pcl等),各个厂商开发的打印机所能解释的打印
机数据也是各不相同的。如果没有打印机驱动,那么每个Application就需要针对每一种打
印机开发不同的输出程序,这显然是不可能的。为解决该问题,操作系统就制定了一套机制
DDI(device driver interface),基于这套机制,Application无需考虑输出设备的具体信息
(如打印机语言等),只需要调用相应的GDI(graphics device interface)函数,就可以将数
据输出到不同的输出设备上,也就是说设备无关的。同时GDI会调用OS提供的相应的DDI
接口,而这些DDI接口的实现,就是打印机驱动。在打印机驱动内部,需要针对不同的设备,
作相应的处理,从而减少了Application开发输出程序的负担。
3. Application,GDI,打印机驱动之间的关系
Application
graphics requests
GDI32
User Mode
Kernel Mode
Graphic Engine(GDI)
DDI CallGDI Call
Graphics Driver
Graphics Driver and GDI Interaction
在上面的图中,需要注意的是Application是不能直接调用DDI接口的,必须通过调用
GDI函数来实现对DDI接口的调用。
4. 打印机驱动的结构
打印机驱动主要由两大部分组成,即图形部分和界面部分。
图形部分的功能为通过GDI将打印机参数传给Application,同时将GDI传过来的数据
翻译成打印机可以解释的数据,并且发送到print spooler。其流程结构如下图:
Application
Spool
File
Spooler
EMF Print
Processor
Port
Monitor
Write Printer
GDI User_Mode
Client
Yes
User_Mode Printer Graphics
DLL
Output Format =
EMF?
No
RAW data stream
User Mode
Kernel Mode
GDI Rendering
Engine(GRE)
Kernel_Mode Port
Driver Stack
Callbacks to GRE
Printer
Print Job Data Flow, Using a User-Mode Printer Graphics DLL
上面是USER MODE打印数据流程,与之相对的也有KERNEL MODE打印数据流程,
这个以后再说。
图形部分内部流程的详细说明:
DrvCopyBits
DrvEnablePDEV
(DEVMODE and registry
-> GDIINFO,DEVINFO)
(Entrance)
DrvEnableDriverDrvCompletePDEV
DrvStartDoc
(Start Job Control
Command)
DrvStartPage
(Start Page Control
Command)
Banding
DrvBitBlt
DrvStretchBlt
DrvRealizeBrush
(No Band)
DrvStartBanding
DrvEnableSurface
(Render a print job)
DrvPaint
Render Functions
DrvDisableDriver
(Exit)
DrvResetPDEV
DrvNextBand
(Last Band?)
(Yes)
DrvDisableSurface
DrvSendPage
(End Page Control
Command)
DrvDisablePDEV
DrvEndDoc
(End Job Control
Command)
DrvStrokePath
其中的DDI接口在DDK帮助文档中都有详细的说明。
界面部分的功能为提供用户界面,用户可以根据自己的需要通过该界面设置不同的打印
参数,同时提供一个spooler为通知驱动打印相关的系统事件而能够调用的接口。
(No)
DrvFillPath
DrvStrokeAndFillPath
DrvDitherColor
DrvTextOut
DrvEscape
界面部分函数的说明:
DrvDocumentPropertySheet
s
DrvDevicePropertySheets
(Doucument Property Sheets function)
DrvDocumentEvent
(Device Property Sheets function)
DrvDriverEvent
DrvDeviceCapabilities(Printer’s Capabilities function)
DrvQueryJobAttributes
DrvPrinterEvent
(Driver Install functions)
DevQueryPrintEx
DrvUpgradePrinter
DrvConvertDevMode
(Other functions,OPtional)
其中的DDI接口在DDK帮助文档中都有详细的说明。


发布评论