在Windows中查找文件的权限

我在Linux工作。 在具有statfunction的Linux中,我们可以提取文件的权限。

同样,我们如何才能在Windows中提取文件的权限。

msdn中的_stat函数声明在stat缓冲区中设置了权限位。 但它并没有给出如何提取它们。

http://msdn.microsoft.com/en-us/library/14h5k7ff%28VS.71%29.aspx

结构统计结构在Windows上包含任何文件权限信息。 Windows的安全性更为复杂,你需要GetFileSecurity()来检索文件的DACL。 这很少在Windows程序中完成,您通常会让Windows评估有效的权限并处理“您无法做到”错误返回。 GetLastError()中的ERROR_ACCESS_DENIED。

Windows使用ACL(访问控制列表)来控制对文件(或其他内核对象)的访问。 您可以使用GetFileSecurity获取文件的ACL(您需要DACL,而不是SACL)。 然后你可以通过GetEffectiveRightsFromAcl获得实际的权限(权限)。

这有一个竞争条件,所以它不是一个好主意。 特别是,在检索DACL的时间和尝试对文件执行操作的时间之间,DACL可能已经更改,因此检索到的内容不再正确。

我从你提供的链接中读到,在_stat和朋友中实现的文件权限是UNIX专用的,并且没有用于NTFS,FAT和其他Windows文件系统。

我想你会有更多的运气使用经典的FindFirstFile和相关函数读取文件权限。 你将需要处理这里描述的函数返回的句柄。这些是非常难以移植的,但是由于C ++没有文件系统支持,它们是唯一不错的选择。

MSDN没有像它应该那样多的超链接,你需要搜索一下来找到_stat Structure st_mode Field Constants 。

在Unix和Windows上,只能获得文件的基本权限,而不能访问控制列表。 由于Windows使用ACL很多, _stat不会给你很多有用的信息。 您需要使用本地Windows API函数来获取ACL。