过滤,filter,过滤是在不影响上层和下层接口的情况下,在Windows系统内核中加入新的层,从而不需要修改上层的软件或者下层的真实驱动程序,就加入了新的功能。  
    举个例子:
    实时监控的反病毒程序。任何高层软件或者Windows的文件系统都没有考虑过应该什么时候去检查文件中是否含有某个病毒的特征 码,也不应该要求某个软件或者Windows的文件系统去考虑这些;反病毒程序需要在不改变文件系统的上层和下层接口的情况下,在中间加入一个过滤 层,这样就可以在上层软件读取文件、下层驱动提供数据时,对这些数据进行扫描,看其中是否含有某个病毒的特征码。这是一个很典型的过滤过程。

进行过滤的最主要的方法是对一个设备对象(Device Object)进行绑定。
Windows系统之所以可以运作,是因为Windows中已经存在许多提供了各种功能的设备对象。这些设备对象接收请求,并完成实际硬件的功能。  
我们可以首先认为:一个真实的设备对应一个设备对象(虽然实际对应关系可能复杂得多)。通过编程可以生成一个虚拟的设备对象,并“绑定”(Attach)在一个真实的设备上。一旦绑定,则本来操作系统发送给真实设备的请求,就会首先发送到这个虚拟设备。

在WDK中,有多个内核API能实现绑定功能。下面是其中一个函数的原型:  
NTSTATUS  
    IoAttachDevice(  
            IN PDEVICE_OBJECT  SourceDevice,  
            IN PUNICODE_STRING  TargetDevice,  
            OUT PDEVICE_OBJECT  *AttachedDevice  
);

在绑定一个设备之前,先要知道如何生成一个用于过滤的过滤设备。函数IoCreateDevice被用于生成设备:  
NTSTATUS  
IoCreateDevice(  
        IN PDRIVER_OBJECT  DriverObject,     
        IN ULONG  DeviceExtensionSize,  
        IN PUNICODE_STRING  DeviceName  OPTIONAL,  
        IN DEVICE_TYPE  DeviceType,  
        IN ULONG  DeviceCharacteristics,  
        IN BOOLEAN  Exclusive,  
        OUT PDEVICE_OBJECT  *DeviceObject  
        );

DriverObject是本驱动的驱动对象。这个指针是系统提供,从DriverEntry中传 入。DeviceExtensionSize是设备扩展,请先简单地传入0。DeviceName是设备名称。一个规则 是:过滤设备一般不需要名称,所以传入NULL即可。DeviceType是设备类型,保持和被绑定的设备类型一致即可。 DeviceCharacteristics是设备特征,在生成设备对象时笔者总是凭经验直接填0,然后看是否排斥,选择FALSE。

Windows过滤驱动程序的概念相关推荐

  1. Window XP驱动开发(二十一) 过滤驱动程序

    转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家拍砖 参考书籍<<Windows驱动开发技术详解>> 过滤驱动程序的开发十分 ...

  2. filter hid_如何构造一个简单的USB过滤驱动程序

    本文分三部分来介绍如何构造一个简单的USB过滤驱动程序,包括"基本原理"."程序的实现"."使用INF安装".此文的目的在于希望读者了解基本 ...

  3. Windows 2000驱动程序的设计

    Windows 2000驱动程序的设计 [日期:2005-1-22] 来源:网友上载  作者:未知 [字体:大 中 小] 1. 简介: ---- Windows 2000原名Windows NT 5. ...

  4. linux 键盘过滤,键盘过滤驱动程序不responsing

    我写了一个简单的键盘过滤驱动程序(MyKbdFilter),其注册注册表,并添加到HLM \系统\ CurrentControlSet \控制\ {类4D36E96B-E325-11CE-BFC1-0 ...

  5. 从零开始学习Windows WDF驱动程序开发

    摘要:本文通过简单的例子和精简的说明,带你快速了解和掌握基于WDF架构的Windows驱动程序的开发过程.WDF自带的文档非常详细而且冗长,读者需要一定的编程基础和英语水平,再加上一定的努力,才能看明 ...

  6. windows 域的一些概念

    Windows 域的一些概念<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  7. 微软ODBC服务器驱动,Windows ODBC 驱动程序中的连接弹性

    Windows ODBC 驱动程序中的连接弹性 09/01/2020 本文内容 为了确保应用程序能与 Azure SQL 数据库 保持连接,Windows 上的 ODBC 驱动程序可以还原空闲连接. ...

  8. 【Windows 10 驱动程序 已解决】重装 Win 10 系统后 电脑无法识别外接屏幕。投影:你的电脑不能投影到其他屏幕。请尝试重新安装驱动程序或使用其他视频卡。

    目录 说在前头(解决方法) 起因:重装 Win 10 系统后,无法识别外接屏幕(解决问题过程) 在英特尔官网上找驱动 总结 说在前头(解决方法)   我的电脑是笔记本.显示器接口是 HDMI   如果 ...

  9. 【驱动开发】Windows过滤平台(WFP,Windows Filtering Platform)

    文章目录 Windows的发展历程 TDI简介 WFP简介 用户态基础过滤引擎(BFE) 内核态过滤引擎(KMFE) 垫片(Shim) 分层(Layer) 子层(Sub Layer) 过滤器(Filt ...

最新文章

  1. keystone java,搭建KeystoneJS
  2. ASLR in optee
  3. [WPF]使用Fody提高效率
  4. C语言 __cplusplus - C语言零基础入门教程
  5. Spark高级操作之json复杂和嵌套数据结构的操作
  6. VS2012下基于Glut 矩阵变换示例程序2:
  7. 设计模式的征途—7.适配器(Adapter)模式
  8. 虎牙面试官:String长度有限制吗?是多少?我:这太...
  9. Mac OS 开启三指拖移,三指缩放,拖拽窗口,切换全面页面变成四指
  10. 网络安全--通过握手包破解WiFi(详细教程)
  11. html编写在线打字通,HTML5代码打字练习、HTML5案例 - 03
  12. ExcelVBA:请注意!文档部分内容可能包含文档检查器无法删除的个人信息。
  13. 存储系统概述——SRAM静态随机存储器
  14. java 雪崩效应,七、微服务架构中的“雪崩效应”
  15. android app 设置以太网静态Ip
  16. 5月智能投影市场大涨58%,当贝稳居DLP第一阵营
  17. python基础学习-斐波那契数列实现
  18. 如何恢复计算机手机桌面图标,桌面图标不见了怎如何恢复
  19. 【乐逍遥网站设计】网站建设如何让网站设计更加合理化?
  20. 浅谈雷达在气象领域的基本应用

热门文章

  1. cookie及session
  2. MySQL处理中文乱码问题
  3. Windows环境下32位汇编程序设计C版code--第五章(一)
  4. Java把以0结尾的字符串_Java中字符串为什么不以\0结尾
  5. python cms应用生成_Django CMS应用程序H教程
  6. Redis的常用命令——hash的常用命令
  7. 设计立方体类(求出立方体的面积和体积 分别用全局函数和成员函数判断两个立方体是否相等)
  8. 百度网盘javascript加速视频播放速度
  9. Python+selenium 自动化-chrome驱动的下载安装
  10. 设置超链接在新的窗口中打开,而不是在本窗口中打开