Comunicación local entre procesos


La comunicación local entre procesos [1] ( LPC , a menudo también conocida como llamada de procedimiento local o llamada de procedimiento ligero ) es una función de comunicación interna entre procesos no documentada proporcionada por el kernel de Microsoft Windows NT para IPC ligero entre procesos en el mismo computadora. A partir de Windows Vista , LPC se ha reescrito como Comunicación entre procesos local asíncrona [1] ( ALPC , a menudo también Llamada de procedimiento local avanzada) con el fin de proporcionar un mecanismo de comunicación escalable de alta velocidad requerido para implementar de manera eficiente el marco de controlador de modo de usuario (UMDF), cuyas partes de modo de usuario requieren un canal de comunicación eficiente con los componentes de UMDF en el ejecutivo . [2]

La interfaz (A)LPC es parte de la API nativa no documentada de Windows NT y, como tal, no está disponible para aplicaciones para uso directo. Sin embargo, se puede utilizar indirectamente en los siguientes casos:

(A) LPC se implementa utilizando objetos de "puerto" del kernel, que son asegurables (con ACL , lo que permite, por ejemplo, que solo SID específicos los usen) y permiten la identificación del proceso en el otro lado de la conexión. Los mensajes individuales también son asegurables: las aplicaciones pueden establecer SID por mensaje y también probar los cambios del contexto de seguridad en el token asociado con el mensaje (A)LPC.

ALPC tiene una ventaja de rendimiento sobre la antigua interfaz LPC, ya que se puede configurar para usar puertos de finalización de E/S en lugar del mecanismo de solicitud/respuesta síncrona que usa exclusivamente LPC. [4] Esto permite la comunicación de alta velocidad de los puertos ALPC, lo que equilibra automáticamente la cantidad de mensajes y subprocesos. Además, los mensajes ALPC se pueden agrupar en lotes para minimizar los cambios de modo de usuario/modo de kernel.

(A) LPC se usa mucho en la comunicación entre subsistemas internos en Windows NT. El subsistema Win32 usa (A)LPC en gran medida para la comunicación entre el cliente y el servidor del subsistema ( CSRSS ). Quick LPC se introdujo en la versión 3.51 de Windows NT para que estas llamadas fueran más rápidas. Este método se abandonó en gran medida en la versión 4.0 a favor de mover las partes críticas del servidor al modo kernel (win32k.sys).

El servicio del subsistema de la autoridad de seguridad local (LSASS), el administrador de sesión (SMSS) y el administrador de control de servicios utilizan puertos (A)LPC directamente para comunicarse con los procesos del cliente. Winlogon y Security Reference Monitor lo usan para comunicarse con el proceso LSASS.