阅读:4982回复:12
讨论一下磁盘驱动的LowerFilters
我做了一个最简单的过滤驱动,里面啥也没干,就是forward一下IRP。
如果这个Filter作为UpperFilters没问题,作为LowerFilters拦截个U盘也没问题,但是重启就死机。 大家遇到过这样的问题吗??? 其实我在AddDevice有考虑,不过滤硬盘的。 NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo) { // AddDevice PAGED_CODE(); NTSTATUS status; PDEVICE_OBJECT fido; if (!USB_Disk(pdo)) { return STATUS_UNSUCCESSFUL; } 。。。略 } |
|
|
沙发#
发布于:2009-01-14 11:26
# if (!USB_Disk(pdo))
# { # return STATUS_SUCCESS; # } |
|
板凳#
发布于:2009-01-14 20:37
注释掉了也死机
|
|
|
地板#
发布于:2009-01-15 13:52
不是让你注释掉,是让你返回STATUS_SUCCESS,那个#号是复制的时候论坛自己加上去的。
|
|
地下室#
发布于:2009-01-22 22:31
我即使不判断是否是usb disk,即所有设备都返回STATUS_SUCCESS。重启后依然死机
|
|
|
5楼#
发布于:2009-02-04 11:29
使用调试版调试下,应该很容易找到问题
以前我测试磁盘驱动的LowerFilter和UpperFilter都没有碰到你这样的问题 |
|
|
6楼#
发布于:2009-03-27 09:48
问题是否在这里?不一定,可能是你处理IRP_MJ_SICI 时候,里的写操作,或者读操作的时候 拦截了没把请求向下传递。结果硬盘读不了。重启蓝屏是因为重启以后 本地磁盘也加载驱动了。所以本地磁盘中的windows系统没法读取或者写入就蹦了。这问题我碰到次数很多。
解决方法:使用标准USB filter框架,然后自己填写功能 |
|
7楼#
发布于:2009-03-27 09:53
引用第6楼boildoctor于2009-03-27 09:48发表的 : 刚才写错了,是拦截IRP_MJ_SICI 时候,如果是处理了读操作,没向下传递,则无法识别磁盘。如果能识别磁盘,一写入就司机,则是写操作没处理,也没向下传递。重启电脑后,驱动加载到了本地磁盘上。导致本地磁盘windows系统没法写,或者没法读,任何一种,都会蓝屏。我前段时间几乎每天蓝屏10次以上。 |
|
8楼#
发布于:2009-03-30 10:32
文件名太长了?
改成8.3试试。 |
|
9楼#
发布于:2009-04-04 14:03
你简单将所有IRP都向下传递看是否成功,如果还是有问题,很可能是你安装有问题.
|
|
|
10楼#
发布于:2009-04-04 14:05
另外,请确认你是准备做disk.sys的lowerfilter还是class的lowerfilter或者其它
不同的安装是不一样的 |
|
|
11楼#
发布于:2009-04-12 23:19
我也出现了和楼主同样的问题,对IRP全部不处理也会蓝屏。但是在vmare6中调试没问题,只是在实际环境中会出现这种情况。
是否和驱动的加载顺序有关? |
|
12楼#
发布于:2009-04-13 10:42
当然loader顺序设置错误也会导致问题
|
|
|