阅读:3324回复:6
usb磁盘过滤,为什么scsi例程中cdb->CDB6GENERIC.OperationCode 总为0
我是把ddk中filter.c例子增加了IRP_MJ_SCSI例程,在 {36FC9E60-C465-11CF-8056-444553540000} 下增加了LowerFilters="MyDevUpper",然后在service下增加了MyDevUpper。
插入u盘后会cdb->CDB6GENERIC.OperationCode有很多非0,其中还有几个SCSIOP_READ,但是之后就全是0了。 从来没有观察到有SCSIOP_WRITE。 参考了以前的帖子:http://bbs.driverdevelop.com/htm_data/16/0504/90057.html |
|
沙发#
发布于:2009-08-11 13:55
回 楼主(smh_mouse) 的帖子
哦,我发现,插入u盘后,会进入2次 FilterAddDevice 这个例程,在这里我打印 PhysicalDeviceObject->DriverObject->DriverName.Buffer,发现两次都为"\Driver\usbhub"。可能是我挂接的不对。 我只在 {36FC9E60-C465-11CF-8056-444553540000} 下增加 LowerFilters对么? |
|
板凳#
发布于:2009-08-13 11:09
知道了,ddk中的toaster\filter的例子是usb过滤。
应该用diskperf这个例子,这个例子才是磁盘过滤,是我想要的。在AddDevice中进行判断,如果是 \Driver\USBSTOR 才创建,否则就直接返回,这样就可以只过滤u盘了,而且可以得到扇区的读写数据。 |
|
地板#
发布于:2009-09-07 10:39
回 2楼(smh_mouse) 的帖子
在AddDevice中进行判断,如果是 \Driver\USBSTOR 才创建,否则就直接返回,这样就可以只过滤u盘了,而且可以得到扇区的读写数据。如何进行判断?我现在也正需要弄这个,我的QQ是262298219.希望多交流 |
|
地下室#
发布于:2009-09-07 20:29
字符串比较PhysicalDeviceObject->DriverObject->DriverName
|
|
5楼#
发布于:2009-11-25 11:02
自己结一下吧,为了后人不再走弯路,知识只有传播才有价值.
u盘scsi扇区过滤的话应该在{4D36E967-E325-11CE-BFC1-08002BE10318}下增加LowerFilters.而不是像我先前说的{36FC9E60-C465-11CF-8056-444553540000} 下. IRP_MJ_SCSI例程中就可以处理SCSIOP_WRITE和SCSIOP_READ了. |
|
6楼#
发布于:2009-12-11 14:36
学习
|
|