TL; DR : la única opción es generar otro proceso. (Una nueva cmd.exe
). En el caso del símbolo del sistema, iniciar una nueva instancia con un token de acceso que tenga permisos más altos siempre dará como resultado una nueva ventana creada.
No es posible otorgar permisos adicionales a un proceso que ya se está ejecutando .
Cuando un usuario con derechos administrativos inicia sesión en una máquina Windows con el Control de cuentas de usuario (UAC) habilitado, se crean dos tokens de acceso separados :
- Uno con acceso de administrador completo, y
- Un segundo "token filtrado" con acceso de usuario estándar
En el momento en que CMD.EXE
se crea un proceso (por ejemplo ), se le asigna uno de estos dos tokens de acceso . Si el proceso se ejecuta "elevado" como administrador, se utiliza el token de acceso sin filtrar. Si al proceso no se le otorgan derechos de administrador, se utiliza el token de usuario estándar filtrado.
Una vez que se ha creado un proceso, no es posible reemplazar su token de acceso . 1 En este hilo de MSDN Application Security for Windows Desktop , un póster que se identifica a sí mismo como miembro del Equipo de Kernel de Windows dice:
El núcleo NT nunca tuvo la intención de permitir el cambio de token una vez que un proceso comenzó a ejecutarse. Esto se debe a que los identificadores, etc. pueden haberse abierto en un contexto de seguridad antiguo, las operaciones durante el vuelo pueden usar contextos de seguridad inconsistentes, etc. Como tal, generalmente no tiene sentido cambiar el token de un proceso una vez que ha comenzado la ejecución. Sin embargo, esto no se hizo cumplir hasta Vista . [énfasis mío] (Fuente gracias a @Ben N )
Nota: El Control de cuentas de usuario se introdujo con el lanzamiento de Windows Vista .
Esta respuesta de Superusuario cita dos fuentes adicionales que confirman lo mismo:
Por lo tanto, simplemente no es posible elevar el símbolo del sistema o cualquier otro proceso en el lugar. La única opción es generar otro proceso con un nuevo token de acceso (que puede ser otra instancia del proceso original si lo desea). En el caso del símbolo del sistema, iniciar una nueva instancia con un token de acceso que tenga permisos más altos siempre generará una nueva ventana, y si los avisos UAC están habilitados en el sistema, también se activarán.
1 Puede ajustar los privilegios en un token de acceso existente con la función AdjustTokenPrivileges , pero de acuerdo con MSDN :
La función AdjustTokenPrivileges no puede agregar nuevos privilegios al token de acceso. Solo puede habilitar o deshabilitar los privilegios existentes del token.