niecry
驱动牛犊
驱动牛犊
  • 注册日期2005-12-26
  • 最后登录2009-07-11
  • 粉丝0
  • 关注0
  • 积分117分
  • 威望17点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
阅读:1561回复:6

当PDEVICE_OBJECT指针失效时怎么办?

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

请问坛里的兄弟们,有没有办法:
1、在文件系统驱动中感知系统对硬盘设备的remove操作,注意,是任何一块硬盘设备,不是我文件系统所mount的设备。(事实上,是我做备份用的磁盘设备)
2、IoBuildAsynchronousFsdRequest、IOCallDriver访问了非法的设备对象指针,一定要蓝屏吗?用try是否可以捕获异常处理之?还是有没有什么其它办法?访问不了设备没关系,蓝屏就很惨啊
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2008-01-12 20:14
访问前先用mmisaddressvaild检查一下是否有效
或者hook 一下iodeletedevice~~
驱动开发者 呵呵
AlexSho
驱动牛犊
驱动牛犊
  • 注册日期2008-01-10
  • 最后登录2017-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望164点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2008-01-12 22:07
ObReferenceObject,阻止设备对象删除。
zealsoft_zhu
驱动小牛
驱动小牛
  • 注册日期2004-03-30
  • 最后登录2014-07-30
  • 粉丝2
  • 关注0
  • 积分22分
  • 威望375点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-01-14 10:17
这些都没有用的,比如U盘,用户是可以直接硬拔出的。用户应该注册一个设备删除的接口,这是一个回调函数IoRegisterPlugPlayNotification,当用户删除硬盘时,会得到通知的,我想你应该知道接下来该怎么做吧。
niecry
驱动牛犊
驱动牛犊
  • 注册日期2005-12-26
  • 最后登录2009-07-11
  • 粉丝0
  • 关注0
  • 积分117分
  • 威望17点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-01-16 13:55
WQXNETQIQI兄所说的mmisaddressvaild我试下看行不行:)
ObReferenceObject是不行的,按ddk说,应该是可以的,可以阻止设备对象被iomanger移除,可惜我这么做了,还是有问题。
zealsoft_zhu所说的用IoRegisterPlugPlayNotification的前提是得加一个块设备驱动,我做的是文件系统层的。
不知还有什么办法没?
niecry
驱动牛犊
驱动牛犊
  • 注册日期2005-12-26
  • 最后登录2009-07-11
  • 粉丝0
  • 关注0
  • 积分117分
  • 威望17点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-02-18 16:37
还没找到答案帖子就沉了哈。还望各位高手不吝赐教
AlexSho
驱动牛犊
驱动牛犊
  • 注册日期2008-01-10
  • 最后登录2017-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望164点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2008-02-18 17:07
ObReferenceObject是不行的,按ddk说,应该是可以的,可以阻止设备对象被iomanger移除,可惜我这么做了,还是有问题。

===========================

具体是什么问题?
游客

返回顶部