在Windows上检查非高架用户的文件权限

时间:2012-02-24 14:19:13

标签: c++ windows file-permissions

我正在为Windows(XP / 7)平台编写一些C ++代码来检查与文件关联的权限。我想验证我正在阅读的文件不能由具有非提升权限的帐户写入。这就是我目前正在做的事情:

  • 我得到与调用 GetNamedSecurityInfo
  • 的文件关联的DACL
  • 我使用众所周知的Sids调用 CreateWellKnownSid ,例如 WinAuthenticatedUserSid (用户组)
  • 我致电 BuildTrusteeWithSid 以使用之前的SID构建TRUSTEE
  • 我与先前创建的受托人联系 GetEffectiveRightsFromAcl 以获得有效的acl
  • 我检查ACL是否包含Write Flag set。

此代码适用于Users组。那些可能对文件具有特定写入权限的其他组如Everyone,Guest或其他特定用户呢?我想找到一个解决方案,我不需要枚举所有可能的SID并检查所有这些SID。是否有我可以使用的SID,例如"除了管理员以外的任何东西"?

此致 蚂蚁

1 个答案:

答案 0 :(得分:1)

我采取了稍微不同的方法:

  1. 通过GetExplicitEntriesFromAcl获取所有ACE的文件及其所有父项
  2. 选择GRANT_ACCESSSET_ACCESS ACE
  3. 从所选ACE的
  4. 中获取受托人列表
  5. 对于每个受托人,执行访问检查。 GetEffectiveRightsFromAcl可能是最简单的解决方案。
  6. 您想要具体考虑您想要对所有者做什么。他可以随时改变权利。