Локальное межпроцессное взаимодействие


Локальное межпроцессное взаимодействие [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.

ALPC имеет преимущество в производительности по сравнению с предыдущим интерфейсом LPC, поскольку его можно настроить на использование портов завершения ввода-вывода вместо синхронного механизма запроса/ответа, который использует исключительно LPC. [4] Это обеспечивает высокоскоростную связь портов ALPC, которая автоматически балансирует количество сообщений и потоков. Кроме того, сообщения ALPC могут быть объединены в пакеты, чтобы минимизировать переключение между пользовательским режимом и режимом ядра.

(A)LPC активно используется для связи между внутренними подсистемами Windows NT. Подсистема Win32 активно использует (A)LPC для связи между клиентом и сервером подсистемы ( CSRSS ). Quick LPC был введен в версии 3.51 Windows NT для ускорения этих вызовов. В версии 4.0 от этого метода практически отказались в пользу перевода критически важных частей сервера в режим ядра (win32k.sys).

Служба подсистемы локального органа безопасности (LSASS), диспетчер сеансов (SMSS) и диспетчер управления службами используют порты (A)LPC напрямую для связи с клиентскими процессами. Winlogon и Security Reference Monitor используют его для связи с процессом LSASS.