objectx
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1749回复:7

请教sfilter源码中的问题

楼主#
更多 发布于:2002-06-05 09:38
我看了sfilter的源码,有一点想请各位指教。在driverentry中,
已经使用了IoCreateDevice创建了filter设备,为什么在attachdevice时又创建一个新的设备再attach上去呢?那么原来的
设备还如何收到IRP,新的attach设备又没有dispatch例程。

请各位不吝赐教。

最新喜欢:

luke_gemluke_g...
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-05 11:08
  你首先得明白一个驱动程序可以创建不只一个设备对象。就象一个COM驱动程序却控制着COM1,COM2,COM3,COM4四个设备对象。
  DriverEntry例程中创建的不是过滤设备对象,而是一个CDO(Control device object, IFSKIT中提到这一名字),它有一个设备对象名,并有创建符号连接。它不会被挂接到目标设备对象。
   attachdevice例程中创建的设备对象才是真正的过滤设备对象,它没有设备对象名,也不创建符号连接。它被IoAttachDeviceToDeviceObject挂接到特定的目标设备对象。可以拦截所有到目标设备对象的IRP。
Tom_lyd
objectx
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-05 11:21
谢谢你的指教,我明白了。
objectx
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-05 11:29
再请教一下,我曾在白云黄鹤站上看见一个tcp filter的例子,
他当时只创建了一个设备,也就是说,并无CDO设备,我想问一下,
这样做是不是可以支持动态装载,就像vxd的IFS,而无须事先安装。

Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-05 13:27
我认为支不支持动态卸载跟是否创建CDO设备对象无绝对关系。我倒是认真地想了一个,如果不创建CDO设备,如何支持动态装载和动态卸载。我认为一个CDO是必须的,有了它,你才能通过它进行一些来自应用程序的设置,还有动态装态和卸载。Filemonitor以及FilsSpy(IFSKIT中提供的)都是这么做的。
Tom_lyd
objectx
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-05 13:36
再问一个很弱的问题,我是如何知道要attach的device的nameString。并且如何知道它要实现多少IRP.
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-05 21:48
我认为支不支持动态卸载跟是否创建CDO设备对象无绝对关系。我倒是认真地想了一个,如果不创建CDO设备,如何支持动态装载和动态卸载。我认为一个CDO是必须的,有了它,你才能通过它进行一些来自应用程序的设置,还有动态装态和卸载。Filemonitor以及FilsSpy(IFSKIT中提供的)都是这么做的。

装载和卸载只和驱动对象有关
kavas
驱动牛犊
驱动牛犊
  • 注册日期2001-12-28
  • 最后登录2004-03-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-06 00:31
查看系统的设备符号连接信息,
如 A: 在里面表示为 \\\\DosDevices\\\\A:\\\\

关于需要处理或传递那几个irp ,这就比较麻烦了,
不同的设备或不同层次有不同的需要,
偷懒的方式是,处理你需要操作的irp ,对其他所有
的irp 全部传递,管他有没有。
驱动,驱动,一驱就动。 我怎么就是驱不动它呢? 窝火!!
游客

返回顶部