检查文件是否被进程文件句柄锁定

时间:2016-04-14 14:46:20

标签: c++ windows winapi filehandle filelock

鉴于我有一个所有进程的所有文件句柄的列表,我怎么能找出这些句柄中的哪一个实际上是锁定文件?

根据我的理解,我可以简单地尝试打开文件并尝试获取所有权限,如果出现问题,我知道它已被锁定。但这听起来非常低效。我的意思是我已经有句柄了没有办法检查句柄有哪些权限?

我希望看到适用于Windows XP及更高版本的解决方案。

我已经搜索了GetFileInformationByHandleEx函数,但我找不到任何有关访问权限的信息。 :/

编辑: 我不需要有关文件锁的实时信息。我打算处理的文件将被锁定,直到某些应用程序关闭或根本不被锁定。

2 个答案:

答案 0 :(得分:1)

此问题与Win32 files locked for reading: how to find out who's locking them重复。

此外,Hans Passant的评论是正确的:查询任何Win32文件的锁定状态会产生陈旧信息。忽视此警告将导致难以发现的错误。

如果您控制了您认为将访问文件的所有代码,最好使用named pipe进行进程间通信,而不是查询锁定的文件。

答案 1 :(得分:0)

您可以使用NtQueryObject API获取有关句柄的信息,包括以下内容:

ULONG Attributes;
ACCESS_MASK GrantedAccess;

或者,您可以使用FileModeInformation使用FileAccessInformationFileInformationClass参数的{{1}}值来访问相同的信息。