【问题标题】:Get list of folders protected by UAC获取受 UAC 保护的文件夹列表
【发布时间】:2011-06-16 13:07:27
【问题描述】:

如何在启用 UAC 的情况下获取受保护的写文件夹列表? 需要此信息的进程以管理员权限(安装程序)启动。

【问题讨论】:

  • 假设它“在 C: 的根目录中松散”(即,不在 C: 下的某个文件夹中)和“ProgramFiles 下的所有内容”,您不会出错 - 其确切位置取决于你的安装。也可能是 Windows 文件夹。你问是因为你想让你的代码做一些不同的事情吗?最好尝试非提升,然后捕获 AccessDenied 并在这种情况下做一些事情。

标签: c++ windows uac


【解决方案1】:

UAC 不保护文件夹。 UAC 会从用户的访问令牌中去除管理员 SID,将他变成普通的受限(“普通”)用户。应用程序可以通过清单请求提升 - 然后整个过程使用管理员令牌运行。

如果文件夹在启用 UAC 的情况下不可写入,则表示已设置 NTFS 安全性,因此普通用户无法写入,但管理员可以。作为补救措施,要么更改这些文件夹的权限,要么运行提升的应用程序(或重新设计它,使其写入普通用户可以访问的位置)。

如果您指的是 UAC 虚拟化(将写入尝试从系统区域重定向到用户配置文件):here 很好地描述了我从中复制以下内容的功能:

  • 虚拟化仅适用于:
    • 32 位交互进程
    • 管理员可写文件/文件夹和注册表项
  • 虚拟化被禁用:
    • 64 位进程
    • 非交互式进程
    • 模拟的进程
    • 内核模式调用者
    • 具有请求执行级别的可执行文件

【讨论】:

    【解决方案2】:

    据我所知,没有 API 方法可以做到这一点。要手动执行此操作,您必须尝试写入每个文件夹并查看是否有任何异常。让问题更加复杂的是,您可能会触发文件虚拟化,在这种情况下您将能够写入,但它会转到不同的位置。

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 2014-12-16
      • 2012-02-16
      • 2011-09-15
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2014-01-22
      • 2012-10-02
      相关资源
      最近更新 更多