viernes, 4 de diciembre de 2009

PARTES


A continuación, explicamos el proceso de la arquitectura de UAC representado en el diagrama y cómo se implementa UAC cuando un archivo ejecutable intenta iniciarse.
Ruta de inicio del usuario estándar
La ruta de inicio del usuario estándar en Windows Vista se parece mucho a la ruta en Windows XP, pero incluye algunas modificaciones.
ShellExecute() llama a CreateProcess().
CreateProcess() llama a AppCompat, Fusion y a la función de detección del instalador para comprobar si la aplicación requiere elevación. Entonces, se inspecciona el archivo ejecutable para determinar el requestedExecutionLevel, almacenado en el manifiesto de la aplicación del archivo. La base de datos AppCompat almacena información para las entradas de corrección de compatibilidad de la aplicación. La función de detección del instalador detecta los archivos ejecutables de la instalación
CreateProcess() devuelve un código de error Win32: ERROR_ELEVATION_REQUIRED
ShellExecute() busca ese error en concreto y, al recibirlo, llama a AIS (servicio de información de la aplicación) para intentar el inicio elevado
Ruta de inicio elevado
La ruta de inicio elevado de Windows Vista es una novedad de Windows.
AIS recibe la llamada de ShellExecute() y vuelve a evaluar el nivel de ejecución solicitado y la directiva de grupo para determinar si se permite la elevación y para definir la experiencia del usuario
Si el nivel solicitado requiere elevación, el servicio inicia la confirmación pertinente en el equipo interactivo del autor de la llamada (según la directiva de grupo), mediante el controlador HWND que envía ShellExecute()
Cuando el usuario lo consiente o proporciona credenciales válidas, AIS recupera el token de acceso asociado al usuario en cuestión, si fuera necesario. Por ejemplo, una aplicación que solicite un requestedExecutionLevel de highestAvailable recuperará tokens de acceso distintos para un usuario según pertenezca al grupo Operadores de copia de seguridad o al grupo local Administradores
AIS vuelve a realizar una llamada CreateProcessAsUser(), facilitando el token de acceso del administrador y especificando el equipo interactivo del autor de la llamada

No hay comentarios:

Publicar un comentario