Comunicación local entre procesos


De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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:

  • cuando se utiliza la API de Microsoft RPC para comunicarse localmente, es decir, entre los procesos en la misma máquina
  • llamando a las API de Windows que se implementan con (A) LPC (ver más abajo)

Implementación

(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:

  1. 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.
  2. Un cliente solicita una conexión a ese puerto designado enviando un mensaje de conexión.
  3. Si el servidor acepta la conexión, se crean dos puertos sin nombre :
    • puerto de comunicación del cliente : utilizado por los subprocesos del cliente para comunicarse con un servidor en particular
    • puerto de comunicación del servidor : utilizado por el servidor para comunicarse con un cliente en particular; se crea uno de esos puertos por cliente
  4. 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 (menos de 256 bytes), el kernel copia los búferes de mensajes entre procesos, desde el espacio de direcciones del proceso de envío al espacio de direcciones del sistema, y ​​desde allí al espacio de direcciones del proceso de recepción.
  • Para mensajes de más de 256 bytes, se debe utilizar una sección de memoria compartida para transferir datos, que el servicio (A) LPC asigna entre los procesos de envío y recepción. Primero, el remitente coloca datos en la memoria compartida y luego envía una notificación (por ejemplo, un pequeño mensaje, utilizando el primer método de (A) LPC) al proceso de recepción apuntando a 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 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.

Uso conocido

(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.

Ver también

Notas

  1. ^ a b "Arquitectura de la parte 1 de LPC (llamadas a procedimientos locales)" . Microsoft Docs .
  2. ^ Russinovich, Solomon y Ionescu (2009 : 201)
  3. ^ Russinovich, Solomon y Ionescu (2009 : 203)
  4. ^ Russinovich, Solomon y Ionescu (2009 : 204)

Referencias

  • Dabak, Prasad; Borato, Milind; Phadke, Sandeep (1999), Windows NT sin documentos , Hungry Minds , ISBN 0-7645-4569-8
  • Russinovich, Mark ; Salomón, David; Ionescu, Alex (2009), Windows® Internals (5.a ed.), Microsoft Press , ISBN 0-7356-2530-1

enlaces externos

  • Llamada a procedimiento local en Wayback Machine (archivado el 12 de junio de 2008): incluye una explicación de las funciones no documentadas
  • Comunicación LPC
Obtenido de " https://en.wikipedia.org/w/index.php?title=Local_Inter-Process_Communication&oldid=1039157070 "