首页
社区
课程
招聘
[求助]请教下关于U盘控制的两个关键性问题(看了驱网的老贴,头晕中~~~)
发表于: 2008-6-28 21:05 5851

[求助]请教下关于U盘控制的两个关键性问题(看了驱网的老贴,头晕中~~~)

2008-6-28 21:05
5851
翻阅了驱网大部分老贴,关于U盘控制(禁用,只读等控制)依然没有什么清晰的解决思路,因此某些描述也可能不对,希望不要误导新人,XD。

首先第一个问题,在哪里过滤?

通过我翻阅老贴得知成功的例子有

“驱动小妹” 的 “U盘只读可控制 驱动程序实例” http://bbs.driverdevelop.com/read.php?tid-104501-keyword-%D6%BB%B6%C1.html

已经其关键代码 更早的 “zhjie374” 的 “共享我写的一个USB过滤驱动,实现U盘只读控制” http://bbs.driverdevelop.com/read.php?tid-90057-keyword-%D6%BB%B6%C1.html

这两位前辈都是用的 ddk中toaster/filter程序为原形 原理就是过滤相应的IRP_MJ_SCSI。

最后的结果就是一个 加载到USBSTOR的LowerFilters 。

给我的感觉这样做貌似已经不属于文件系统过滤驱动了吧,个人觉得这属于设备过滤驱动了,都已经是在和SCSI总线驱动交换数据了。

所以我在想能否使用 DDK中的filesys\filter\sfilter为原形开发呢?因为这个比较熟悉点 呵呵

可以通过过滤拦截 IRP_MJ_CREATE等IRP 来实现禁用呢?还可以把禁用分为“不可浏览目录”与“可浏览目录但无法读写” (笑)

以上两种方法都涉及到第二个问题,怎么判断过滤的是U盘(或者称为移动存储设备)

“zhjie374”前辈貌似没有说明这个问题,按照我对“zhjie374”前辈描述的猜测,如果驱动成功加载到USBSTOR的LowerFilters下,那么就只有U盘会加载这个驱动

但是按照“驱动小妹”前辈的例子,根据本人的测试,以及参照其余一些前辈的帖子后发现,挂接到USBSTOR的LowerFilters会引起重启系统时BSOD,因为我也是菜鸟,无法理解其原因,但是看见有前辈提出,这样做即便本地磁盘也会加载这个驱动,于是BSOD

如果是在 filesys\filter\sfilter为原形下开发,那么怎么判断是U盘呢? 想了两条路:

1.笨笨的方法:将驱动加载到所有卷上,然后判断是U盘加载卷的时候(准确的说应该是加载完成后),记录下对应的“盘符”(或者说“卷名”)。过滤IRP时判断是否是相应卷上的操作,如果是则拦截,不是则放行。

2.理想的方法:在驱动加载到卷上的时候,就判断这个卷对应的物理设备是否是U盘,是则加载,否则不加载。

关于这两个思路,对于第一个,我觉得可以在应用层得到U盘的插入事件,但是有两个问题:首先就是效率问题,明明不用过滤本地磁盘,还加载到本地磁盘的卷上显得太笨笨了。然后就是安全问题,因为应用层收到U盘插入设备的时候,卷已经加载完毕,可以正常读写,那么在这其中就可能造成本来应该禁用的U盘有段时间是可访问的。

于是提出第二的思路,但是可惜没有找到相应的示例,当然也考虑其实这是个错误的方法,因为既然是文件系统,那就应该屏蔽了下层的硬件介质,不过是否有更好的办法呢?

比如围绕USBSTOR编写驱动,在U盘加载设备驱动的时候就开始跟踪,做好标示,然后在加载文件系统的时候识别标示,再决定是否加载过滤驱动?

希望有前辈能指点一二,最希望的是能说明下应该查阅IFS Kit Documentation的哪个部分?因为平时都不知道怎么用IFS Kit Documentation,觉得不知如何下手查阅,有种身在宝山空手归的感觉 T_T。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
你需要一个Pnp Notification Callback和相应的Bus Filter
2008-6-29 04:31
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢 drwch 前辈的回复

你所说的PNP通知回调是在哪一层过滤驱动中呢? 而且只要涉及到PNP就应该属于设备过滤驱动了吧。我是想在文件系统过滤驱动中完成相应的监测。

现在的问题就是如何在文件系统将“卷”绑定到“存储设备”的时候,检测该“卷”绑定到的是“移动设备”而不是“本地设备”。

不知道在哪里有相关的文档。希望各位前辈能指点一二。

PS:我能否自己发送一个IRP检测物理设备的类型呢?哪里可以找到相关文档?
2008-6-29 21:02
0
游客
登录 | 注册 方可回帖
返回
//