La comunicación entre procesos local [ 1 ] ( LPC , a menudo también denominada llamada a procedimiento local o llamada a procedimiento ligero ) es una función de comunicación entre procesos interna y no documentada proporcionada por el núcleo de Microsoft Windows NT para la comunicación entre procesos ligeros en el mismo equipo. A partir de Windows Vista , LPC se ha reescrito como comunicación entre procesos local asíncrona [ 1 ] ( ALPC , a menudo también denominada llamada a procedimiento local avanzada ) 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 forma parte de la API nativa no documentada de Windows NT y, como tal, no está disponible para su uso directo por parte de las aplicaciones. Sin embargo, puede utilizarse indirectamente en los siguientes casos:
- al usar la API RPC de Microsoft para comunicarse localmente, es decir, entre procesos en la misma máquina.
- mediante la llamada a las API de Windows que están implementadas con (A)LPC (ver más abajo)
Implementación
(A)LPC se implementa mediante objetos "puerto" del kernel, que son protegibles (con ACL , permitiendo, por ejemplo, que solo SID específicos los utilicen) y permiten identificar el proceso en el otro extremo de la conexión. Los mensajes individuales también son protegibles: las aplicaciones pueden establecer SID por mensaje y también comprobar si hay cambios en el contexto de seguridad del token asociado al mensaje (A)LPC.
El escenario de comunicación típico entre el servidor y el cliente es el siguiente:
- Un proceso de servidor primero crea un objeto de puerto de conexión de servidor con nombre y espera a que los clientes se conecten.
- Un cliente solicita una conexión a ese puerto específico enviando un mensaje de conexión.
- Si el servidor acepta la conexión, se crean dos puertos sin nombre :
- Puerto de comunicación del cliente : utilizado por los hilos del cliente para comunicarse con un servidor específico.
- Puerto de comunicación del servidor : utilizado por el servidor para comunicarse con un cliente específico; se crea un puerto de este tipo por cada cliente.
- El cliente recibe un identificador para el puerto de comunicación del cliente, y el servidor recibe un identificador para el puerto de comunicación del servidor, y se establece el canal de comunicación entre procesos.
(A)LPC admite los siguientes tres modos de intercambio de mensajes entre el servidor y el cliente: [ 3 ]
- Para mensajes cortos (de menos de 256 bytes), el núcleo copia los búferes de mensajes entre procesos, desde el espacio de direcciones del proceso emisor al espacio de direcciones del sistema, y desde allí al espacio de direcciones del proceso receptor.
- Para mensajes de más de 256 bytes, se debe utilizar una sección de memoria compartida para transferir los datos, que el servicio (A)LPC asigna entre los procesos emisor y receptor. Primero, el emisor coloca los datos en la memoria compartida y luego envía una notificación (por ejemplo, un mensaje breve, utilizando el primer método de (A)LPC) al proceso receptor, indicando la ubicación de los datos enviados en la sección de memoria compartida.
- El servidor puede leer y escribir datos directamente desde el espacio de direcciones del cliente cuando la cantidad de datos es demasiado grande para caber en una sección compartida.
ALPC ofrece un rendimiento superior a la interfaz LPC anterior, ya que puede configurarse para usar puertos de finalización de E/S en lugar del mecanismo síncrono de solicitud/respuesta que LPC utiliza exclusivamente. [ 4 ] Esto permite una comunicación de alta velocidad a través de los puertos ALPC, lo que equilibra automáticamente el número de mensajes e hilos. Además, los mensajes ALPC pueden agruparse para minimizar los cambios entre el modo de usuario y el modo kernel.
Uso conocido
La comunicación a nivel de lenguaje (A)LPC se utiliza ampliamente en la comunicación entre subsistemas internos de Windows NT. El subsistema Win32 la utiliza intensamente 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 agilizar estas llamadas. Este método se abandonó en gran medida en la versión 4.0, optando por trasladar las partes del servidor críticas para el rendimiento 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 cliente. Winlogon y el Monitor de Referencia de Seguridad lo utilizan para comunicarse con el proceso LSASS.
Como se mencionó, Microsoft RPC puede usar (A)LPC como protocolo de transporte cuando el cliente y el servidor se encuentran en la misma máquina. Muchos servicios diseñados para comunicarse únicamente en el equipo local utilizan (A)LPC como único protocolo de transporte a través de RPC. La implementación de OLE y DCOM remotos también suele usar (A)LPC para la comunicación local.
Véase también
Notas
- 1 2 "Arquitectura de LPC (llamadas a procedimientos locales) Parte 1" . Microsoft Docs .
- ^ Russinovich, Salomón y Ionescu (2009 :201)
- ^ Russinovich, Salomón y Ionescu (2009 :203)
- ^ Russinovich, Salomón y Ionescu (2009 :204)
Referencias
- Dabak, Prasad; Borate, Milind; Phadke, Sandeep (1999), Undocumented Windows NT , Hungry Minds , ISBN 0-7645-4569-8
- Russinovich, Mark ; Salomón, David; Ionescu, Alex (2009), Windows® Internals (5.ª ed.), Microsoft Press , ISBN 978-0-7356-2530-3
Enlaces externos
- Llamada a procedimiento local en Wayback Machine (archivado el 12 de junio de 2008) — Incluye explicación de funciones no documentadas
- Comunicación LPC
- Comunicación y servicios de Windows
- Comunicación entre procesos