fcgboy
驱动牛犊
驱动牛犊
  • 注册日期2007-08-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望113点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
阅读:1625回复:4

有谁知道,在写例程中发irp获取文件名是否会出问题????

楼主#
更多 发布于:2008-11-04 22:17
如果有问题,那应该怎么办?
我目前要获取的文件名不一定要全路径。都是需要在写例程中获取路径

本来可以通过fileobject的filename域,但是在ntfs格式下对office文档的操作中有可能filename域为null。
我还自己构造了一个数据结构。在create中将fcb和文件名保存下来,在close中将该数据结构析构。本来也所有问题解决了,但是
还是有例外,就是office的xls文档。当关闭比较大的xls文档后,这个时候会发一个close。在close中我保存的数据结构析构了,但是系统在close之后居然还发个write的irp下来。这个时候fileobect的filename为null的,并且我保存的数据结构在close中析构了。这个时候无法获取文件名了。想通过发irp来获取文件名,但是听说在TopIrplevel比较高的例程中容易出现死锁的情况,不知道是否是这样。
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2008-11-04 23:42
"在create中将fcb和文件名保存下来,在close中将该数据结构析构", this is the right way.

I think you mis-understand the meaning of MJ_CLOSE. "Receipt of the IRP_MJ_CLOSE request indicates that the reference count on a file object has reached zero". This doesn't mean FCB must be released. Some other file objects may still refer to this FCB. You need to have a reference count mechanism. OSR's article "Tracking State and Context - Reference Counting for File System Filter Drivers" is very good for this.

Actually I think Per-Stream-Context or File/Stream Context can solve your problem.
    http://msdn.microsoft.com/en-us/library/ms790769.aspx
    http://msdn.microsoft.com/en-us/library/aa488223.aspx
jyss1644
驱动牛犊
驱动牛犊
  • 注册日期2007-08-15
  • 最后登录2011-04-11
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望180点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-11-05 15:42
会出问题,比如过长的文件名可能获取成DOS格式~
fcgboy
驱动牛犊
驱动牛犊
  • 注册日期2007-08-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望113点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-11-06 23:57
我有短名处理,这到不怕。就怕出现蓝屏,死锁什么的~~~~~~~~~
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-11-07 00:22
这个你应该到OSR仔细看一个帖子,就是关于如何追踪文件状态的那个帖子,并不是Close就析构,是有计数方法的,去吧
提问归提问,还是只能靠自己
游客

返回顶部