La comunicación local entre procesos [1] ( LPC , a menudo también denominada llamada a procedimiento local o llamada a procedimiento ligero ) es una función de comunicación interna entre procesos no documentada proporcionada por el núcleo de Microsoft Windows NT para la comunicación local entre procesos ligera entre procesos en el mismo equipo. A partir de Windows Vista , la LPC se ha reescrito como comunicación local entre procesos asíncrona [1] ( ALPC , a menudo también llamada a procedimiento local avanzada ) para proporcionar un mecanismo de comunicación escalable de alta velocidad necesario para implementar de forma 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 la UMDF en el ejecutivo . [2]
La interfaz (A)LPC forma parte de la API nativa no documentada de Windows NT y, como tal, no está disponible para que las aplicaciones la utilicen directamente. Sin embargo, se puede utilizar indirectamente en los siguientes casos:
(A)LPC se implementa utilizando objetos de "puerto" del núcleo, que son asegurables (con ACL , lo que permite, por ejemplo, que solo los SID específicos los utilicen) 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 cambios del contexto de seguridad en el token asociado con el mensaje (A)LPC.
El escenario de comunicación típico entre el servidor y el cliente es el siguiente:
(A)LPC admite los siguientes tres modos de intercambio de mensajes entre el servidor y el cliente: [3]
ALPC tiene una ventaja de rendimiento sobre la interfaz LPC anterior, ya que se puede configurar para utilizar puertos de finalización de E/S en lugar del mecanismo de solicitud/respuesta sincrónica que utiliza exclusivamente LPC. [4] Esto permite una comunicación de alta velocidad entre los puertos ALPC que equilibra automáticamente la cantidad de mensajes y subprocesos. Además, los mensajes ALPC se pueden agrupar para minimizar los cambios de modo de usuario/modo kernel.
(A)LPC se utiliza mucho en la comunicación entre subsistemas internos en Windows NT. El subsistema Win32 utiliza (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 hacer 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 de subsistema de autoridad de seguridad local (LSASS), el Administrador de sesiones (SMSS) y el Administrador de control de servicios utilizan puertos (A)LPC directamente para comunicarse con los procesos del cliente. Winlogon y el Monitor de referencia de seguridad lo utilizan para comunicarse con el proceso LSASS.
Como se mencionó, Microsoft RPC puede utilizar (A)LPC como transporte cuando el cliente y el servidor están en la misma máquina. Muchos servicios que están diseñados para comunicarse solo en la computadora local utilizan (A)LPC como el único transporte a través de RPC. La implementación de OLE y DCOM remotos en muchos casos también utiliza (A)LPC para la comunicación local.