我正在为Windows(XP / 7)平台编写一些C代码来检查与文件相关的权限 . 我想验证我正在阅读的文件不能由具有非提升权限的帐户写入 . 这就是我目前正在做的事情:
-
我得到与调用 GetNamedSecurityInfo 的文件关联的DACL
-
我用众所周知的SID调用 CreateWellKnownSid ,例如 WinAuthenticatedUserSid (用户组)
-
我调用 BuildTrusteeWithSid 以使用先前的SID构建TRUSTEE
-
我与先前创建的受托者调用 GetEffectiveRightsFromAcl 以获得有效的acl
-
我检查ACL是否包含Write Flag设置 .
此代码适用于Users组 . 那些可能对文件具有特定写入权限的其他组如Everyone,Guest或其他特定用户呢?我想找到一个解决方案,我不需要枚举所有可能的SID并检查所有这些 . 是否有我可以使用的SID,例如“除了管理员之外的任何东西”?
此致,Ant
1 回答
我采取略有不同的方法:
通过
GetExplicitEntriesFromAcl
获取所有ACE的文件及其所有父项选择
GRANT_ACCESS
和SET_ACCESS
ACE从所选ACE中获取受托人列表
对于每个受托人,执行访问检查 .
GetEffectiveRightsFromAcl
可能是最简单的解决方案 .你想要特别想想你想要对所有者做什么 . 他可以随时改变权利 .