Comunicação entre o modo de usuário e os minifiltros

O FltMgr dá suporte à comunicação entre aplicativos de UM (modo de usuário) e minifiltros de KM (modo kernel) por meio de portas de comunicação. Um cenário de exemplo é um aplicativo antivírus que precisa se comunicar com sua contraparte de minifiltro KM para verificar arquivos em busca de vírus e malware.

O minifiltro controla a segurança na porta especificando um descritor de segurança a ser aplicado ao objeto da porta de comunicação. A comunicação por meio de uma porta de comunicação não é armazenada em buffer, por isso é mais rápida e eficiente.

Um aplicativo ou serviço de UM pode responder a mensagens de um minifiltro para comunicação bidirecional. A comunicação é estabelecida da seguinte forma:

  • Um driver de minifiltro chama FltCreateCommunicationPort para criar uma porta de servidor de comunicação. Como criador da porta do ouvinte, o minifiltro imediatamente começa implicitamente a escutar conexões de entrada na porta criada.

  • Quando um aplicativo ou serviço de UM chama FilterConnectCommunicationPort para tentar se conectar à porta, FltMgr chama a rotina de retorno de chamada ConnectNotifyCallback do minifiltro com um identificador para a conexão recém-criada. Quando o retorno de chamada é concluído, o FltMgr passa ao chamador da UM um identificador de arquivo separado que representa o ponto de extremidade do chamador da UM para a conexão. O chamador da UM pode usar esse identificador para associar várias portas de conclusão de E/S à porta do ouvinte. Essa funcionalidade é útil para aplicativos que precisam lidar com grandes volumes de operações de E/S simultaneamente.

O FltMgr aceitará a solicitação de conexão somente se o chamador da UM tiver acesso suficiente, conforme especificado pelo descritor de segurança na porta. Cada conexão com a porta obtém sua própria fila de mensagens e pontos de extremidade privados.

Fechar qualquer ponto de extremidade (kernel ou usuário) encerra essa conexão. Quando um chamador de UM fecha seu identificador para o ponto de extremidade, FltMgr chama a rotina DisconnectNotifyCallback do driver de minifiltro para que o driver de minifiltro possa fechar seu identificador para a conexão.

Fechar a porta do servidor de comunicação impede novas conexões, mas não encerra as conexões existentes. FltMgr encerra conexões existentes quando o driver de minifiltro é descarregado.

Rotinas FltMgr para comunicação entre UM e KM

O FltMgr fornece as seguintes rotinas de suporte para que os minifiltros se comuniquem com aplicativos de UM:

Os aplicativos e serviços de UM podem usar as seguintes rotinas de suporte fornecidas pelo sistema para se comunicar com drivers de minifiltro:

Rotinas de retorno de chamada de minifiltro para comunicação entre UM e KM

Um minifiltro implementa as seguintes rotinas de retorno de chamada para dar suporte à comunicação entre a UM e o KM. Ele passa ponteiros para essas rotinas quando chama FltCreateCommunicationPort.

Nome da rotina de retorno de chamada Tipo da rotina de retorno de chamada
ConnectNotifyCallback PFLT_CONNECT_NOTIFY
DesconectarNotificarRetorno de chamada PFLT_DISCONNECT_NOTIFY
MessageNotifyCallback PFLT_MESSAGE_NOTIFY