Удаление привилегий в C++ в Windows

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

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам