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 |