首页
社区
课程
招聘
[求助]磁盘过滤驱动的问题
发表于: 2013-3-16 00:19 5428

[求助]磁盘过滤驱动的问题

2013-3-16 00:19
5428
我修改了Diskperf,安装了一个磁盘过滤驱动,目的是在u盘安全弹出时写入数据到U盘,但是我在DiskPerfRemoveDevice里面使用FltWriteSectors写入返回找不到磁盘,下了断点貌似pnp消息是下层驱动先接收~~那么该怎么实现呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你在IRP_MN_REMOVE_DEVICE的IRP IoCallDriver之前下发到下层设备前去写吧。
PNP消息是从栈顶发送的,然后传递到栈底的,所以肯定是过滤驱动先接收到的,而且,过滤驱动收到后,处理自己的事情,然后IoCallDriver发送到下一层,等下一层删除设备后返回到过滤驱动,过滤驱动再删除自己的设备。你应该在下层设备删除前,写入数据。

在DiskPerfRemoveDevice中,你应该在DiskPerfForwardIrpSynchronous前FltWriteSectors!!!

不过对于直接拔出U盘,估计就没辙了,因为总线设备总是在设备被拔出后,才能检测到变化,然后通知PNP设备已经被拔出,顺序是这样的
1:你直接拔出U盘
2:总线检测到U盘被拔出,通知PNP管理器,PNP管理器发送IRP_MN_SURPRISE_REMOVAL IRP
3:发送IRP_MN_REMOVE_DEVICE IRP

这种情况,当你收到通知,其实U盘已经不存在了,这也就是为什么直接拔出U盘可能导致U盘数据被毁的原因。如果你想保存信息,建议你定时保存吧
2013-3-16 11:32
0
雪    币: 862
活跃值: (329)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
3
感谢回复,问题是:

    我打算先做一个原型出来,先能安全弹出时写入即可,但是即使我选择安全弹出,并且我也是在DiskPerfForwardIrpSynchronous 前 调用的FltWriteSectors  ,结果返回值是STATUS_DEVICE_DOES_NOT_EXIST啊~~
2013-3-16 15:45
0
游客
登录 | 注册 方可回帖
返回
//