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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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