Поделиться через


Обмен данными между пользовательским режимом и минифильтрами

FltMgr поддерживает обмен данными между приложениями пользовательского режима (UM) и мини-фильтрами режима ядра (KM) через порты связи. Примером сценария является антивирусное приложение, которое должно взаимодействовать с его мини-фильтром KM для сканирования файлов для вирусов и вредоносных программ.

Минифильтр управляет безопасностью порта путем указания дескриптора безопасности, применяемого к объекту порта связи. Обмен данными через порт связи не буферичен, поэтому он быстрее и эффективнее.

Приложение или служба единой системы обмена сообщениями может отвечать на сообщения из минифильтра для двунаправленного взаимодействия. Обмен данными устанавливается следующим образом:

  • Драйвер минифильтра вызывает FltCreateCommunicationPort для создания порта сервера коммуникации. Как создатель порта прослушивателя минифильтр немедленно начинает прослушивать входящие подключения на созданном порту.

  • Когда приложение или служба единой системы обмена сообщениями вызывает FilterConnectCommunicationPort, чтобы попытаться подключиться к порту, FltMgr вызывает подпрограмму обратного вызова ConnectNotifyCallback minifilter с дескриптором только что созданного подключения. После завершения обратного вызова FltMgr передает вызывающий объект единой системы обмена сообщениями отдельный дескриптор, представляющий конечную точку вызывающего средства обмена сообщениями в подключение. Вызывающий объект единой системы обмена сообщениями может использовать этот дескриптор для связывания нескольких портов завершения ввода-вывода с портом прослушивателя. Эта возможность полезна для приложений, которые должны одновременно обрабатывать большие объемы операций ввода-вывода.

FltMgr принимает запрос на подключение, только если вызывающий объект единой системы обмена сообщениями имеет достаточный доступ, как указано дескриптором безопасности на порту. Каждое подключение к порту получает собственную очередь сообщений и частные конечные точки.

Закрытие конечной точки (ядра или пользователя) завершает это соединение. Когда вызывающий объект единой системы обмена сообщениями закрывает его дескриптор к конечной точке, FltMgr вызывает подпрограмму DisconnectNotifyCallback драйвера minifilter, чтобы драйвер минифильтра может закрыть его дескриптор к соединению.

Закрытие порта сервера связи предотвращает новые подключения, но не завершает существующие подключения. FltMgr завершает существующие подключения при выгрузке драйвера минифильтра.

Подпрограммы FltMgr для обмена данными между UM и KM

FltMgr предоставляет следующие процедуры поддержки для минифильтров для взаимодействия с приложениями UM:

Приложения и службы единой системы обмена сообщениями могут использовать следующие системные подпрограммы поддержки для взаимодействия с драйверами мини-фильтра:

Подпрограммы обратного вызова минифильтра для обмена данными между UM и KM

Минифильтр реализует следующие подпрограммы обратного вызова для поддержки взаимодействия между UM и KM. Он передает указатели на эти подпрограммы при вызове FltCreateCommunicationPort.

Имя подпрограммы обратного вызова Тип подпрограммы обратного вызова
ConnectNotifyCallback PFLT_CONNECT_NOTIFY
DisconnectNotifyCallback PFLT_DISCONNECT_NOTIFY
MessageNotifyCallback PFLT_MESSAGE_NOTIFY