增加性能计数器所需的权限

Posted

技术标签:

【中文标题】增加性能计数器所需的权限【英文标题】:Permissions required to increment performance counters 【发布时间】:2013-01-02 07:17:43 【问题描述】:

我很难确定。尝试在计数器上调用 .Increment 时,我只发生了一次 InvalidOperationException/Access Denied(我认为)。这导致我得到以下信息:

http://support.microsoft.com/kb/555129

围绕移动 ASP.NET 过程的最大问题 将性能计数器更新到生产中的应用程序 环境就是权限。默认情况下,为了增加 性能计数器,用户需要有管理员或权力 用户权限。

从那里我将用户添加到高级用户组并继续我的方式没有问题。后来我发现“超级用户”不再具有 Vista 之外的任何权限,这让我回到了同一篇文章:

幸运的是,考虑到这些替代方案,事实证明 更新性能计数器所需的权限集要小得多 而不是以管理员或高级用户身份运行。在注册表项中 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib,设置 访问控制列表,以便必要的用户拥有完全控制权。在 我们最初的示例,ASPNET 用户将被授予完全控制权, 但是任何需要更新表演的人都可以访问 计数器。

但即使这样似乎也不是真的,因为我现在已经返回并从超级用户组中删除了我的测试用户,我的应用程序仍在递增计数器而没有问题。

此外,如果要设置权限,似乎会在 HKLM\System\CurrentControlSet\services\ 下的个人计数器上。

我完全承认我的代码可能存在其他问题,导致我最初的权限问题。但是,我需要将其一直部署回 XP,因此确认以上内容是否只是过时的信息或完全不正确对我来说很重要。我很快就能自己确认这一点,但如果有人可以验证信息或向我指出具体的文档,那就太好了。

【问题讨论】:

【参考方案1】:

这里有两种权限:

    修改性能计数器类别的权限

    通过.NET代码调用修改性能计数器的权限

对于第一个,您只需要修改注册表项 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib 的权限(=手动添加或将用户添加到性能日志用户等..)和其他一些普通用户具有(例如访问 HKLM\SYSTEM\CurrentControlSet\Services),如 KB 中所述。

第二个与代码访问安全(CAS)策略有关。 CAS 策略是/是一种机制,用于确定执行代码是否具有操作权限(通常在资源上,例如文件系统或性能计数器),如果没有,则抛出 SecurityExeption。 CAS 策略是 obsolete,因为 .NET 4 由于 various 原因(例如,除了 .NET 代码之外还有本机 Win32 API)。

如果你想了解 CAS 政策,这是一篇不错的文章:Understanding .NET Code Access Security

启用 CAS 后,可以创建有关计算机上运行的代码的策略,并设置它是否可以递增或设置计数器的原始值,或者是否可以引发安全异常(可能的权限的性能计数器在PerformanceCounterPermissionAccess)。

基本上如果你有 .NET 4,你可以忽略 CAS 策略(它已被关闭),之前的版本使用 mscorcfg.msc 检查程序的权限。

【讨论】:

对于具有应用程序池标识的站点 LocalSystem 什么帐户要添加到性能日志用户?

以上是关于增加性能计数器所需的权限的主要内容,如果未能解决你的问题,请参考以下文章

Windows性能计数器配置应用

在Windows上保存性能监视器中添加的内容

性能测试指标

使用性能计数器获得正常运行时间的权限问题

为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权限

在 Windows 上读取性能数据计数器是不是需要任何特殊的安全权限?