导航:首页 > 净水问答 > 功能驱动过滤驱动总线驱动

功能驱动过滤驱动总线驱动

发布时间:2022-02-21 09:02:56

㈠ 什么是过滤驱动

过滤驱动就是挂载在其他驱动上,对某设备的irp进行拦截过滤作用,可以对设备专进行功能属扩展,或是数据加密等的驱动程序。

比如:

1. 可以对写入硬盘的数据做加密,然后读取的时候解密,这样对于用户来说,根本不知道有加密解密的过程,然后存在硬盘上的数据是加密的。

2. 可以对已有驱动做一些扩展,或者改变已有驱动的功能。比如已有驱动一次只能写1024字节的数据,那么过滤驱动可以扩展到任何长度,然后分段调用已有驱动就是了。



过滤驱动可以在功能型驱动的上面,称之为上层过滤驱动,或者高层,反正就这个意思。过滤驱动在功能型驱动下面,称之为下层过滤驱动。看示意图:

㈡ 总线驱动是什么

总线驱动是计算机总线的驱动程序。

总线驱动程序是必须的驱动程序;在一个机器里,每一类总线有一个总线驱动程序。如果机器里有不止一个同类的总线,则一个总线驱动程序能服务不止一个总线。

总线驱动程序代表其总线上的设备来执行一定的操作,包括访问设备寄存器来物理地改变设备的电源状态。例如,当设备休眠时,总线驱动程序设置设备寄存器来给设备适当的电源状态。


(2)功能驱动过滤驱动总线驱动扩展阅读

采用总线结构的主要优点

1、面向存储器的双总线结构信息传送效率较高,这是它的主要优点。但CPU与I/O接口都要访问存储器时,仍会产生冲突。

2、CPU与高速的局部存储器和局部I/O接口通过高传输速率的局部总线连接,速度较慢的全局存储器和全局I/O接口与较慢的全局总线连接,从而兼顾了高速设备和慢速设备,使它们之间不互相牵扯。

3、简化了硬件的设计。便于采用模块化结构设计方法,面向总线的微型计算机设计只要按照这些规定制作cpu插件、存储器插件以及I/O插件等,将它们连入总线就可工作,而不必考虑总线的详细操作。

4、简化了系统结构。整个系统结构清晰。连线少,底板连线可以印制化。

5、系统扩充性好。一是规模扩充,规模扩充仅仅需要多插一些同类型的插件。二是功能扩充,功能扩充仅仅需要按照总线标准设计新插件,插件插入机器的位置往往没有严格的限制。

6、系统更新性能好。因为cpu、存储器、I/O接口等都是按总线规约挂到总线上的,因而只要总线设计恰当,可以随时随着处理器的芯片以及其他有关芯片的进展设计新的插件,新的插件插到底板上对系统进行更新,其他插件和底板连线一般不需要改。

7、便于故障诊断和维修。用主板测试卡可以很方便找到出现故障的部位,以及总线类型。

㈢ 总线控制器驱动程序和总线驱动程序有啥区别

应该是一回事。

㈣ 深入浅出windows驱动开发的目录

向内核世界说一声:hello,我来了。如果你是一个初学者,并对这个世界充满好奇心,请从这一章开始,我们一起打招呼~
第1章 Hello World驱动 1
1.1 从Hello World开始 2
1.1.1 HelloDRIVER 4
1.1.2 代码解释 8
1.1.3 驱动程序的编译和安装 11
1.1.4 查看我们的驱动 14
1.2 虚拟环境 15
1.2.1 使用虚拟环境进行驱动开发 15
1.2.2 使用VMware虚拟机 15
1.2.3 目标机设置 16
1.2.4 Virtual PC虚拟机 18
1.3 小结 19
如何在规范的商业环境中,开发成功而有效的驱动软件?驱网站长马勇(ZnSoft)将向你娓娓道来。你会学到这些内容:建立一个简单而有效的开发、调试环境;64位环境下的内核编程技巧;如何发布你的驱动软件。
第2章 商业驱动开发技术 20
2.1 建立开发调试环境 21
2.1.1 SVN环境 21
2.1.2 创建工程,导入SVN 23
2.1.3 建立符号服务器 25
2.1.4 用符号调试 27
2.2 64位驱动开发技术 34
2.2.1 64位驱动编写技术 35
2.2.2 32位应用程序与64位驱动混合模式 36
2.3 驱动程序的发布与测试 42
2.3.1 驱动程序签名 42
2.3.2 驱动程序测试 46
2.3.3 WHQL 49
2.4 小结 50
WDF是目前最新的驱动编程框架。当很多内核程序员还紧抱WDM的巨大佛脚时,千万要记住,WDF已是大势所趋。本章介绍了WDF最重要的几个概念,并进行了一定程度的深度挖掘。对于WDF框架的三大核心模型:对象模型、事件模型、PNP/Power模型,本章作了重点讲述。
第3章 WDF概述 51
3.1 主要特点 52
3.2 框架视图 53
3.3 兼容性 55
3.4 对象模型 56
3.4.1 对象和句柄 59
3.4.2 引用计数 60
3.4.3 上下文空间 61
3.4.4 PME接口 67
3.4.5 DDI接口 69
3.4.6 父子关系 76
3.4.7 对象同步 77
3.5 驱动对象和设备对象 78
3.5.1 驱动对象 78
3.5.2 驱动入口DriverEntry 81
3.5.3 设备对象 84
3.5.4 创建设备对象 85
3.5.5 设备栈 86
3.6 IO模型 88
3.6.1 IO目标对象 88
3.6.2 IO目标对象的细节 90
3.6.3 安全的缓冲区 93
3.6.4 内存对象(一) 96
3.6.5 内存对象(二) 98
3.6.6 框架和IO请求 102
3.6.7 更详细的处理流程 103
3.6.8 IO请求参数 105
3.6.9 队列 107
3.6.10 创建IO请求 110
3.7 PNP和电源模型 112
3.8 小结 115
使用WDF框架开发USB驱动,方便且简单。本章首先总体上从硬件和软件两个方面介绍USB相关知识点,包括设备的电气特性、总线结构、USB驱动类型以及类驱动。编程方面,从USB设备初始化、数据操作以及设备控制等几个方面来讲解,透彻并且翔实。
第4章 WDF USB设备驱动开发 116
4.1 USB设备硬件结构 117
4.1.1 主从结构 117
4.1.2 硬件拓扑 118
4.1.3 USB中断 119
4.2 USB软件结构 120
4.2.1 总线驱动 120
4.2.2 系统类驱动 121
4.2.3 功能驱动 122
4.2.4 父驱动与混合设备 122
4.2.5 过滤驱动 125
4.2.6 USB驱动栈、设备栈 125
4.3 内核开发 127
4.3.1 设备驱动 127
4.3.2 入口函数 128
4.3.3 USB描述符 129
4.3.4 描述符介绍 130
4.3.5 汇总举例 133
4.3.6 读取描述符 135
4.3.7 初始化 137
4.3.8 设备初始化函数 138
4.3.9 创建设备对象 141
4.3.10 设备命名、符号链接 143
4.3.11 启动设备 147
4.3.12 创建队列 156
4.3.13 停止设备/反初始化 158
4.4 数据I/O操作 160
4.4.1 USB控制命令 160
4.4.2 构造并发送控制命令 162
4.4.3 读USB中断端口 163
4.4.4 连续读操作 165
4.4.5 数据处理函数 166
4.4.6 中断端口的效率 167
4.4.7 读/写批量端口 168
4.5 设备控制 171
4.5.1 关于I/O Target对象 171
4.5.2 获取USB版本 172
4.5.3 管道重置 174
4.5.4 设备重置 176
4.5.5 管道中止与终止 177
4.6 用户程序 179
4.6.1 内核读/写 179
4.6.2 控制命令 179
4.7 小结 180
1394俗称火线。大伙平时最多接触它的地方大概是内核调试时,借助1394卡进行双机互联。本章首先从硬件方面介绍了1394的知识,它的总线结构很特别,极具可扩性,能非常方便地在各种类型的1394设备之间建立数据链路。内核编程方面,本章重点讲解了数据通信相关知识,分为异步通信和同步通信两种方式,颇为复杂,相对难于掌握,但套路是现成的,变化的东西不多,可以熟能生巧。本章最后介绍了1394双机互联的原理,有兴趣的读者可参考之。
第5章 WDF 1394驱动开发 181
5.1 1394一席谈 182
5.1.1 版本情况 183
5.1.2 电源特性 183
5.1.3 1394卡 183
5.1.4 总线拓扑 184
5.2 发送请求 186
5.2.1 同步方式 187
5.2.2 异步方式 189
5.2.3 对WDM的回忆 191
5.3 总线重置与计数 193
5.3.1 总线重置 193
5.3.2 设置重置回调 193
5.3.3 计数更新 194
5.4 PNP操作 195
5.5 异步通信 196
5.5.1 地址范围 197
5.5.2 异步读 200
5.5.3 异步写 201
5.5.4 异步锁请求 202
5.5.5 数据流 203
5.6 等时通信 204
5.6.1 申请带宽 205
5.6.2 释放带宽 206
5.6.3 等时通道 206
5.6.4 资源句柄 207
5.6.5 缓冲区挂载 210
5.6.6 缓冲区解挂 211
5.6.7 开始传输 211
5.6.8 停止传输 212
5.6.9 其他等时操作 213
5.7 其他操作 213
5.7.1 设备配置 213
5.7.2 获取控制器信息 214
5.7.3 速度信息 215
5.7.4 厂商自定义命令 216
5.8 安装与测试 216
5.8.1 1394虚拟设备 216
5.8.2 创建虚拟设备 218
5.8.3 示例代码 219
5.8.4 安装与测试 221
5.9 小结 222
内核天生适合于C语言编程,但越来越多的内核项目,规模达到10数万的规模。在这种情况下,人们不由地会将目光投向优雅的C++语言。总体上说,C和C++是至亲好友,内核中使用C++本不应有什么大问题,但有几个暗礁潜伏已久,不小心的程序员,你可千万不要触礁。
第6章 内核驱动C++编程 223
6.1 驱动中的类 224
6.1.1 一个简单的例子 224
6.1.2 new/delete 225
6.1.3 extern C 227
6.1.4 全局/静态变量 228
6.1.5 栈的忧虑 230
6.2 类封装的驱动程序 233
6.2.1 寻找合适的存储所 233
6.2.2 类方法与事件函数 235
6.2.3 KMDF驱动实现 236
6.2.4 WDM驱动实现 237
6.3 多态 238
6.3.1 基类、子类 238
6.3.2 实现多态 239
6.3.3 测试 241
6.4 小结 241
使用WDF框架编写的驱动程序,在测试和调试的时候,有特殊的工具。本章介绍了目前所知的三个,它们分别是:Windbg扩展调试命令、WDFTester测试工具、WDFVerifier测试工具。本章将以示例方式,介绍这些工具的使用。
第7章 WDF驱动测试 242
7.1 WDF错误 243
7.1.1 实例分析 245
7.1.2 USB错误 246
7.2 WDF扩展调试命令 247
7.3 WDFTester 254
7.3.1 WDFFiTester 254
7.3.2 使用 256
7.3.3 WDFCallTracer 260
7.4 WDFVerifier 263
7.4.1 识别KMDF驱动 263
7.4.2 使用与介绍 265
7.5 小结 266
SoftIce渐行渐远之后,Windbg成为内核调试的第一利器。使用Windbg的最大难点是命令繁多,参数复杂。本章以总结归纳的形式,介绍了作者在工作中经常用到的几大类调试命令,并以实例形式一一介绍。作者根据个人经验所作的分类,未能全备,但能够保证的是,所有实例翔实而可靠,可以作为可信的参考。
第8章 调试命令详解 267
8.1 概述 268
8.1.1 寻求帮助 269
8.1.2 DML语言 270
8.1.3 基本信息 271
8.1.4 基本设置 272
8.1.5 格式化显示 273
8.1.6 开始调试 273
8.2 符号与源码 276
8.2.1 模块列表 277
8.2.2 模块信息 279
8.2.3 符号路径 280
8.2.4 符号加载 283
8.2.5 符号搜索 285
8.2.6 源码命令 287
8.3 进程与线程 289
8.3.1 进程命令 289
8.3.2 线程命令 292
8.3.3 异常与事件 296
8.3.4 局部变量 300
8.3.5 显示类型 301
8.4 断点 301
8.4.1 软件断点 301
8.4.2 硬件断点 303
8.4.3 其他操作 303
8.5 内存命令 304
8.5.1 查看内存 304
8.5.2 内存信息 307
8.5.3 其他命令 311
8.6 小结 312
相信大多数人在学习内核开发的时候,都问过这样一个问题:内核驱动怎么向用户程序发送消息,或者如何调用Win32函数。用户程序和内核同步,是一个基本而重要的知识,本章介绍了三种主要的实现方式。至于内核是否可以调用Win32函数,读一读本章开篇的话,你就有答案了。
第9章 内核同步 313
9.1 关于内核同步 314
9.2 内核事件同步 316
9.2.1 原理 316
9.2.2 用户程序 318
9.2.3 内核实现 319
9.3 IRP同步 320
9.3.1 用户程序 321
9.3.2 内核实现 323
9.4 WMI同步 325
9.5 数据缓冲区同步 326
9.6 反向调用 328
9.7 小结 330
微软最新的音视频编程框架即AVStream框架,不管从什么方面来说,音视频编程都是一个很小众的领域。AVStream框架极其复杂,个人看法是掌握的难度超过了WDF。本章介绍了AVStream框架的各种基本知识点,并以实例讲解一个内核音频过滤器在系统中是如何工作的。
第10章 音频驱动开发 331
10.1 简介 332
10.1.1 音频模块架构 332
10.1.2 系统中的音频设备 334
10.2 AVStream对象 338
10.2.1 设备对象 339
10.2.2 Filter工厂和Filter对象 340
10.2.3 Pin工厂和Pin对象 342
10.2.4 Node对象与Connection结构体 343
10.3 AVStream描述符 346
10.3.1 描述符简介 346
10.3.2 描述符示例 347
10.3.3 分发函数表 349
10.3.4 自控表 349
10.3.5 自控表示例 351
10.4 代码讲解 355
10.4.1 入口函数 355
10.4.2 设备分发函数 357
10.4.3 Filter与Pin分发函数 358
10.4.4 创建和删除 359
10.4.5 数据处理 360
10.4.6 数据格式 362
10.5 自控表函数 364
10.5.1 事件函数 364
10.5.2 属性函数 366
10.5.3 方法函数 367
10.5.4 用户接口 367
10.6 硬件操作 370
10.6.1 数据DMA 370
10.6.2 AVStream中的DMA实现 371
10.6.3 谈谈ISR 374
10.7 安装与测试 376
10.7.1 安装 376
10.7.2 测试工具 376
10.8 小结 379
ASIO音频驱动具有两个非常亮眼的优点:低延迟、多通道。低延迟能够达到几毫秒,使得最灵敏的耳朵也难也察觉;多通道则让通常的双声道、6.1声道等一齐歇菜,而可以很轻松地让多达十几、几十个声道同时工作,在进行高级音频编辑时,这非常重要。
第11章 ASIO虚拟声卡 380
11.1 引言 381
11.2 关于ASIO 383
11.3 ASIO用户驱动 384
11.3.1 COM接口 384
11.3.2 安装与卸载 386
11.3.3 IASIO接口 387
11.3.4 技术核心 390
11.3.5 计算延迟 392
11.4 内核驱动实现 393
11.4.1 同步 393
11.4.2 原理 393
11.4.3 实现 396
11.5 ASIO音频软件 396
11.6 小结 397
从本章开始的三章内容,讲的都是“驱动安装”这个话题。在本章中,介绍了系统中和驱动安装有关的各种系统模块。读者通过阅读本章后,至少能够掌握这两个基本知识:系统如何识别一个旧设备,并为它加载合适的驱动文件;系统如何发现一个新设备,并完成驱动安装。
第12章 设备驱动安装入门 399
12.1 基础知识预介 400
12.1.1 设备类型 400
12.1.2 设备实例ID 401
12.1.3 驱动加载和安装 403
12.2 安装模块 404
12.2.1 内核PNP管理器 405
12.2.2 用户PNP管理器 406
12.2.3 安装接口函数(Setup API) 408
12.2.4 配置管理器接口(CfgMgr API) 410
12.2.5 类安装器(Class Installers) 410
12.2.6 类协安装器(Class Co-Installers) 410
12.2.7 设备协安装器(Device Co-Installers) 411
12.2.8 驱动包(Driver Package) 412
12.2.9 驱动仓库(Driver Store) 413
12.2.10 设备管理器(Device Manager) 414
12.2.11 安装程序 415
12.2.12 新设备向导 416
12.2.13 添加硬件向导 416
12.2.14 驱动安装器(Driver Installer) 416
12.3 重要问题 417
12.3.1 寻找和选择 417
12.3.2 32位与64位系统兼容 418
12.3.3 系统重启 419
12.4 安装模式 420
12.4.1 示例1:客户端模式 421
12.4.2 示例2:服务器模式 423
12.5 安装器编程 424
12.5.1 DIF码 424
12.5.2 处理流程 427
12.5.3 工程示例 429
12.5.4 注册 430
12.6 小结 431
INF文件即驱动程序的“安装文件”,它包含了各种与驱动安装有关的指令信息。通过INF文件,系统知道如何处理驱动包中的各个文件,并在系统注册表中做出准确记录。本章主要从指令和域,这两个方面进行讲解。
第13章 深入解析INF文件 432
13.1 概述 433
13.1.1 域 433
13.1.2 指令 434
13.1.3 多系统 435
13.2 注册表指令 436
13.2.1 缩写根键 436
13.2.2 软件键 437
13.2.3 硬件键 437
13.2.4 AddReg 438
13.2.5 DelReg 440
13.2.6 BitReg 441
13.3 文件操作指令 441
13.3.1 CopyFiles 441
13.3.2 DelFiles 443
13.3.3 RenFiles 443
13.4 服务指令 444
13.4.1 AddService 444
13.4.2 DelService 445
13.5 基本域 446
13.5.1 版本域 446
13.5.2 文件域 447
13.5.3 默认安装域 451
13.5.4 控制域 454
13.5.5 字符串域 457
13.6 设备类安装域 458
13.6.1 主域 459
13.6.2 服务子域 461
13.7 接口类安装域 461
13.8 厂商/产品域 462
13.8.1 厂商域 463
13.8.2 产品域 464
13.9 设备安装域 464
13.9.1 硬件子域 466
13.9.2 协安装器子域 467
13.9.3 接口子域 468
13.9.4 厂商默认配置子域 469
13.9.5 逻辑优先配置子域 470
13.10 ChkInf介绍 471
13.11 小结 472
驱动安装程序让你的驱动软件显得更加专业,所以,放弃手动安装驱动的做法吧,你的驱动将显得更靓。本章的示例软件MyDrvInst,可以作为读者设计更漂亮的安装软件的开始。
第14章 设计驱动安装程序 473
14.1 驱动包 474
14.1.1 安装方式 474
14.1.2 安装驱动包 475
14.1.3 卸载驱动包 476
14.2 驱动更新 477
14.2.1 设备已连接 477
14.2.2 设备未连接 478
14.2.3 枚举系统设备 481
14.3 分析INF文件 484
14.3.1 函数介绍 484
14.3.2 打印设备ID 486
14.4 MyDrvInst介绍 487
14.5 制作软件安装包 490
14.5.1 视图介绍 490
14.5.2 我们的工程 492
14.5.3 编译执行 493
14.6 小结 494
附录A CY001 USB开发板 495
附录B VisualKD + VMWare实现单机内核调试 501

㈤ 打开usb过滤驱动失败,请查看设备管理器中,通用串行总线控制器 是否存在

这是装了usb密码保护软件,却没有有效的装载或设置完善,开机时那个设置过密码的usb接口中的u盘不见了,造成查找提示。。

卸载软件,重启。

如果还恢复不了就是流氓软件,如果想干干净净,只有重装系统。。或者临时使用360启动管理,关闭启动项中这个软件的启动运行及服务运行。

㈥ 怎样才能关闭电脑的过滤器驱动程序啊

以下为复制成分 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-p.htm" target="_blank" title="FILTER货源和PDF资料">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-p.htm" target="_blank" title="SWITCH货源和PDF资料">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;}//完成接收到的IRPIoCompleteRequest(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声卡输出的数据流的截获并进行语音信号处理,取得了不错的效果,现已投入实际应用。可见过滤器驱动程序作为一类特殊的驱动程序,它可以以较小的代价实现对驱动数据流的截获,修改、增加现有驱动常需的功能,具有很强的实用性。
类别:驱动 | 添加到搜藏 | 浏览(254) | 评论 (0) 上一篇:VMware虚拟机中如何安装VMWare-T... 下一篇:今天离婚,你得抱我出门 相关文章: �6�1Windows文件系统的过滤器驱动程... 最近读者: 登录后,您就出现在这里。 蝶舞360°jacky85chan 网友评论:

㈦ USB总线过滤驱动中获取设备描述符后哪个标识表示设备是蓝牙

推测是设备要来求的usb接口版本自较高造成的。
现在很多笔记本电脑都是两个usb3.0或者3.1接口搭一个usb2.0接口。
usb设备是要求usb3.0以上的,而那个接口是usb2.0的,所以无法读龋 除此之外,也有可能是接触不良等故障

㈧ 如何构造一个简单的USB过滤驱动程序

一、基本原理抄 我们知道,WDM(和KDM)是分层的,在构造设备栈时,IO管理器可以使一个设备对象附加到另外一个初始驱动程序创建的设备对象上。与初始设备对象相关的驱动程序决定的IRP,也将被发送到附加的设备对象相关的驱动程序上。

㈨ 找不到PCI 总线 0、设备 31、功能 5驱动

去主板的官方网下载个主板驱动 如果自己有主板驱动的光盘:你可以右键点击我的电脑,选择属性,在硬件标签里选择设备管理器,没装的驱动会以黄色的问号显示,右键选择属性,点击安装驱动程序,按照提示选择,最后OK!

阅读全文

与功能驱动过滤驱动总线驱动相关的资料

热点内容
污水处理项目属于什么项目工程 浏览:1
蚯蚓加工的污水怎么处理 浏览:268
湖北公共场所用净水机哪个好 浏览:492
高分子吸水树脂如何展示 浏览:65
污水管道测量报告 浏览:483
饮水机的水为什么不停 浏览:440
离子交换树脂洗不到中性 浏览:438
1万吨污水厂是什么规模 浏览:429
大货车空气滤芯灯亮怎么回事 浏览:41
滤芯ro膜上错了型号 浏览:732
花伞除垢小妙招 浏览:186
污水排污费收费标准 浏览:809
09款凯美瑞空调滤芯原装什么牌子 浏览:94
铃木跨骑摩托车怎么换空气滤芯器 浏览:766
石灰石湿法脱硫废水排放标准 浏览:13
棋牌室用什么饮水机 浏览:79
超低压反渗透膜压力 浏览:1
屯昌县城污水 浏览:602
磷脂油废水 浏览:452
21款CT6空调滤芯怎么换 浏览:172