with visual studio instalar development compiler community code c++ permissions uac

visual - Dejar caer privilegios en C++ en Windows



visual studio c++ (1)

¿Es posible que una aplicación C ++ que se ejecuta en Windows suelte privilegios en tiempo de ejecución?

Por ejemplo, si un usuario inicia mi aplicación como Administrador, pero no hay ninguna razón para ejecutar mi aplicación como administrador, ¿puedo de alguna manera renunciar a los privilegios de administrador?

En resumen, me gustaría escribir código en la función main (), que elimina privilegios que no necesito (por ejemplo, acceso de escritura en el directorio de Windows).


Sí, puede usar AdjustTokenPrivileges para eliminar privilegios innecesarios y peligrosos de su token. Puede deshabilitarlo si no lo necesita de inmediato (el privilegio se puede habilitar más adelante) o eliminar un privilegio de su token.

También puede crear un token restringido a través de CreateRestrictedToken y reiniciar su aplicación ejecutándose con ese token restringido. CreateRestrictedToken se puede usar para deshabilitar privilegios y eliminar grupos (como Administrators Group) de un token.

Es posible que pueda utilizar AdjustTokenGroups para eliminar el grupo de administradores del token de su proceso en ejecución, pero nunca lo he intentado en un proceso ya en ejecución.

Tenga en cuenta que el acceso de escritura al directorio de Windows no está cubierto por un privilegio. Los recursos en el sistema tienen ACL que gobiernan quién tiene acceso. El sistema y los administradores tienen acceso de escritura al directorio de Windows.