Подтвердить что ты не робот

В чем разница между уровнями "asInvoker" и "highAvailable"?

Мне интересно, какая разница между вложением

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />

и

<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

в вашем манифесте приложения.

4b9b3361

Ответ 1

Это описанный в MSDN:

В принципе, "asInvoker" будет использовать настройки безопасности по умолчанию для пользователя. Он описывается как "Приложение работает с тем же токеном доступа, что и родительский процесс". Это означает, что в качестве вызывающего процесса используется тот же маркер безопасности, который обычно представляет собой оболочку рабочего стола (или процесс, запускающий ее, если вы запускаете приложение из другой программы).

Использование "maximumAvailable" приведет к запуску приложения с использованием самых высоких привилегий, которые пользователь может получить. Если они администратор, например, они получат приглашение UAC, и приложение будет работать с правами администратора. Однако, если они обычные пользователи, они получат обычные параметры безопасности и т.д.

В общем, вы захотите использовать "asInvoker", если у вас нет конкретной причины запрашивать больше прав.

Ответ 2

Хорошим примером "наивысшего доступного" является тот, кто входит в группу операторов резервного копирования.

Начиная с Windows Vista, не только "Администраторы" лишаются своих привилегий и получают сплит-токен. Система проверяет, есть ли у вас:

  • член определенных групп
  • иметь определенные привилегии

Хорошим примером "наивысшего доступного" является тот, кто является членом группы Операторы резервного копирования. Если вы являетесь участником групп операторов резервного копирования, ваш токен безопасности фильтруется точно так же, как и для членов группы администраторов.

Из MSDN Magazine статья:

Наименее привилегия
Научите свои приложения играть с помощью контроля учетных записей Windows Vista
Крис Корио

UAC начинает работать, когда пользователь входит в систему. Во время интерактивного входа в систему локальный орган безопасности (LSA) принимает учетные данные пользователя и выполняет первоначальный вход в систему, оценивая токен пользователя, чтобы определить, имеет ли он то, что определено как повышенные привилегии. Если LSA определит, что пользователь имеет повышенные привилегии, он отфильтрует этот токен и затем выполнит второй вход в систему с отфильтрованным токеном.

  Контроль учетных записей определяет следующие группы с повышенными привилегиями:

  • Встроенные администраторы (S-1-5-32-544)
  • Опытные пользователи (S-1-5-32-547)
  • Операторы аккаунта (S-1-5-32-548)
  • Операторы сервера (S-1-5-32-549)
  • Операторы принтера (S-1-5-32-550)
  • Операторы резервного копирования (S-1-5-32-551)
  • Группа серверов RAS
  • BUILTIN\Pre-Windows 2000-совместимый доступ (S-1-5-32-554)
  • BUILTIN\Операторы конфигурации сети (S-1-5-32-556)
  • Администраторы домена (S-1-5-21-domain-512)
  • Контроллеры домена (S-1-5-21-domain-516)
  • Cert Publishers (S-1-5-21-domain-517)
  • Администраторы схемы (S-1-5-21-root domain-518)
  • Администраторы предприятия (S-1-5-21-root domain-519)
  • Администраторы групповой политики (S-1-5-21-domain-520)

Поэтому, если LSA замечает, что любое из этих членств или привилегий в группе указано в начальном токене пользователя, фильтрованный токен будет создан во время интерактивного входа в систему с использованием версии API-интерфейса CreateRestrictedToken и полностью Привилегированный токен сохраняется LSA. Эти два токена связаны, и полностью отобранный токен можно получить из отфильтрованного токена с помощью API GetTokenInformation с новым TokenLinkedToken информационным типом. Однако обратите внимание, что контроль учетных записей не влияет на службу, сеть или пакетный вход в систему.

  Если пользователь не принадлежит ни к одной из перечисленных выше групп, но имеет определенные привилегии, будет создан отфильтрованный токен с удалением этих привилегий. Указанные привилегии:

  • SeCreateTokenPriv­i­lege - Право пользователя: создать объект токена.
  • SeTcbPrivilege - Право пользователя: действовать как часть операционной системы.
  • Se­Take­Owner­ship­Priv­ilege - Право пользователя: стать владельцем файлов или других объектов.
  • Se­Back­up­Priv­i­lege - Право пользователя: резервное копирование файлов и каталогов.
  • Se­Re­store­Privilege - Право пользователя: восстанавливать файлы и каталоги.
  • Se­De­bug­Priv­ilege - Право пользователя: отладка программ.
  • Se­Im­personatePrivilege - Право пользователя: выдавать себя за клиента после аутентификации.
  • Se­Re­labelPrivilege - Право пользователя: изменить метку объекта.

Если я создаю пользователя резервного копирования, мне нужно работать с возвращенными мне привилегиями, связанными с резервным копированием:

  • SeBackupPrivilege
  • SeRestorePrivilege

Это означает, что мне не нужно (или не хочу) работать как полноценный администратор. Я хочу вернуться с моим наибольшим доступным набором разрешений назад.

Вот тут-то и начинают появляться три ваши опции для selectedExecutionLevel:

  • asInvoker: приложение будет работать с теми же разрешениями, что и процесс, который его запустил. Приложение можно повысить до более высокого уровня разрешений, выбрав "Запуск от имени администратора".

  • highAvailable: приложение будет работать с максимально возможным уровнем разрешений. Если пользователь, запускающий приложение, является членом группы "Администраторы", этот параметр совпадает с параметром requireAdministrator. Если максимальный доступный уровень разрешений выше, чем уровень процесса открытия, система запросит учетные данные.

  • requireAdministrator: приложение будет работать с правами администратора. Пользователь, запускающий приложение, должен быть членом группы "Администраторы". Если процесс открытия не выполняется с правами администратора, система запросит учетные данные.

Чтение бонусов