阅读:1625回复:4
有谁知道,在写例程中发irp获取文件名是否会出问题????
如果有问题,那应该怎么办?
我目前要获取的文件名不一定要全路径。都是需要在写例程中获取路径 本来可以通过fileobject的filename域,但是在ntfs格式下对office文档的操作中有可能filename域为null。 我还自己构造了一个数据结构。在create中将fcb和文件名保存下来,在close中将该数据结构析构。本来也所有问题解决了,但是 还是有例外,就是office的xls文档。当关闭比较大的xls文档后,这个时候会发一个close。在close中我保存的数据结构析构了,但是系统在close之后居然还发个write的irp下来。这个时候fileobect的filename为null的,并且我保存的数据结构在close中析构了。这个时候无法获取文件名了。想通过发irp来获取文件名,但是听说在TopIrplevel比较高的例程中容易出现死锁的情况,不知道是否是这样。 |
|
沙发#
发布于: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 |
|
板凳#
发布于:2008-11-05 15:42
会出问题,比如过长的文件名可能获取成DOS格式~
|
|
地板#
发布于:2008-11-06 23:57
我有短名处理,这到不怕。就怕出现蓝屏,死锁什么的~~~~~~~~~
|
|
地下室#
发布于:2008-11-07 00:22
这个你应该到OSR仔细看一个帖子,就是关于如何追踪文件状态的那个帖子,并不是Close就析构,是有计数方法的,去吧
|
|
|