Windows传真服务开发1/30Windows传真服务开发Windows传真服务开发2/30Windows传真服务开发(一)2009-09-2317:20第1章微软传真服务简介微软®传真服务是使网络用户可以从应用程序中收发传真的一种兼容TAPI(电话应用程序接口)的系统服务,此服务可在微软®Windows®2000及以后版本获得并具有以下特点:⑴传送传真⑵灵活的接收传真⑶存档已发送的传真文件⑷服务器和设备配置管理下表详细列出了可用来开发传真客户程序和扩展传真服务的应用程序接口(API)。传真服务客户API软件开发者能在客户应用程序里合并基本的传真函数,包括输出传真服务、查询和管理传真作业及传真设备。传真路由扩展API第三方的软件供应商通过定义输入传真路由扩展来扩展传真服务。此扩展提供了一种灵活的方法以连接接收传真的应用程序,如:打印、保存传真,变换传真图形图像到文本文件等。传真服务供应商API传真设备制造商提供符合国际电信联盟(ITU)T.30规范的非调制解调器电话设备支持的传真服务供应商。(微软调制解调器传真服务供应商提供的T.30传真协议支持带有传真服务调制解调器设备。)下图显示了传真服务的基本结构传真服务供应商和传真路由扩展动态链接库(DLLs)由微软®或设备制造商(OEM)提供。第2章传真服务客户应用程序接口(API)传真服务客户API允许客户在其应用程序中合并基本传真功能。此项技术适用于运行windows2000及更高版本的计算机。API包括win32函数和COM双重接口实现。本章第一部分构画使用传真服务客户API可以实现的任务及支持该功能所需的组件,同时也描述了传真服务的安全性,最后对传真端口、传送传真、传真封面和传真路由方法进行了简洁讨论。第二部分讨论win32和COM实现环境下传真程序的差别。还讨论了传真客户函数、COM双重接口以及下列有关的编程任务。⑴连接到传真服务器⑵传真服务器配置管理⑶传真设备管理⑷管理传真路由数据⑸发送传真⑹管理传真作业⑺释放传真资源⑻断开与传真服务器的连接注:在阅读本篇之前,应该对电话应用编程接口(TAPI)和微软®电话服务供应商(TSPI)有所熟悉,如果计划使用传真客户的COM实现,也应该熟悉COM(部件对象模型)和自动化编程概念。2.1、传真服务客户API简介微软®的传真服务为在本地网(LAN)上的客户提供传真服务。传真服务客户API允许开发者在其应用程序里合并服务并激活基本传真功能。传真服务客户API包括Win32函数Windows传真服务开发3/30接口和COM接口。⑴Win32环境Win32函数作为动态链接库WinFax.dll文件被实现。这是一种客户机/服务器实现模式,允许远程计算机上的传真客户与使用RPC的传真服务器进行通讯。客户机可以使用共享网络传真打印机访问输出传真服务,或者应用程序可以调用传真服务客户API中的函数连接一台远程传真服务器进行传真传送。⑵COM实现环境COM接口作为双重接口被VB和C/C++程序员接纳与实现。本文为两种编程语言均提供参考资料。下图显示了传真客户应用程序的概貌:要实现传真服务,必须在原代码文件中包含WinFax.h头文件,而要使用微软支持的传真客户COM实现则必须包含FaxCom.h头文件。2.1.1、传真服务客户API功能传真服务客户API使传真客户应用程序可以执行下列任务:⑴传送一个存储于计算机中的文档。应用程序能把文档作为一份传真传送到一个或广播到多个程序定义的接受者。⑵传送一张封面页。用户可以用传真传送一张封面页,该封面可为服务器上的公用封面页,也可以是一张个人的封面页。⑶通过将打印文档为设备上下文来传送活动文档。基于文档的应用程序可以阻止传真发送向导的显示。程序能够直接为传真客户图形设备接口(GDI)提供传送信息,并且将它打印到一个传真设备上下文来传送一份活动文档。⑷传送一份传真文档到活动调用。使用已经存在的输入链接线路来传送文档可以节约发送传真的费用,这就是所谓的“Faxback服务”。⑸使用传真发送向导发送活动文档。用户可以通过把文档打印到传真打印机来传送该文档。传真发送向导会收集用户的传送信息,而开发者则只需使用打印功能即可。⑹改变传真设备和传真服务器的配置。应用程序可提供配置管理或可使用微软管理控制台(MMC)插件组件中的传真配置服务管理应用程序来进行配置。2.1.2、传真服务客户API软件要求下列组件被要求支持传真服务客户API的功能:⑴传真服务(FaxSvc.exe)。支持传真服务的应用程序可以管理传真设备、配置数据、提供打印服务并收发传真文件。通过传真路由扩展传真服务也可以初始化和重发输出传真路由方法。⑵winFax.lab。包含传真服务客户API功能的静态链接库。⑶winFax.dll。包含传真服务客户API功能的动态链接库。此外,必须在源代码文件中包括WinFax.h头文件;而使用微软支持的传真客户COM实现,则须包括FaxCOM.h头文件。传真服务可以与使用RPC的网络客户机进行通讯。尽管不需要在每台客户计算机上安装传真服务,但服务一定要可以由RPC访问到客户计算机。2.1.3、传真服务可执行文件和相关文件下列表格描述了与传真服务相关的可执行文件、DLL和头文件。文件名描述FaxSvr.exe管理传真设备、配置数据、提供打印服务和收发传真文件的传真服务支持应用程序,FaxAdmin.dll微软管理控制台(MMC)插件组件之一的传真服务管理应用程序,提供配置Windows传真服务开发4/30管理功能。FaxMon.dll包含传真打印监视器的动态链接库WinFax.dll包含传真服务客户API功能的动态链接库WinFax.lib包含传真服务客户API功能的静态链接库FaxCom.dll传真服务客户API的COM接口FaxCover.exe传真封面页编辑应用程序FaxExt32.dll包含MAPI用户接口扩展的动态链接库FaxXp32.dll包含传真邮件传送功能的动态链接库。FaxRoute.dll包含微软®传真路由扩展的动态链接库。FaxDev.h包含传真服务供应商API原型的头文件。FaxRoute.h包含传真路由扩展API原型的头文件WinFax.h包含传真客户服务APIWin32环境原型的头文件FaxT30.dll包含微软®调制解调器传真服务提供商的动态链接库FaxDrv.dll传真打印机驱动程序动态链接库FaxUi.dll传真打印机驱动程序动态链接库2.1.4、设备和配置管理传真服务提供的传真服务管理应用程序是微软管理控制台(MMC)插件组件之一,传真客户程序可以进行配置管理或使用管理程序进行下列配置管理任务:⑴指定收发传真的器件⑵指定可在端口上执行的路由方法⑶配置全局服务数据2.1.5、传真端口本章中,传真端口始终被看作是一台传真设备以及与设备相联系的配置和与输入信息路由,传真服务为用户提供一个或多个传真端口作为传真传送的终点。传真虚拟设备也存在传真端口,这就意味着传真可以输出到连接至传真服务器的非严格物理设备终端。支持互联网传送传真的传真服务供应商即是使用虚拟传真设备的供应商的例子。2.1.6、传真端口的访问级别传真服务客户API允许应用程序查询和修改传真端口的配置数据。⑴Win32环境为了使用户能访问个端口的配置数据,传真客户应用程序在调用FaxOpenPort函数时,必须指定正确的传真端口访问级别。FaxOpenPort返回传真端口句柄并根据指定的访问级别打开端口。应用程序根据用户的需求和许可,可查询下列值:值意义PORT_OPEN_QUERY调用FaxGetPort、FaxEnumPort和FaxGetDeviceStatus函数查询传真端口信息的端口访问级别PORT_OPEN_MODIFY调用FaxSetPort函数修改传真端口配置的端口访问级别,默认为是与PORT_OPEN_QUERY访问级别联系的访问权限。除了要求端口用恰当的访问级别打开之外,传真服务也要求用户查询并且修改端口数据时,要有恰当的访问权限。要获得传真端口句柄和查询端口数据,用户必须获得FAX_PORT_QUERY许可;要修改端口数据,用户必须获得FAX_PORT_SET许可。传真客户应用程序可以调用FaxAccessCheck函数查询用户的访问权限。也可使用微软管理控制台(MMC)插件组件之一的传真服务管理应用程序来修改用户端口访问权限。⑵COM实现环境Windows传真服务开发5/30在应用程序调用修改FaxPort属性的方法之前,须调用IFaxPort::getCanModiFy方法(检索VB中FaxPort对象的CanModify属性)以确保客户有权修改端口的配置。2.1.7、传真客户程序的用户访问权限传真服务是一种安全的服务。在Win32环境下,用户必须拥有访问权限以成功调用某一传真客户程序函数,每次客户程序调用传真客户程序函数前服务均进行访问权限检查。应用程序可以由调用FaxAccessCheck函数来检查用户的访问权限,。如果使用微软®的COM实现,则此时传真客户应用程序无法获得该项功能。若客户没有执行特定任务的访问权限,则方法或函数失败且返回HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)。微软管理控制台(MMC)插件组件之一传真服务管理应用程序,为用户提供查询和修改作业访问权限、端口访问权限和全局配置数据访问权限。下面就详细叙述传真访问权限的内容。2.1.7.1、特定传真访问权限如果使用微软COM实现,则此时传真客户应用程序无法利用此项功能。传真服务客户API定义下列特定访问权限,为用户查询和管理传真作业、传真设备和传真文档提供安全保障。值意义FAX_CONFIG_QUERY允许在传真服务器级查询配置和路由方法数据FAX_CONFIG_SET允许在传真服务器级修改配置和路由方法数据FAX_JOB_MANAGE允许在程序中终止传真作业或改变传真作业队列的状态FAX_JOB_QUERY允许查询队列中和活动传真作业FAX_JOB_SUBMIT允许发送传真到一个或多个接收者FAX_PORT_QUERY允许在端口级查询配置、状态和路由算法数据;此访问权限有获取和关闭传真端口句柄的能力FAX_PORT_SET允许在端口级修改配置和路由方法数据;此权限有启用或屏蔽传真路由算法的能力2.1.7.2、通用传真访问权限如果使用微软COM实现,则此时传真客户应用程序无法利用此项功能。传真服务客户API定义下列通用传真访问权限,公共权限默认用户有特定传真访问权限:值意义FAX_READ包含由由特定访问权限FAX_JOB_QUERY、FAX_CONFIG_QUERY和FAX_PORT_QUERY认可的只读权限FAX_WRITE此访问等同于FAX_JOB_SUBMIT特定访问权限认可的许可。注意此权限不包括在端口或服务器级修改数据许可。FAX_ALL_ACCESS包括由下列特定访问权限认可的所有的读写许可:FAX_CONFIG_QUERY、FAX_CONFIG_SET、FAX_JOB_MANAGE、FAX_JOB_QUERY、FAX_JOB_SUBMIT、FAX_PORT_QUERY和FAX_PORT_SET2.1.7.3、函数要求的传真访问权下列表格列出了win32环境下,用户成功地调用某个传真客户函数后可获得的访问权限。访问权限函数FAX_CONFIG_QUERY(传真配置查询)FaxEnumGlobalRoutingInFoFaxGetConFigurationWindows传真服务开发6/30FaxGetLoggingCategoriesFAX_CONFIG_SET(传真配置设置)FaxSetConFigurationFaxSetGlobalRoutingInFoFaxSetLoggingCategoriesFAX_JOB_QUERY(传真作业查询)FaxEnumJobsFaxGetJobFaxGetPageDataFAX_JOB_SET(传真作业设置)FaxAbortFaxSe