能力值:
( 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盘数据被毁的原因。如果你想保存信息,建议你定时保存吧
|
能力值:
( LV9,RANK:165 )
|
-
-
3 楼
感谢回复,问题是:
我打算先做一个原型出来,先能安全弹出时写入即可,但是即使我选择安全弹出,并且我也是在DiskPerfForwardIrpSynchronous 前 调用的FltWriteSectors ,结果返回值是STATUS_DEVICE_DOES_NOT_EXIST啊~~
|
|
|