Partilhar via


Iniciando um módulo de filtro

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

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

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

Observação o NDIS chama FilterSetModuleOptions para todos os módulos de filtro em uma pilha antes de o NDIS chamar 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 Plug and Play para reiniciar uma pilha de drivers. Para obter uma visão geral da reinicialização da pilha de drivers, consulte Reiniciando uma pilha de drivers.

Em nome de um módulo de filtro que está no estado de Reinicialização, 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 Filtro do Módulo Operações de Envio e Recebimento.

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

  • Pode receber indicações de dados de rede. O driver pode copiar e colocar esses dados na fila, indicá-los aos drivers superiores mais tarde ou descartar os dados.

  • Não deve iniciar quaisquer novas indicações de receção.

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

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

    Para obter mais informações sobre indicações de status, consulte Filter Module Status Indications.

  • Deve manipular pedidos OID na função FilterOidRequest .

    Para obter mais informações sobre solicitações OID, consulte Filter Module OID Requests.

  • Não deve iniciar novos pedidos de envio.

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

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

  • Deve manipular as indicações de status na sua função FilterStatus.

  • Deve indicar NDIS_STATUS_SUCCESS ou um 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 drivers.

Depois que o driver de filtro reiniciar com êxito as operações de envio e recebimento, ele deve 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, respectivamente, NDIS_STATUS_SUCCESS ou NDIS_STATUS_PENDING do FilterRestart.

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

Após a conclusão da operação de reinicialização, o módulo de filtro estará no estado Running. O driver retoma o processamento normal de envio e recebimento.

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