阅读:1561回复:6
当PDEVICE_OBJECT指针失效时怎么办?
问题是这样的:
我写的一个文件系统驱动,需要存储系统中所有硬盘设备的对象指针(PDEVICE_OBJECT),正常情况下,我使用这些指针是没有问题的。 但是,当系统移除某个硬盘设备(如usb设备或san的硬盘)后,我驱动中对应的PDEVICE_OBJECT指针所指向的设备对象就已经不存在了,但是,我驱动无法感知系统移除设备的事件,此后,我仍旧去访问这个非法的设备对象指针,结果导致page_fault(bug_check),蓝屏了。 请问坛里的兄弟们,有没有办法: 1、在文件系统驱动中感知系统对硬盘设备的remove操作,注意,是任何一块硬盘设备,不是我文件系统所mount的设备。(事实上,是我做备份用的磁盘设备) 2、IoBuildAsynchronousFsdRequest、IOCallDriver访问了非法的设备对象指针,一定要蓝屏吗?用try是否可以捕获异常处理之?还是有没有什么其它办法?访问不了设备没关系,蓝屏就很惨啊 |
|
沙发#
发布于:2008-01-12 20:14
访问前先用mmisaddressvaild检查一下是否有效
或者hook 一下iodeletedevice~~ |
|
|
板凳#
发布于:2008-01-12 22:07
ObReferenceObject,阻止设备对象删除。
|
|
地板#
发布于:2008-01-14 10:17
这些都没有用的,比如U盘,用户是可以直接硬拔出的。用户应该注册一个设备删除的接口,这是一个回调函数IoRegisterPlugPlayNotification,当用户删除硬盘时,会得到通知的,我想你应该知道接下来该怎么做吧。
|
|
地下室#
发布于:2008-01-16 13:55
WQXNETQIQI兄所说的mmisaddressvaild我试下看行不行:)
ObReferenceObject是不行的,按ddk说,应该是可以的,可以阻止设备对象被iomanger移除,可惜我这么做了,还是有问题。 zealsoft_zhu所说的用IoRegisterPlugPlayNotification的前提是得加一个块设备驱动,我做的是文件系统层的。 不知还有什么办法没? |
|
5楼#
发布于:2008-02-18 16:37
还没找到答案帖子就沉了哈。还望各位高手不吝赐教
|
|
6楼#
发布于:2008-02-18 17:07
ObReferenceObject是不行的,按ddk说,应该是可以的,可以阻止设备对象被iomanger移除,可惜我这么做了,还是有问题。
=========================== 具体是什么问题? |
|