我有一些性能计数器,它们会写入默认位置 ( %SYSTEMDRIVE%\Perflogs
) 中的 CSV 文件。它创建的目录是“特殊的”。当我尝试浏览它们时,资源管理器会抱怨
我可以单击“继续”,然后我就不再遇到使用资源管理器浏览目录的问题了。
但是,如果我尝试通过未提升权限的 cmd shell 访问目录,则会收到 ACCESS_DENIED 错误。使用提升权限的 cmd,我可以毫无问题地访问数据文件。
icacls 报告了有关该目录的信息(在我浏览该目录之前)
MEMTEST2_20190724-000004 NT AUTHORITY\SYSTEM:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
BUILTIN\Performance Log Users:(OI)(R)
我正在运行的用户已经在Performance Log Users
。
- 当我“永久访问该文件夹”时实际上发生了什么?
- 这个目录实际上是如何保护自己免受非提升级别的访问的?
- 有没有一种好的方法来“取消保护”目录,而无需重新配置性能计数器以写入其他位置?
- 我读这个答案,其中描述了如何创建事件监听器以在计数器启动时取消保护目录。没有其他方法了吗?
答案1
此行为是由用户帐户控制引起的:即使您属于管理员组,您运行的进程(包括 Windows 资源管理器和 CMD)实际上也没有管理权限,您必须使用“以管理员身份运行”命令明确请求它们;但是,这不能对 Explorer 本身执行,因为它始终在运行,因此您无法运行它的另一个提升的实例(除非您先将其终止,从而丢失您的 shell;这可以完成,但需要笨拙的解决方法)。
但是,Windows 资源管理器本身知道 UAC 的工作原理;因此,当您尝试访问只有管理员才有权访问的文件夹时,它会检测到您是管理员成员,但它没有在提升模式下运行,它会尝试提供帮助并询问您是否要“永久访问”该文件夹;如果您单击Continue
您的用户帐户的显式授予 ACE 已添加到文件夹中:这允许您直接访问文件夹,而不必依赖您的管理权限,从而绕过 UAC。
令我感到疑惑的是,这是 UAC 和 Explorer 的标准行为(尽管存在争议),但是只有涉及行政权利时才会发生这种情况;如果您有权访问某个文件夹,因为您属于可以访问该文件夹的普通组(非管理员),则 UAC 根本不应该介入。
除非 Windows 在 UAC 方面将“性能日志用户”组视为与“管理员”组一样,因此需要提升才能实际使用其成员资格;如果是这种情况,这对我来说是个新闻,我无法在任何地方找到它的引用。