Обмен данными между пользовательским режимом и минифильтрами
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 |