阅读:1749回复:7
请教sfilter源码中的问题
我看了sfilter的源码,有一点想请各位指教。在driverentry中,
已经使用了IoCreateDevice创建了filter设备,为什么在attachdevice时又创建一个新的设备再attach上去呢?那么原来的 设备还如何收到IRP,新的attach设备又没有dispatch例程。 请各位不吝赐教。 |
|
最新喜欢:![]() |
沙发#
发布于:2002-06-05 11:08
你首先得明白一个驱动程序可以创建不只一个设备对象。就象一个COM驱动程序却控制着COM1,COM2,COM3,COM4四个设备对象。
DriverEntry例程中创建的不是过滤设备对象,而是一个CDO(Control device object, IFSKIT中提到这一名字),它有一个设备对象名,并有创建符号连接。它不会被挂接到目标设备对象。 attachdevice例程中创建的设备对象才是真正的过滤设备对象,它没有设备对象名,也不创建符号连接。它被IoAttachDeviceToDeviceObject挂接到特定的目标设备对象。可以拦截所有到目标设备对象的IRP。 |
|
|
板凳#
发布于:2002-06-05 11:21
谢谢你的指教,我明白了。
|
|
地板#
发布于:2002-06-05 11:29
再请教一下,我曾在白云黄鹤站上看见一个tcp filter的例子,
他当时只创建了一个设备,也就是说,并无CDO设备,我想问一下, 这样做是不是可以支持动态装载,就像vxd的IFS,而无须事先安装。 |
|
地下室#
发布于:2002-06-05 13:27
我认为支不支持动态卸载跟是否创建CDO设备对象无绝对关系。我倒是认真地想了一个,如果不创建CDO设备,如何支持动态装载和动态卸载。我认为一个CDO是必须的,有了它,你才能通过它进行一些来自应用程序的设置,还有动态装态和卸载。Filemonitor以及FilsSpy(IFSKIT中提供的)都是这么做的。
|
|
|
5楼#
发布于:2002-06-05 13:36
再问一个很弱的问题,我是如何知道要attach的device的nameString。并且如何知道它要实现多少IRP.
|
|
6楼#
发布于:2002-06-05 21:48
我认为支不支持动态卸载跟是否创建CDO设备对象无绝对关系。我倒是认真地想了一个,如果不创建CDO设备,如何支持动态装载和动态卸载。我认为一个CDO是必须的,有了它,你才能通过它进行一些来自应用程序的设置,还有动态装态和卸载。Filemonitor以及FilsSpy(IFSKIT中提供的)都是这么做的。 装载和卸载只和驱动对象有关 |
|
7楼#
发布于:2002-06-06 00:31
查看系统的设备符号连接信息,
如 A: 在里面表示为 \\\\DosDevices\\\\A:\\\\ 关于需要处理或传递那几个irp ,这就比较麻烦了, 不同的设备或不同层次有不同的需要, 偷懒的方式是,处理你需要操作的irp ,对其他所有 的irp 全部传递,管他有没有。 |
|
|