GENERIC_ALL 和文件夹/文件 ACL? GENERIC_ALL 到底是做啥的?

Posted

技术标签:

【中文标题】GENERIC_ALL 和文件夹/文件 ACL? GENERIC_ALL 到底是做啥的?【英文标题】:GENERIC_ALL and folder/file ACLs? What does GENERIC_ALL really do?GENERIC_ALL 和文件夹/文件 ACL? GENERIC_ALL 到底是做什么的? 【发布时间】:2012-05-09 01:20:36 【问题描述】:

我最近重新设计了我们文件服务器上的安全性,将完全控制的大部分内容标记为修改。现在我的开发人员告诉我,每当他们使用 GENERIC_ALL 打开文件(例如使用 CreateFile())时,他们都会收到拒绝访问消息。

经过研究,似乎没有任何迹象表明GENERIC_ALL 不仅仅是GENERIC_EXECUTE + GENERIC_WRITE + GENERIC_READ;然而,情况似乎并非如此,因为开发人员能够将三个常量值相加,并将其用于CreateFile()

所以,我问...GENERIC_ALL 到底是做什么的?

谢谢,

马特

【问题讨论】:

就像机器奇迹中的某个该死的幽灵一样,我今天在遇到 TortoiseHg 无法在用户共享上创建文件的超时问题时想到了这一点。谁刚刚更新了帖子,我欠你一个。 【参考方案1】:

GENERIC_ALL 访问权限包括所有可能的访问权限,包括 WRITE_DAC(更改权限)和WRITE_OWNER(更改所有者)等。 File Security and Access Rights 页面显示了GENERIC_* 访问权限如何映射到文件的特定访问权限。 File Access Rights Constants 页面显示了所有可能的文件访问权限(可能在使用GENERIC_ALL 时都会被请求)。

您应该鼓励您的开发人员只请求他们实际需要的访问级别。例如,很少会同时为GENERIC_EXECUTEGENERIC_WRITE 打开一个文件。

【讨论】:

【参考方案2】:

GENERIC_ALL 表示“所有可能的访问级别”(对于文件,它的名称为 FILE_ALL_ACCESS)。由于您删除了完全控制,尝试打开 GENERIC_ALL 将失败并显示访问被拒绝,因为(例如)WRITE_DAC 不再被授予。

【讨论】:

以上是关于GENERIC_ALL 和文件夹/文件 ACL? GENERIC_ALL 到底是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章

golang windows内存文件映射

Linux 访问控制acl

sh 重复更改媒体文件和文件夹权限/ ACL

使用 set-acl 和 powershell 设置继承和传播标志

使用 C++ 递归扫描目录上的 ACL

文件的权限和访问控制列表(ACL)