Разрешения, необходимые для увеличения счетчиков производительности

У меня возникают трудности с определением разрешений, необходимых для увеличения счетчика производительности. У меня было только одно событие InvalidOperationException/Access Denied (я думаю) при попытке вызвать .Increment на счетчике. Это привело меня к следующей информации:

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

Самая большая проблема, связанная с процессом перемещения ASP.NET приложение, которое обновляет счетчики производительности в производстве среда - это разрешения. По умолчанию для увеличения счетчик производительности, пользователь должен иметь администратора или власти Права пользователя.

Оттуда я добавил пользователя в группу опытных пользователей и продолжал свой путь без проблем. Именно из несвязанной проблемы я позже обнаружил, что "Power User" больше не имеет никаких разрешений за пределами Vista, и это позволило мне вернуться к той же статье:

К счастью, учитывая эти альтернативы, оказывается, что набор разрешений, необходимый для обновления счетчиков производительности, намного меньше чем запуск в качестве администратора или пользователя Power. В разделе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib, установите Список контроля доступа, чтобы необходимый пользователь имел полный контроль. В наш оригинальный пример, пользователю ASPNET будет предоставлен полный контроль, но доступ может быть предоставлен всем, кто нуждается в обновлении производительности счетчик.

Но даже это не кажется правдой, поскольку я вернулся и удалил моего тестового пользователя из группы опытных пользователей, и мое приложение все еще увеличивает счетчики без проблем.

Далее, кажется, что если бы были установлены разрешения, это было бы на индивидуальном счетчике в HKLM\System\CurrentControlSet\services \.

Я полностью признаю, что, возможно, возникла и другая проблема с моим кодом, вызвавшая мои исходные разрешения. Тем не менее, мне нужно развернуть все это до XP, поэтому для меня важно подтвердить, является ли приведенная выше информация просто устаревшей или совершенно неверна. Я скоро смогу подтвердить это, но было бы неплохо, если бы кто-нибудь мог проверить информацию или указать мне конкретную документацию.

Ответ 1

Здесь есть два типа разрешений:

  • Разрешение на изменение категории счетчиков производительности

  • Разрешение на вызов изменить счетчик производительности через код .NET

Для первого вам нужны только разрешения для изменения раздела реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib (= либо добавить вручную, либо добавить пользователя в Performance Log Users ect..) и несколько других вещей обычный пользователь имеет (например, доступ к HKLM\SYSTEM\CurrentControlSet\Services), как указано в KB.

Вторая связана с политикой безопасности доступа к коду (CAS). Политика CAS была/является механизмом, определяющим, имеет ли исполняемый код разрешение для операции (часто на ресурсе, например файловой системе или счетчиках производительности), а если нет, то SecurityExeption был брошен. Политика CAS устарела, поскольку .NET 4 из-за различных причин (например, есть также собственный API Win32 рядом с кодом .NET).

Если вы хотите понять политику CAS, это хорошая статья: Понимание безопасности кода кода .NET

Когда CAS был включен, появилась возможность создать политику о коде, который запущен на компьютере, и установить, может ли он увеличивать или устанавливать необработанное значение счетчика или может ли он вызывать исключение безопасности (возможные разрешения счетчика производительности находятся в PerformanceCounterPermissionAccess).

В принципе, если у вас есть .NET 4, вы можете игнорировать политику CAS (она была отключена), а предыдущие версии проверяют разрешение программы с помощью mscorcfg.msc.