he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2484回复:5

NT4中如何实现LowerFilters(下层过滤)?

楼主#
更多 发布于:2003-10-23 18:36
请问各位老大: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?

一定要救救我啊!!!!!!!!!!

最新喜欢:

ddk2003ddk200...
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-23 21:46
这样试试看行不:
在driverentry里面做完需要做的动作(注意2k里面adddevice里面的很多动作都要移到driverentry里面来),然后创建你的过滤驱动设备对象,然后用ioattachdevice或ioattachdevicetodevicestack把它弄到scsi端口驱动上面就可以了。
你可能需要看看nt专门的driverentry的动作有哪些,比2000多很多,主要还是adddevice和pnp那些mn功能的代码(比如ipr_mn_start),但是动作的目的差不多。
根据地的兄弟们,团结就是力量
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-24 09:13
我的做法,因NT4不支持AddDevice,所以我将AddDevice的工作都移到了DriverEntry,比如:先用IoGetConfigurationInformation()获得设置配置信息,再由获得的光驱数分别创建各光驱(\"\\\\Device\\\\CdromX\")的过滤设置(用IoAttachDeviceToDeviceStack挂上),。。。。。,

代码我是写得差不多了,不过启动后的效果是CDROM的上层驱动,只能收到来自文件系统层的消息,但我要收到来自CDROM的消息,就必须将其做成CDROM的下层过滤驱动,在WIN2000中(用AddDevice的能成功下层过滤)就需要在注册表中设置LowerFilters项以区分是下层驱动(不然就成了上层驱动),不知WinNT4的该怎么设置?还是另有关键点?
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-24 12:03
上层还是下层过滤可以用注册表设啊,:)厉害,我又上了一课。对了,我说说我的想法:你要做成CDROM的下层,那么可不可以这样做:做成SCSI端口驱动的上层,一样是在CDROM的下面,而且你IOATTACH的时候挂接以后是SCSI的最新上层,不关原来又没有过滤,这个都在最上面,那么就会紧挨着CDROM了,不知道我这样设想对不?试验试验?
根据地的兄弟们,团结就是力量
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-25 12:44
我试过了啊,IRP_MJ_SCSI中就是收不到应有的SRB,比如READ,WRITE,MODE_SENSE等,就只有最初能收到一个CLAIM_DEVICE,不知是不是哪里搞错了
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
ysr
ysr
驱动牛犊
驱动牛犊
  • 注册日期2001-05-11
  • 最后登录2015-01-29
  • 粉丝0
  • 关注0
  • 积分79分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-10-25 18:26
是不是应该截获IRP_MJ_DEVICE_CONTROL中的IOCTL_SCSI_PASS_THROUGH_DIRECT
游客

返回顶部