您的位置:首页 > 产品设计 > UI/UE

IRP_MN_MOUNT_VOLUME and ObQueryNameString

2011-11-22 20:33 597 查看
From:http://www.osronline.com/showThread.cfm?link=25276

<span style="font-size:18px;">This is a common problem for filter drivers trying to query the name of a file object.IIRC, when you call ObQueryNameString for a file object, it calls the query name method on the file object type.  That method is implemented by the function IopQueryName which in turn calls IopQueryXxxInformation.  If the file was opened for non-overlapped IO, the default for WIN32, IopQueryXxxInformation tries to synchronize the name query--IRP_MJ_QUERY_INFORMATION--with other operations on the file object, such as the IRP_MJ_CLEANUP you are filtering.  This synchronization is done by treating the KEVENT Lock field of the file object like a mutex.  Because ZwClose already locked the file object prior to your filter receiving the IRP_MJ_CLEANUP, and a KEVENT has no concept of recursive acquisition, you are experiencing a deadlock in IopQueryXxxInformation when it tries to lock the file object.I suggest you build the IRP_MJ_QUERY_INFORMATION with a FileInformationClass of FileNameInformation, and send it yourself.  This will bypass acquiring the file object's lock, and the FSD will do the necessary synchronization using its FCB resources.</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐