La comunicación entre procesos locales [1] ( LPC , a menudo también denominada llamada a procedimiento local o llamada a procedimiento ligero ) es una función de comunicación interna no documentada entre procesos 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 asincrónica [1] ( ALPC , a menudo también llamada a procedimiento local avanzado) con el fin de proporcionar un mecanismo de comunicación escalable de alta velocidad necesario para implementar de manera eficiente el marco de controlador en modo de usuario (UMDF), cuyas partes en 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 de 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 se pueden proteger: 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.
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 usar puertos de finalización de E / S en lugar del mecanismo de solicitud / respuesta síncrono que LPC usa exclusivamente. [4] Esto habilita la comunicación de alta velocidad de los puertos ALPC que automáticamente equilibra el número de mensajes e hilos. Además, los mensajes ALPC se pueden agrupar juntos para minimizar los cambios de modo de usuario / modo de núcleo.
(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 realizar estas llamadas más rápidamente. 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 la Autoridad de Seguridad Local (LSASS), el Administrador de Sesiones (SMSS) y el Administrador de Control de Servicios usan todos los puertos (A) LPC directamente para comunicarse con los procesos del cliente. Winlogon y Security Reference Monitor lo utilizan para comunicarse con el proceso LSASS.
Como se mencionó, Microsoft RPC puede usar (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 el equipo 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.