Windows下扫描仪WIA驱动的实现
2015-01-16翁省辉喻武龙邓世强
翁省辉,喻武龙,邓世强
(北京理工大学 珠海学院,广东 珠海 519085)
WIA是Windows image acquisition的简称,当前可用版本是 WIA 2.0。 它是 Windows Millennium Edition(Windows Me)或者更高版本的 Windows系统中提供的数字图像获取服务[1]。它是Windows系统中扫描仪获取图像的常用方式之一[2]。
1 WIA的体系结构
WIA是使用进程外(out of process)服务实现的 com组件,和大多数进程外服务程序不同的是,WIA通过提供自己的数据传送机制(iwiadatatransfer接口),避免了图像数据传送过程中的性能损失[3]。
WIA的体系结构如图1所示[4]。
WIA整体分为三层,由上而下分别是UI层,服务层以及驱动层。UI层与服务层之间主要通过COM Interface联系,而服务与驱动层则主要通过Win32 API联系。驱动层可理解为系统的USBSCAN.SYS;中间的服务层为User Mode的动态库文 件, 它 通 过 CreateFile,ReadFile,WriteFile和 Device IOControl来实现与设备进行通讯。

图1 WIA的体系结构Fig.1 Architecture of WIA
WIA Driver实际实现中分为两种:MiniDriver,MiniDriver。本文将分别介绍它们的实现。
2 MiniDriver
2.1 MiniDriver的体系结构
MiniDriver分为两个层次:WIA Service InterfaceLayer和Device Communication Layer, 其 中 Device Communication Layer就是 Low-Level driver,而 WIA Service InterfaceLayer则是实现的重点。
2.2 MiniDriver的实现
MicroDriver仅以动态库形式实现3个接口函数,而MiniDriver则不同,它必须以COM Interface的形式实现。
MiniDriver有一个很重要的概念:Root Item和Child Item。Root Item代表设备本身,Child Item可视为设备支持的属性,例如扫描仪支持TPA,Endorse,则它们可以被视为一个Child Item。MiniDriver初始化时需要首先创建Root Item的属性,然后依次创建Child Item的属性[5]。
MiniDriver在一开始初始化首先调用drvInitializeWia,须依次创建设备的Properties。
首先需要组织当前设备的特性资料,比如支持的数据格式(True Color之类)、数据传输方式、压缩模式以及解析范围等。然后调用drvInitItemProperties来初始化Child Item的Capabilities及 Properties。
初始化完成之后,便可以接受用户的设定了,诸如扫描区域、色彩类型以及分辨率等。它主要是通过drv Write Properties来实现的,如图2所示。……
