2009-10-07 3 views
17

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

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

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

ответ

16

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

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

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

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

Смежные вопросы