侦探过滤驱动
来源:互联网 发布:游戏帧数优化软件 编辑:程序博客网 时间:2024/04/24 03:55
侦探过滤驱动
本文节选自《Windows 内核情景分析--采用开源代码ReactOS》一书
至于过滤驱动,则依附于类驱动或端口驱动,目的在于拦截类设备驱动与端口设备驱动之间的信息,以实现某些统计、监视、修改乃至重定向的操作。例如,假定要求对存储在磁盘上的信息进行加密,那么由端口驱动写入磁盘以及从磁盘读入的数据就都应该是已加密的,而上面的类驱动却只能按正常的算法进行处理,此时就可以在二者之间插入一个过滤驱动模块,在此模块中实现所有的加密/解密运算。
最底层的模块往往是比较复杂的,因为这种模块通常需要处理中断,还需要处理DPC函数即“延迟过程请求(Delayed Procedure Call)”。此外,有的底层模块还需要处理DMA操作(特别地,处理DMA操作的模块常又称为“适配器驱动(Adapter Driver)”)。而中间模块,虽然其处理的算法和流程也可能是复杂的,却并没有中断处理、DPC、DMA这些麻烦。
有必要说明,设备驱动的堆叠是可以嵌套的。什么叫嵌套呢?就是一种设备的端口驱动可以堆叠在另一种设备的类驱动上面。以USB鼠标器的驱动为例,自上而下,首先当然是鼠标器的类驱动,然后是USB鼠标器的端口驱动。但是这个端口驱动并不直接与硬件接口打交道,因为这种鼠标器是作为USB设备出现的,于是在这个端口驱动模块的下面就要放上USB设备的类驱动,然后是具体USB接口芯片的端口驱动(或小端口驱动)。这样,就好像是把两个堆叠又堆叠在一起,这就是所谓嵌套。
读者也许要问,既然是USB鼠标器的端口驱动,为什么就不自己来实现对于USB芯片的驱动呢?那样当然也是可以的,但是这里有两方面的考虑。首先,那样显然不符合软件重用的原则,既然已经有了USB设备的类驱动和端口驱动,为什么还要再来实现一遍?再说,即使真要再来实现一遍,也难以保证其正确性。Windows的设备驱动模块并非开源软件,虽然可以安装、使用这些模块,却不知道里面是如何实现的,所以要自己实现一遍既非易事,更不经济。其次,即使那确是易事,并且不考虑是否经济,也还是不合适。这是因为对一个具体设备或接口的操作不应“政出多门”,而应该出自同一个模块的控制,否则就得考虑如何互斥、如何串行化、如何协调的问题。在新开发的模块中或许可以把这些因素和措施考虑进去,可是对于已经存在的模块却无法再加改变。这样,势必就造成要把原来已经存在的模块也丢弃不用,而全都换成自行开发的模块,这当然是不现实的。
- 侦探过滤驱动
- 驱动------过滤
- 过滤驱动与驱动探秘
- 文件过滤驱动之一
- 文件系统过滤驱动基础知识
- TDI过滤驱动摘除
- 文件系统过滤驱动基础知识
- 文件系统过滤驱动(开篇)
- 文件系统过滤驱动基础知识
- 过滤驱动的概念
- 键盘过滤驱动
- 键盘过滤驱动
- 文件系统过滤驱动
- 修改过滤驱动
- 文件系统过滤驱动基础知识
- 文件系统过滤驱动基础知识
- 串口过滤驱动源码
- 过滤驱动笔记
- 远程数据库备份解决方案。
- 又进一步
- J2ME图像缩放线性插值算法代码
- Java实现随机验证码功能
- 用于蜂窝电话的相机闪光照明电路简介
- 侦探过滤驱动
- Delphi webBrowser焦点
- 呼吁潮流学堂坚决打倒中国移动 维护正当权利
- 使用StateServer保存Session,解决Session过期问题
- 驱动程序的几个对象
- 基于cppunit的bcb中,运行某测试用例时,弹出窗口的实现方法
- 创建ASP.NET WEB自定义控件
- Flash 之 Action语句中文全解
- Junit4的使用说明