Удаление привилегий в C ++ в Windows - PullRequest
18 голосов
/ 07 октября 2009

Возможно ли для приложения C ++, работающего в Windows, сбросить привилегии во время выполнения?

Например, если пользователь запускает мое приложение от имени администратора, но нет причин запускать мое приложение от имени администратора, могу ли я каким-то образом отказаться от прав администратора?

Короче говоря, я хотел бы написать код в функции main (), который отбрасывает ненужные мне привилегии (например, доступ на запись в каталог Windows).

1 Ответ

17 голосов
/ 07 октября 2009

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

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

Вы можете использовать AdjustTokenGroups , чтобы удалить группу администраторов из токена вашего запущенного процесса, но я никогда не пробовал это на уже запущенном процессе.

Обратите внимание, что доступ на запись в каталог Windows не распространяется на привилегию. Ресурсы в системе имеют ACL , которые определяют, кто имеет доступ. Система и администраторы имеют доступ на запись в каталог Windows.

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