Modo de Bypass de Dados
O modo de bypass de dados do driver de filtro pode fornecer melhor desempenho do sistema. O NDIS não chama funções FilterXxx que são ignoradas. Por exemplo, se os serviços de envio e recebimento não forem necessários para um determinado aplicativo de filtro, o driver de filtro poderá ignorar as funções de envio e recebimento.
Um driver de filtro especifica os pontos de entrada padrão, para funções que podem ser ignoradas, durante a inicialização do driver quando ele chama a função NdisFRegisterFilterDriver . Os pontos de entrada são NULL para funções que são ignoradas por padrão. Para obter mais informações sobre inicialização, consulte Inicializando um driver de filtro.
Para alterar o estado de bypass em runtime, o driver deve especificar um ponto de entrada para a função FilterSetModuleOptions durante a inicialização do driver. O driver pode inicializar uma estrutura NDIS_FILTER_PARTIAL_CHARACTERISTICS e passar as novas características para a função NdisSetOptionalHandlers de dentro do contexto de FilterSetModuleOptions.
O NDIS chama a função FilterSetModuleOptions , se houver, no início de uma operação de reinicialização. Um driver de filtro pode definir o modo de bypass independentemente para cada módulo de filtro. Para obter mais informações, consulte Iniciando um módulo de filtro.
Os drivers de filtro podem ignorar as seguintes funções FilterXxx opcionais especificadas na estrutura NDIS_FILTER_DRIVER_CHARACTERISTICS :
FilterSendNetBufferListsComplete
FilterCancelSendNetBufferLists
Para definir uma função FilterXxx como modo de bypass, um driver de filtro especifica NULL para o ponto de entrada dessa função. No entanto, se um driver chamar qualquer função NDIS que tenha uma função FilterXxx associada, ele deverá fornecer um ponto de entrada para essa função FilterXxx . Por exemplo, se um driver chamar a função NdisFIndicateReceiveNetBufferLists , ele deverá fornecer uma função FilterReturnNetBufferLists .
Se um driver de filtro especificar uma função FilterSendNetBufferLists e enfileirar solicitações de envio, ele também deverá especificar uma função FilterCancelSendNetBufferLists .
Se um driver de filtro especificar uma função FilterReceiveNetBufferLists ou FilterReturnNetBufferLists , o driver também deverá especificar uma função FilterStatus .
Para alterar suas configurações de modo de bypass em tempo de execução, um driver de filtro pode chamar a função NdisFRestartFilter . NdisFRestartFilter agenda uma operação de pausa seguida por uma operação de reinicialização para o módulo de filtro especificado. Quando o NDIS chama FilterSetModuleOptions, o driver de filtro pode alterar as funções desse módulo de filtro chamando NdisSetOptionalHandlers e especificando um novo conjunto de pontos de entrada.
Nota Pausar e reiniciar pode fazer com que alguns pacotes de rede sejam descartados no caminho de transmissão, no caminho de recebimento ou em ambos. Os protocolos de rede que fornecem um mecanismo de transporte confiável podem repetir a operação de E/S de rede no caso de um pacote perdido, mas outros protocolos que não garantem confiabilidade não repitam a operação.
Um driver de filtro pode registrar funções opcionais adicionais que dão suporte a serviços de driver opcionais. O driver registra esses serviços opcionais na função FilterSetOptions . Para obter mais informações sobre esses serviços opcionais, consulte Configurando serviços opcionais de driver de filtro.