Partilhar via


Iniciando um módulo de filtro

Para iniciar um módulo de filtro pausado, o NDIS chama a função FilterSetModuleOptions do driver de filtro, se houver, seguida por uma chamada para a função FilterRestart . O módulo de filtro entra no estado Reiniciando no início da execução na função FilterRestart .

Se o driver forneceu um ponto de entrada para FilterSetModuleOptions, o driver pode alterar a característica parcial de um módulo de filtro. Para obter mais informações, consulte Modo de bypass de dados.

Quando ele chama a função FilterRestart de um driver de filtro, o NDIS passa um ponteiro para uma estrutura NDIS_RESTART_ATTRIBUTES para filtrar o driver no membro RestartAttributes da estrutura NDIS_FILTER_RESTART_PARAMETERS . Os drivers de filtro podem modificar os atributos de reinicialização especificados por drivers subjacentes. Para obter mais informações sobre como modificar atributos de reinicialização, consulte FilterRestart.

Nota O NDIS chama FilterSetModuleOptions para todos os módulos de filtro em uma pilha antes que o NDIS chame a função FilterRestart para qualquer módulo de filtro na pilha.

O NDIS inicia um módulo de filtro como parte de uma operação de Plug and Play para reiniciar uma pilha de driver. Para obter uma visão geral da reinicialização da pilha de driver, consulte Reiniciar uma pilha de driver.

Em nome de um módulo de filtro que está no estado Reiniciando , o driver de filtro:

  • Conclui todas as operações necessárias para reiniciar as operações normais de envio e recebimento.

    Para obter mais informações sobre operações de envio e recebimento, consulte Filtrar operações de envio e recebimento do módulo.

  • Pode ler ou gravar parâmetros configuráveis para o módulo de filtro.

  • Pode receber indicações de dados de rede. O driver pode copiar e enfileirar esses dados e indique-os para drivers excessivamente posteriormente ou pode descartar os dados.

  • Não deve iniciar nenhuma nova indicação de recebimento.

  • Deve rejeitar todas as novas solicitações de envio feitas à função FilterSendNetBufferLists imediatamente chamando a função NdisFSendNetBufferListsComplete . Ele deve definir a status completa em cada NET_BUFFER_LIST como NDIS_STATUS_PAUSED.

  • Pode fornecer status indicações com a função NdisFIndicateStatus.

    Para obter mais informações sobre status indicações, consulte Filtrar indicações de status do módulo.

  • Deve lidar com solicitações OID na função FilterOidRequest .

    Para obter mais informações sobre solicitações OID, consulte Filtrar solicitações OID do módulo.

  • Não deve iniciar novas solicitações de envio.

  • Deve retornar novas indicações de recebimento para o NDIS imediatamente chamando a função NdisFReturnNetBufferLists . Se necessário, o driver pode copiar essas indicações de recebimento antes de revolucioná-las.

  • Pode fazer solicitações de OID para os drivers subjacentes para definir ou consultar informações de configuração atualizadas.

  • Deve tratar status indicações em sua função FilterStatus.

  • Deve indicar NDIS_STATUS_SUCCESS ou uma status de falha. Se um módulo de filtro não for reiniciado, o NDIS o desanexará e, se for um filtro obrigatório, o NDIS encerrará toda a pilha de driver.

Depois que o driver de filtro reiniciar com êxito as operações de envio e recebimento, ele deverá concluir a operação de reinicialização. O driver de filtro pode concluir a operação de reinicialização de forma síncrona ou assíncrona retornando NDIS_STATUS_SUCCESS ou NDIS_STATUS_PENDING respectivamente de FilterRestart.

Se o driver retornar NDIS_STATUS_PENDING, ele deverá chamar a função NdisFRestartComplete depois de concluir a operação de reinicialização. Nesse caso, o driver passa a status final da operação de reinicialização para NdisFRestartComplete.

Depois que a operação de reinicialização for concluída, o módulo de filtro estará no estado Em execução . O driver retoma o processamento normal de envio e recebimento.

O NDIS não inicia outras operações de Plug and Play, como anexar, desanexar ou pausar solicitações, enquanto o driver de filtro está no estado Reiniciar. O NDIS pode iniciar solicitações de pausa depois que um driver de filtro estiver no estado Em execução . Para obter mais informações sobre como pausar um módulo de filtro, consulte Pausando um módulo de filtro.