Локальное межпроцессное взаимодействие [1] ( LPC , часто также называемое локальным вызовом процедур или облегченным вызовом процедур ) — это внутреннее, недокументированное средство межпроцессного взаимодействия, предоставляемое ядром Microsoft Windows NT для облегченного IPC между процессами на одном компьютере. Начиная с Windows Vista , LPC было переписано как асинхронное локальное межпроцессное взаимодействие [1] ( ALPC , часто также расширенный локальный вызов процедур ), чтобы обеспечить высокоскоростной масштабируемый механизм взаимодействия, необходимый для эффективной реализации инфраструктуры драйверов пользовательского режима (UMDF), части пользовательского режима которого требуют эффективного канала связи с компонентами UMDF в исполнительной системе . [2]
Интерфейс (A)LPC является частью недокументированного Native API Windows NT и, как таковой, недоступен для приложений для прямого использования. Однако, он может использоваться косвенно в следующих случаях:
(A)LPC реализован с использованием объектов "порта" ядра, которые являются защищаемыми (с помощью ACL , позволяющих, например, только определенным SID использовать их) и позволяют идентифицировать процесс на другой стороне соединения. Отдельные сообщения также являются защищаемыми: приложения могут устанавливать SID для каждого сообщения, а также проверять изменения контекста безопасности в токене, связанном с сообщением (A)LPC.
Типичный сценарий взаимодействия между сервером и клиентом выглядит следующим образом:
(A)LPC поддерживает следующие три режима обмена сообщениями между сервером и клиентом: [3]
ALPC имеет преимущество в производительности по сравнению с бывшим интерфейсом LPC, поскольку его можно настроить на использование портов завершения ввода-вывода вместо синхронного механизма запроса/ответа, который использует исключительно LPC. [4] Это обеспечивает высокоскоростную связь портов 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 и Security Reference Monitor используют его для связи с процессом LSASS.
Как уже упоминалось, Microsoft RPC может использовать (A)LPC в качестве транспорта, когда клиент и сервер находятся на одной машине. Многие службы, предназначенные для взаимодействия только на локальном компьютере, используют (A)LPC в качестве единственного транспорта через RPC. Реализация удаленного OLE и DCOM во многих случаях также использует (A)LPC для локального взаимодействия.