当PDEVICE_OBJECT指针失效时怎么办?

sunxinyu   2008-1-12 17:25 楼主
问题是这样的:
我写的一个文件系统驱动,需要存储系统中所有硬盘设备的对象指针(PDEVICE_OBJECT),正常情况下,我使用这些指针是没有问题的。
但是,当系统移除某个硬盘设备(如usb设备或san的硬盘)后,我驱动中对应的PDEVICE_OBJECT指针所指向的设备对象就已经不存在了,但是,我驱动无法感知系统移除设备的事件,此后,我仍旧去访问这个非法的设备对象指针,结果导致page_fault(bug_check),蓝屏了。

请问坛里的兄弟们,有没有办法:
1、在文件系统驱动中感知系统对硬盘设备的remove操作,注意,是任何一块硬盘设备,不是我文件系统所mount的设备。(事实上,是我做备份用的磁盘设备)
2、IoBuildAsynchronousFsdRequest、IOCallDriver访问了非法的设备对象指针,一定要蓝屏吗?用try是否可以捕获异常处理之?还是有没有什么其它办法?访问不了设备没关系,蓝屏就很惨啊

回复评论 (5)

没有关联的设备没法感知,只能主动查询。
使用指针前先用MmIsAddressValid查一下指针是否有效。
点赞  2008-1-16 16:07
还有没有哪位高手能指教下呢
点赞  2008-2-24 15:37
获得device object时,ObReferenceObjectByPointer , 不再用时ObDereferenceObject
点赞  2008-2-24 19:42
cnzdgs 的方法非常不错.
点赞  2008-2-25 16:16
我也想知道,正在找這方面的資料~~~~~
点赞  2008-5-1 10:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复