Compartilhar via


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

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

O minifiltro controla a segurança na porta especificando um descritor de segurança a ser aplicado ao objeto de porta de comunicação. A comunicação por meio de uma porta de comunicação não é armazenada em buffer, portanto, é 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 maneira:

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

  • Quando um aplicativo ou serviço da UM chama FilterConnectCommunicationPort para tentar se conectar à porta, o 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 for concluído, o FltMgr passará ao chamador 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 aceita a solicitação de conexão somente se o chamador de UM tiver acesso suficiente, conforme especificado pelo descritor de segurança na porta. Cada conexão com a porta recebe sua própria fila de mensagens e endpoints privados.

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

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

Rotinas do 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 Modo de Usuário:

  • FltCloseClientPort
  • FltCloseCommunicationPort
  • FltCreateCommunicationPort
  • FltSendMessage

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

Rotinas de retorno de chamada de minifiltros para comunicação entre o Modo do Usuário (UM) e o Modo do Kernel (KM)

Um minifilter implementa as seguintes rotinas de callback para suportar a comunicação entre UM e KM. Ele passa ponteiros para essas rotinas quando chama FltCreateCommunicationPort.

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