阅读:2484回复:5
NT4中如何实现LowerFilters(下层过滤)?
请问各位老大:NT4中如何实现类似于Win2000中的LowerFilters(下层过滤)?
我做了一个过滤驱动程序,想拦截由CDROM传下去的SCSI命令(即做一个CDROM设备的LowerFilters),在Win2000中已经实现了,但NT4中好像不支持PNP,所以我改了架构:在DriverEntry中获得Cdrom个数,打依次获得各\"\\\\Device\\\\Cdrom%d\"的设备对像(pCdromDeviceObject), 接下来要做的工作就是将我创建的用于拦截的过滤设备指针(pFilterDeviceObject)置于pCdromDeviceObject下层,然后就可以通过IRP_MJ_SCSI顺利获得发给各CDROM的的SCSI命令了, 但是,关键点就是NT4中怎样实现(或者设置)LowerFilters? 一定要救救我啊!!!!!!!!!! |
|
最新喜欢:![]()
|
论坛版主
![]() |
沙发#
发布于:2003-10-23 21:46
这样试试看行不:
在driverentry里面做完需要做的动作(注意2k里面adddevice里面的很多动作都要移到driverentry里面来),然后创建你的过滤驱动设备对象,然后用ioattachdevice或ioattachdevicetodevicestack把它弄到scsi端口驱动上面就可以了。 你可能需要看看nt专门的driverentry的动作有哪些,比2000多很多,主要还是adddevice和pnp那些mn功能的代码(比如ipr_mn_start),但是动作的目的差不多。 |
|
板凳#
发布于:2003-10-24 09:13
我的做法,因NT4不支持AddDevice,所以我将AddDevice的工作都移到了DriverEntry,比如:先用IoGetConfigurationInformation()获得设置配置信息,再由获得的光驱数分别创建各光驱(\"\\\\Device\\\\CdromX\")的过滤设置(用IoAttachDeviceToDeviceStack挂上),。。。。。,
代码我是写得差不多了,不过启动后的效果是CDROM的上层驱动,只能收到来自文件系统层的消息,但我要收到来自CDROM的消息,就必须将其做成CDROM的下层过滤驱动,在WIN2000中(用AddDevice的能成功下层过滤)就需要在注册表中设置LowerFilters项以区分是下层驱动(不然就成了上层驱动),不知WinNT4的该怎么设置?还是另有关键点? |
|
|
论坛版主
![]() |
地板#
发布于:2003-10-24 12:03
上层还是下层过滤可以用注册表设啊,:)厉害,我又上了一课。对了,我说说我的想法:你要做成CDROM的下层,那么可不可以这样做:做成SCSI端口驱动的上层,一样是在CDROM的下面,而且你IOATTACH的时候挂接以后是SCSI的最新上层,不关原来又没有过滤,这个都在最上面,那么就会紧挨着CDROM了,不知道我这样设想对不?试验试验?
|
|
地下室#
发布于:2003-10-25 12:44
我试过了啊,IRP_MJ_SCSI中就是收不到应有的SRB,比如READ,WRITE,MODE_SENSE等,就只有最初能收到一个CLAIM_DEVICE,不知是不是哪里搞错了
|
|
|
5楼#
发布于:2003-10-25 18:26
是不是应该截获IRP_MJ_DEVICE_CONTROL中的IOCTL_SCSI_PASS_THROUGH_DIRECT
|
|