鉴于我有一个所有进程的所有文件句柄的列表,我怎么能找出这些句柄中的哪一个实际上是锁定文件?
根据我的理解,我可以简单地尝试打开文件并尝试获取所有权限,如果出现问题,我知道它已被锁定。但这听起来非常低效。我的意思是我已经有句柄了没有办法检查句柄有哪些权限?
我希望看到适用于Windows XP及更高版本的解决方案。
我已经搜索了GetFileInformationByHandleEx函数,但我找不到任何有关访问权限的信息。 :/
编辑: 我不需要有关文件锁的实时信息。我打算处理的文件将被锁定,直到某些应用程序关闭或根本不被锁定。
答案 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
使用FileAccessInformation
和FileInformationClass
参数的{{1}}值来访问相同的信息。