stringtranslate.com

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

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

Типичный сценарий взаимодействия между сервером и клиентом выглядит следующим образом:

  1. Серверный процесс сначала создает именованный объект порта подключения к серверу и ждет подключения клиентов.
  2. Клиент запрашивает соединение с указанным портом, отправляя сообщение о подключении.
  3. Если сервер принимает соединение, создаются два безымянных порта:
    • порт клиентской связи — используется клиентскими потоками для связи с определенным сервером
    • порт связи сервера — используется сервером для связи с определенным клиентом; создается один такой порт для каждого клиента
  4. Клиент получает дескриптор клиентского коммуникационного порта, а сервер получает дескриптор серверного коммуникационного порта, и устанавливается межпроцессный коммуникационный канал.

(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 для локального взаимодействия.

Смотрите также

Примечания

  1. ^ ab "Архитектура LPC (локальные вызовы процедур). Часть 1". Microsoft Docs .
  2. ^ Руссинович, Соломон и Ионеску (2009:201)
  3. ^ Руссинович, Соломон и Ионеску (2009:203)
  4. ^ Руссинович, Соломон и Ионеску (2009:204)

Ссылки

Внешние ссылки