电子工程师的网站
首 页 |  新闻资讯 | 最新产品 | 解决方案 | 技术参数
设计应用
电路图 | 技术资料 | 芯片资料 | 技术论坛
  现在位置: 首页 > 设计应用 > 接口/总线/驱动 > 详细信息
接口/总线/驱动:基于Windows2000的过滤器驱动程序设计
来源:   时间: 2007-5-27 13:33:09    
WDM(Windows Driver Mode)是微软公司为Windows的驱动程序设计的一种通用的驱动程序模型。相比以前的KDM和VXD来说,他的性能更高、系统之间移植更加方便。所以,随着系统的升级,WDM已经成为Windows 2000系统下驱动程序开发的主流。作为WDM模型之中一类特殊的驱动程序,过滤器驱动程序(Filter driver)可以在不更改现有驱动程序的情况下,方便地修改、增加现有驱动程序的功能。特别是对于Windows 2000已经提供了通用驱动程序的硬件设备,通过编写过滤器驱动程序,可以以较小的代价扩展硬件现有的功能。因此具有很强的实际应用价值。

1 Windows 2000 I/O请求处理结构

如图1所示,Windows 2000是分态的操作系统。用户应用程序运行在用户态,操作系统代码(如系统服务和设备驱动程序)在核心态下运行。用户态程序只能调用Win32子系统提供的API来同设备交互,当请求传递到I/O管理器时,他进行必要的参数匹配和操作安全性检查,然后由这个请求构造出合适的IRP(IO Request Package,I/O请求包),并把此IRP传递到适当的驱动程序去,并给应用程序一个消息,通知这次I/O操作还没完成。驱动程序一般通过硬件抽象层来和硬件交互,从而完成I/O请求工作。驱动程序完成I/O操作后,他将调用一个特殊的内核服务例程来完成IRP。这时,I/O管理器把数据和结果返回给Win32和用户应用程序。

2 WDM驱动程序模型体系结构

Windows驱动程序模型重新定义驱动程序分层使用了如图2的层次结构。图中左边是一个设备对象堆栈。设备对象是系统为帮助软件管理硬件而创建的数据结构。一个物理硬件可以有多个这样的数据结构。处于堆栈最底层的设备对象称为物理设备对象PDO(Physical Device Object),代表了设备和总线之间的连接。在设备对象堆栈的中间的对象称为功能设备对象FDO(Functional Device Object),代表了设备的功能。在FDO的上面和下面还会有一些过滤器设备对象FIDO(Filter Device Object)。位于FDO上面的过滤器设备对象称为上层过滤器,位于FDO下面(但仍在PDO之上)的过滤器设备对象称为下层过滤器。

总线驱动程序负责枚举他的总线,这意味着发现总线上的全部设备和检测设备何时被添加或删除并为每个设备创建一个PDO。功能驱动程序知道如何控制设备的主要功能,他分层在总线驱动程序的上面。功能驱动程序创建一个功能设备对象,放在设备栈中。对总线上的所有设备,总线过滤驱动程序被加在总线驱动程序之上;设备过滤驱动程序仅对特定的设备添加。上层的过滤驱动程序在功能驱动程序之上,而下层过滤驱动程序在功能驱动程序之下。这种层次结构可以使I/O请求过程更加明了。I/O管理器发送的IRP,先被送到设备堆栈的上层过滤器驱动程序(FIDO),他可以根据要求决定IRP的处理方式,是沿着设备栈继续向下传,或者是做一些额外的处理。依次,每一层驱动程序都可以决定如何处理IRP。高层的驱动程序可以把请求划分成更简单的请求并传递给下层驱动程序。中间层次的驱动程序进一步处理请求,将一个IRP中的请求划分为若干个小的请求并传给下层驱动程序。最后,最低层的驱动程序与硬件打交道。因此一些IRP在到达总线程序之前,在设备栈传递过程中可能就被过滤掉了。 3 过滤器驱动程序

过滤驱动程序是一种中间驱动程序,他位于其他的驱动程序层次之间。过滤驱动程序可以监视、拦截和修改IRP流,在不影响其他驱动程序的前提下提供一些附加的功能。他的功能可分为:

(1)利用过滤器驱动程序修改现有功能驱动程序的行为而不必重新编写功能驱动程序。

(2)上层过滤器驱动程序在功能驱动程序之前看到IRP,可以很方便地为用户提供额外的特征。还可以修正功能驱动程序或硬件存在的毛病或缺陷。

(3)下层过滤器驱动程序在功能驱动程序要向总线驱动程序发送IRP时看到IRP。可以监视、拦截、修改功能驱动程序要执行的总线操作流,截获数据,进行必要的数据处理,再将处理过的数据传递下去,实现一定的数据处理功能。 (4)下层过滤器驱动程序可以实现驱动程序的总线无关性,使功能驱动程序完全独立于总线结构而不直接与设备对话。针对不同的总线编写不同的下层过滤器,每个下层过滤器对应一个总线类型。当功能驱动程序需要与硬件对话时,他只需向相应的下层过滤器驱动程序发送IRP即可。

4 过滤器驱动程序设计

过滤器驱动程序设计与功能驱动程序相似。这里限于篇幅主要讨论一下过滤器驱动程序设计中与功能驱动程序相区别的几个关键的技术要点。

4.1 DriverEntry例程

DriverEntry例程是驱动程序的人口点。当I/O管理器装入驱动程序时,他调用DriverEntry例程用来初始化驱动程序范围的数据结构和资源,包括输出该驱动程序的其他人口点,初始化该驱动程序使用的特定对象,并设置驱动程序系统资源。与功能驱动程序相区别的是:他必须为每种类型的IRP都安装派遣函数,而不仅仅只是其希望处理的IRP。

4.2 AddDevice例程

AddDevice函数的基本职责是创建一个设备对象并把他连接到以物理设备对象PDO为底的设备堆栈中,并负责设备对象初始化。与功能驱动程序相区别的是:过滤驱动程序创建的设备对象可能是2种,一种是不命名的过滤设备对象,过滤器工作时把这个无名的设备对象连接到以物理设备对象PDO为底的设备堆栈中。一种是为了和用户程序通信而创建的命名的设备对象并不连接到以物理设备对象PDO为底的设备堆栈中。命名可以采用2种方法:第一种方法是采用可显示的"硬编码"符号链接名,用户态程序必须把设备名硬编码到源代码中;另外一种方法是使用设备接口,每个设备接口是由一个全局惟一标志符GUID标志。设备注册为一个特定的设备接口就创建了一个符号链接。

相关步骤如下:

(1)调用IoCreateDevke创建过滤设备对象,并建立一个私有的设备扩展对象。

(2)寄存一个或多个设备接口,以便应用程序能知道设备的存在。另外,还可以给出设备名并创建符号连接。

(3)初始化设备扩展和设备对象的F1ag成员。

(4)调用IOAttachDevkeToDeviceStack函数把新设备对象放到堆栈上。

具体实现程序如下:

NTSTATUS AddDevice (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo)
{
PDEVICE_OBJECT fido=NULL;
//创建没有设备名的过滤设备对象
NTSTATUS status=IoCreateDevice (DriverObjeot,sizeof (DEVICE-EXTENSION),
NULL,FILE_DEVICE_UNKNOWN,0,FALSE,&fido);
if(!NT_SUCCESS(status)) return status;
//初始化设备扩展和设备对象的Flag成员
PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fido->DeviceExtension;
pdx->DeviceObject=fido;
pdx->Pdo=pdo;
pdx->eDeviceType =FILTER;
//把没有设备名的设备对象放到堆栈上
PDEVICE- OBJECT fdo =
IoAttachDeviceToDeviceStack (fido,pdo);
pdx->TopDevObj=fdo;
fido->Flags ︱=pdo->F1ags&(DO_DIRECT-IO ︱DO-BUFFERED-IO ︱ DO_POWER_PAGABLE ︱DO_POWER_INRUSH);
………
//建立一个命名的设备对象创建符号链接
CreateSymbOlicLink (DriverObject,pdo);
return STATUS_SUCCESS;
}

4.3 派遣例程

派遣例程处理来自应用程序的打开、关闭、读、写等I/O请求命令。与功能驱动程序的区别是:过滤器驱动程序不能影响其他驱动程序接受IRP。对于未知的IRP或不处理的IRP过滤驱动程序的原则是必须沿设备栈传递下去。因此他必须为每种类型的IRP都安装派遣函数,而不仅仅只是其希望处理的IRP。对于希望处理的IRP必须指定特殊的派遣函数,直接用CompleteIRP来完成接收到的这类IRP,不往下层传送。

这里由DispatchDeviceControl处理来自应用程序的所有希望处理的I/O操作命令。通常采用给予所有自定义的I/O请求代码的SWITCH语句,而对于每个命令使用相应的处理函数。下面列出了主要的代码框架:

NTSTATUS DispatchDeviceControl (PDEVICE_OBJECT fido,PIRP Irp)
{
NTSTATUS status;
PDEVICE_EXTENSION pdx=(PDEVICE_EXTENSION)fido->DeviceExtension;
PlO_STACK_LOCATION IrpStack =
IoGetCurrentlrpStackLocation(1rp);
//取I/O控制命令代码
ULONG IoControlCode = IrpStack >
Parameters.DeviceloContr01.IoControlCode;
switch(IoControlCode)
{
case IOCTL-XXX:
…… //处理I/O控制命令代码
case IOCTL-XXX:
……
default:
……
break;
}
//完成接收到的IRP
IoCompleteRequest(Irp,IO_NO_INCREMENT);
……
return status;
}

对于不需要处理的IRP则交由DispatchAny例程处理,将IRP沿着设备栈直接传递下去:

NTSTATUS DispatchAny(PDEVICE_OBJECT fido,PIRP Irp)
{
PDEVICE_ EXTENSION pdx=(PDEVICE-EXTENSION)
fido->DeviceExtension
//使堆栈指针少前进一步。
IoSkipCurrentlrpStackLocation(hp);
Status=IoCallDriver(pdx->LowerDeviceObject,Irp);
……
return status;

4.4 Unload例程功能

在Unload例程中,驱动程序必须释放所有创建的对象和所有分配给驱动程序的资源。

5 结 语
笔者就采用在Windows提供的USB声卡驱动程序下方插入自己编写的下层过滤器驱动程序实现了对USB声卡输出的数据流的截获并进行语音信号处理,取得了不错的效果,现已投入实际应用。可见过滤器驱动程序作为一类特殊的驱动程序,它可以以较小的代价实现对驱动数据流的截获,修改、增加现有驱动常需的功能,具有很强的实用性。


相关信息
发表评论
打印本页 关闭本页
TFT面板价格还能涨多久
  《国际光电与显示》FPD解决方案专栏—2002年7月刊  今年价格仍缓慢上涨 去年年底以来,LCD显示器市场需求强烈,受此影响15寸LCD面板合约价自去年底开始反弹,涨势已延续7个月。日前,供应商与客户议定的5月合约价再度上涨2%达255-265美圆。笔记本电脑方面,需求也在恢复,笔记本用15寸SXGA+ LCD面板的价格在6月上涨为315~320美元,在4月的价格为300美元左右。...
>>详细内容
TSIA Industry Research 产业报告
  1.2.2004 STN-LCD面板彩色化引发投资新风潮 分析师 方正人 jengren@tsc.com.tw 彩色手机已成手机厂新机种主流规格,加以为求快速普及,手机正朝向低价化发展,在成本的考量下,预期CSTN将为国内STN业者创造新的商机. 全球STN产品将朝向彩色化发展,整体CSTN比重可由目前30%逐年提升至2005年40%以上. CSTN最大应用仍为手机产品,占比重70%左右;而手机在未来两年至少都有10%以上成长空...
>>详细内容
半导体晶圆制造中操作工数量的配置
  潘峰,钱省三 (上海理工大学工业工程研究所 微电子发展研究中心,上海 200093) 摘要:对半导体制造中员工人数的配置问题进行了研究,提出了操作工人数的长期决策和短期决策两种情况,并用仿真模拟的方法对操作工数量需求进行动态研究,而非传统的静态模型。本文还对目前评价操作工绩效的指标进行了阐述,提出了在制品利用率作为评价指标。 关键词:人数配置;仿真...
>>详细内容
建筑与建筑群综合布线系统工程设计规范!
  1、系统设计 1.0.1综合布线系统(GCS)应是开放式结构,应能支持电话及多种计算机数据系统,还应能支持会 议电视、监视电视等系统的需要。   设计综合布线系统应采用星型拓扑结构,该结构下的每个分支子系统都是相对独立的单元,对每个分支单元系统改动都不影响其他子系统。 只要改变结点连接就可使网络的星型、总线、环型等各种类型网络间进行转换。综合布线系统应采用开放...
>>详细内容
流化床反应器的控制与测量系统
  【摘要】本文通过分析丙烯腈生产中影响R101流化床反应器单程收率的几个主要因素,并且给出了工艺和自控上对上述因素的控制方法,特别指出利用简单的测量方法,利用DCS的计算功能,对上述一些不能直接测量的因素进行软测量,在实际应用中取得了良好的效果。一、 引言  年产2.5万吨丙烯腈(AN)装置(后扩产为4万吨)系引进美国SOHIO公司丙烯氨氧化法专利技术,以丙烯(C3H6)...
>>详细内容
研华DSA-2000提供紧凑型高清晰数字电子看板解决方案
  数字看板市场潜力巨大越来越多的商业机构正在将数字电子看板用于播放信息、广告和娱乐节目,这样就使得数字电子看板市场得到了迅猛的发展。然而,室内和室外零售动态显示系统的销售只占据了数字电子看板市场中的很少份额。根据美国加利福尼亚圣克拉拉一家市场调研机构 iSuppli/Stanford Resources 的调查,数字电子看板市场将会从 2003 年的 5.5 亿美元增加到 2008 年的15 亿美元,增长幅...
>>详细内容
已有(
)位对此新闻感兴趣的网发发表了看法 >>更多评论
内 容:
     
 
热点新闻
一周排行
关于我们 | 服务项目 | 付款方式 | 广告服务 | 联系我们 | 友情链接 | 投诉 建议 合作 | 网站地图 | 加入收藏
Copyright © 2007-2008 WEEQOO.COM Corp.All Rights Reserved. 版权所有 经营许可证编号:浙B2-20050339 法律声明
维库电子旗下网站:维库电子市场网 | ChinaICMart | 维库电子开发网 | 维库电子人才网
总部:杭州市下城区朝晖路182号国都发展大厦1号楼80A
电话:0571-85889139-8007 QQ:303939539 | MSN:zh1226@hotmail.com |  邮箱:laz8258@163.com dzsc51@163.com