Мне интересно, какая разница между вложением
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
и
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
в вашем манифесте приложения.
Мне интересно, какая разница между вложением
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
и
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
в вашем манифесте приложения.
Это описанный в MSDN:
В принципе, "asInvoker" будет использовать настройки безопасности по умолчанию для пользователя. Он описывается как "Приложение работает с тем же токеном доступа, что и родительский процесс". Это означает, что в качестве вызывающего процесса используется тот же маркер безопасности, который обычно представляет собой оболочку рабочего стола (или процесс, запускающий ее, если вы запускаете приложение из другой программы).
Использование "maximumAvailable" приведет к запуску приложения с использованием самых высоких привилегий, которые пользователь может получить. Если они администратор, например, они получат приглашение UAC, и приложение будет работать с правами администратора. Однако, если они обычные пользователи, они получат обычные параметры безопасности и т.д.
В общем, вы захотите использовать "asInvoker", если у вас нет конкретной причины запрашивать больше прав.
Хорошим примером "наивысшего доступного" является тот, кто входит в группу операторов резервного копирования.
Начиная с 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
информационным типом. Однако обратите внимание, что контроль учетных записей не влияет на службу, сеть или пакетный вход в систему.
Если пользователь не принадлежит ни к одной из перечисленных выше групп, но имеет определенные привилегии, будет создан отфильтрованный токен с удалением этих привилегий. Указанные привилегии:
SeCreateTokenPrivilege
- Право пользователя: создать объект токена.SeTcbPrivilege
- Право пользователя: действовать как часть операционной системы.SeTakeOwnershipPrivilege
- Право пользователя: стать владельцем файлов или других объектов.SeBackupPrivilege
- Право пользователя: резервное копирование файлов и каталогов.SeRestorePrivilege
- Право пользователя: восстанавливать файлы и каталоги.SeDebugPrivilege
- Право пользователя: отладка программ.SeImpersonatePrivilege
- Право пользователя: выдавать себя за клиента после аутентификации.SeRelabelPrivilege
- Право пользователя: изменить метку объекта.
Если я создаю пользователя резервного копирования, мне нужно работать с возвращенными мне привилегиями, связанными с резервным копированием:
Это означает, что мне не нужно (или не хочу) работать как полноценный администратор. Я хочу вернуться с моим наибольшим доступным набором разрешений назад.
Вот тут-то и начинают появляться три ваши опции для selectedExecutionLevel:
asInvoker: приложение будет работать с теми же разрешениями, что и процесс, который его запустил. Приложение можно повысить до более высокого уровня разрешений, выбрав "Запуск от имени администратора".
highAvailable: приложение будет работать с максимально возможным уровнем разрешений. Если пользователь, запускающий приложение, является членом группы "Администраторы", этот параметр совпадает с параметром requireAdministrator. Если максимальный доступный уровень разрешений выше, чем уровень процесса открытия, система запросит учетные данные.
requireAdministrator: приложение будет работать с правами администратора. Пользователь, запускающий приложение, должен быть членом группы "Администраторы". Если процесс открытия не выполняется с правами администратора, система запросит учетные данные.