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

редактировать

Локальное межпроцессное взаимодействие (LPC, часто также называемый вызовом локальной процедуры или вызовом упрощенной процедуры ) - это внутреннее, недокументированное средство межпроцессного взаимодействия предоставляется Microsoft ядром Windows NT для облегченного IPC между процессами на одном компьютере. Начиная с Windows Vista, LPC был переписан как Асинхронное локальное межпроцессное взаимодействие (ALPC, часто также Расширенный вызов локальных процедур ) для обеспечения высокоскоростного масштабируемого механизма связи, необходимого для эффективной реализации инфраструктуры драйверов пользовательского режима (UMDF), части пользовательского режима которой требуют эффективного канала связи с компонентами UMDF в исполнительной.

Интерфейс (A) LPC является частью недокументированного Native API Windows NT и как таковой не доступен приложениям для прямого использования. Однако его можно использовать косвенно в следующих случаях:

  • при использовании Microsoft RPC API для локального взаимодействия, то есть между процессами на одном компьютере
  • путем вызова API-интерфейсов Windows, которые реализованы с (A) LPC (см. ниже)
Содержание
  • 1 Реализация
  • 2 Известное использование
  • 3 См. также
  • 4 Примечания
  • 5 Ссылки
  • 6 Внешние ссылки
Реализация

(A) LPC реализован с использованием объектов "порта" ядра, которые можно защитить (с помощью ACL, что позволяет, например, только конкретным SID использовать их) и позволяют идентифицировать процесс на другой стороне соединения. Отдельные сообщения также защищены: приложения могут устанавливать идентификаторы безопасности для каждого сообщения, а также проверять изменения контекста безопасности в токене, связанном с (A) сообщением LPC.

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

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

(A) LPC поддерживает следующие три режима обмена сообщениями между сервером и клиентом:

  • Для коротких сообщений (менее 256 байт) ядро ​​копирует буферы сообщений между процессами из адресного пространства процесса отправки в системное адресное пространство, а оттуда - в адресное пространство принимающего процесса.
  • Для сообщений длиной более 256 байт должен использоваться раздел общей памяти для передачи данных, которые служба (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 для локальной связи.

См. Также
Примечания
Ссылки
  • Дабак, Прасад; Борат, Милинд; Phadke, Sandeep (1999), Недокументированная Windows NT, Hungry Minds, ISBN 0-7645-4569-8
  • Руссинович, Марк ; Соломон, Давид; Ионеску, Алекс (2009), Windows® Internals (5-е изд.), Microsoft Press, ISBN 0-7356-2530-1
Внешние ссылки
Последняя правка сделана 2021-05-28 05:04:31
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте