Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1482回复:9

用IoGetDeviceObjectPointer打开的设备如何关闭?

楼主#
更多 发布于:2003-05-23 15:20
用户被禁言,该主题自动屏蔽!

最新喜欢:

icedogicedog
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-05-23 15:24
When unloading, a driver can dereference the file object as a means of indirectly dereferencing the device object. To do so, the driver calls ObDereferenceObject from its Unload routine, passing the file object pointer returned by GetDeviceObjectPointer.

再打pp :D
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-05-23 15:33
用户被禁言,该主题自动屏蔽!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-05-23 15:36
no :D
但是不至于死机吧? :o
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-05-23 16:00
用户被禁言,该主题自动屏蔽!
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝1
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-23 16:29
用 ObDereferenceObject(...)
你的认可是对我最大的鼓励!
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-09 10:39
请求再打pp  :D
必须在DriverUnload里面调用吗?

我把它们用在是在同一个函数serialeventtracking中
ObReferenceObject(readerx->pFileObj);
用完了就
ObDereferenceObject(readerx->pFileObj);

2000下没问题,xp下为什么不行泥?

还有就是
NTSTATUS
  IoGetDeviceObjectPointer(
  IN PUNICODE_STRING  ObjectName,
  IN ACCESS_MASK  DesiredAccess,
  OUT PFILE_OBJECT  *FileObject,
  OUT PDEVICE_OBJECT  *DeviceObject
  );
返回两个pointer,是不是只需要reference dereference FileObject就可以??
有没有必要reference dereference返回的DeviceObject呢?
几位高手多多指教指教
还是我
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2004-05-09 11:05
不错,只需要reference dereference FileObject就可以
因为我们在用IoGetDeviceObjectPointer的时候,系统会先通过ZwOpenFile,ObRefenencrObjectHandle来获得目标设备的FILEOBJ,然后通过这个FILEOBJ来用IoGetRelatedDeviceObject获得目标设备对象,所以也是为什么在退出前需要dereference FileObject,另外DDK里也有说明
This routine also returns a pointer to the corresponding file object. When unloading, a driver can dereference the file object as a means of indirectly dereferencing the device object. To do so, the driver calls ObDereferenceObject from its Unload routine, passing the file object pointer returned by IoGetDeviceObjectPointer. Failure to dereference the device object in a driver\'s Unload routine prevents the next-lower driver from being unloaded. However, drivers that close the file object before the unload process must take out an extra reference on the device object before dereferencing the file object. Otherwise, dereferencing the file object can lead to a premature deletion of the device object.

花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2004-05-09 11:13
另外在IoGetRelatedDeviceObject里系统会调用IoGetAttachedDevice来搜索设备栈,找到其顶层设备对象返回给你,所以也是为什么DDK里说IoGetDeviceObjectPointer establishes a \"connection\" between the caller and the next-lower-level driver.也就是说给你的并不一定是目标设备对象的指针,如果其上有过滤驱动的话,给你的将是最上层的过滤设备对象指针,从而可以确保你的对象能够始终处于设备栈顶,当然你也可以把自己的设备插到栈当中,不过当中的很多调整工作,也够受的了,嘿嘿......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
tanky
驱动牛犊
驱动牛犊
  • 注册日期2002-03-04
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-09 11:15
IoGetDeviceObjectPointer应该自己就增加了对设备的引用了吧,不用再ObReferenceObjectByPointer了。
DDK里面说:
However, drivers that close the file object before the unload process must take out an extra reference on the device object before dereferencing the file object. Otherwise, dereferencing the file object can lead to a premature deletion of the device object.
意思就是只要不关闭file object ,就可以使用device object,如果要在unload之前关闭file object而又想继续使用device object,才需要增加对device object的引用。
不知道可以混点分不?
游客

返回顶部