Локальное межпроцессное взаимодействие (LPC, часто также называемый вызовом локальной процедуры или вызовом упрощенной процедуры ) - это внутреннее, недокументированное средство межпроцессного взаимодействия предоставляется Microsoft ядром Windows NT для облегченного IPC между процессами на одном компьютере. Начиная с Windows Vista, LPC был переписан как Асинхронное локальное межпроцессное взаимодействие (ALPC, часто также Расширенный вызов локальных процедур ) для обеспечения высокоскоростного масштабируемого механизма связи, необходимого для эффективной реализации инфраструктуры драйверов пользовательского режима (UMDF), части пользовательского режима которой требуют эффективного канала связи с компонентами UMDF в исполнительной.
Интерфейс (A) LPC является частью недокументированного Native API Windows NT и как таковой не доступен приложениям для прямого использования. Однако его можно использовать косвенно в следующих случаях:
(A) LPC реализован с использованием объектов "порта" ядра, которые можно защитить (с помощью ACL, что позволяет, например, только конкретным SID использовать их) и позволяют идентифицировать процесс на другой стороне соединения. Отдельные сообщения также защищены: приложения могут устанавливать идентификаторы безопасности для каждого сообщения, а также проверять изменения контекста безопасности в токене, связанном с (A) сообщением LPC.
Типичный сценарий связи между сервером и клиентом выглядит следующим образом:
(A) LPC поддерживает следующие три режима обмена сообщениями между сервером и клиентом:
ALPC имеет преимущество в производительности по сравнению с прежним интерфейсом LPC, поскольку его можно настроить на используйте порты завершения ввода-вывода вместо синхронного механизма запроса / ответа, который исключительно использует LPC. Это обеспечивает высокоскоростную связь портов ALPC, которая автоматически уравновешивает количество сообщений и потоков. Кроме того, сообщения ALPC можно группировать вместе, чтобы минимизировать переключение пользовательского режима / режима ядра.
(A) LPC широко используется для связи между внутренними подсистемами в Windows NT. Подсистема Win32 активно использует (A) LPC для связи между клиентом и сервером подсистемы (CSRSS ). Quick LPC был представлен в версии 3.51 Windows NT, чтобы выполнять эти вызовы быстрее. В версии 4.0 от этого метода по большей части отказались в пользу перевода критических для производительности частей сервера в режим ядра (win32k.sys).
Служба Local Security Authority Subsystem Service (LSASS), Session Manager (SMSS) и Service Control Manager все используют (A) LPC порты напрямую для связи с клиентскими процессами. Winlogon и Контрольный монитор безопасности используют его для связи с процессом LSASS.
Как упоминалось, Microsoft RPC может использовать (A) LPC в качестве транспорта, когда клиент и сервер находятся на одном компьютере. Многие службы, которые предназначены для связи только на локальном компьютере, используют (A) LPC в качестве единственного транспорта через RPC. Реализация удаленного OLE и DCOM во многих случаях также использует (A) LPC для локальной связи.