Share via


Inicializando um driver de filtro

A inicialização do driver de filtro ocorre imediatamente após o sistema carregar o driver. Os drivers de filtro são carregados como serviços do sistema. O sistema pode carregar os drivers de filtro a qualquer momento antes, durante ou após a carga dos drivers de miniporta. O NDIS pode anexar um módulo de filtro a um adaptador de miniporta depois que um adaptador de miniporto do tipo compatível com o driver de filtro ficar disponível e a inicialização do driver de filtro estiver concluída.

Enquanto uma pilha de driver está sendo iniciada, o sistema carrega os drivers de filtro se eles ainda não estiverem carregados. Para obter mais informações sobre como iniciar uma pilha de driver que inclui módulos de filtro, consulte Iniciando uma pilha de driver.

Depois que um driver de filtro é carregado, o sistema chama a rotina DriverEntry do driver.

O sistema passa dois argumentos para DriverEntry:

  • Um ponteiro para o objeto de driver, que foi criado pelo sistema de E/S.

  • Um ponteiro para o caminho do Registro, que especifica onde os parâmetros específicos do driver são armazenados.

DriverEntry retornará STATUS_SUCCESS ou seu NDIS_STATUS_SUCCESS equivalente, se o driver tiver sido registrado com êxito como um driver de filtro NDIS. Se DriverEntry falhar na inicialização propagando um erro status retornado por uma função NdisXxx ou por uma rotina de suporte no modo kernel, o driver não permanecerá carregado. DriverEntry deve ser executado de forma síncrona; ou seja, ele não pode retornar STATUS_PENDING ou seu NDIS_STATUS_PENDING equivalente.

O driver de filtro passa o objeto de driver para a função NdisFRegisterFilterDriver quando ele se registra com o NDIS como um driver de filtro. O driver pode usar o caminho do Registro para obter informações de configuração. Para obter mais informações sobre como acessar informações de configuração do driver de filtro, consulte Acessando informações de configuração para um driver de filtro.

Um driver de filtro chama NdisFRegisterFilterDriver de sua rotina DriverEntry . Os drivers de filtro exportam um conjunto de funções FilterXxx passando uma estrutura NDIS_FILTER_DRIVER_CHARACTERISTICS para NdisFRegisterFilterDriver no parâmetro FilterCharacteristics .

A estrutura NDIS_FILTER_DRIVER_CHARACTERISTICS especifica pontos de entrada para funções FilterXxx obrigatórias e opcionais. Algumas funções opcionais podem ser ignoradas. Para obter mais informações sobre como ignorar funções, consulte Modo de bypass de dados.

Os drivers que chamam NdisFRegisterFilterDriver devem estar preparados para uma chamada imediata para qualquer uma de suas funções FilterXxx .

A estrutura NDIS_FILTER_DRIVER_CHARACTERISTICS especifica os pontos de entrada para estas funções FilterXxx obrigatórias:

FilterAttach

FilterDetach

FilterRestart

FilterPause

A estrutura NDIS_FILTER_DRIVER_CHARACTERISTICS especifica os pontos de entrada para essas funções opcionais e não alteráveis em tempo de execução FilterXxx :

FilterSetOptions

FilterSetModuleOptions

FilterOidRequest

FilterOidRequestComplete

FilterStatus

FilterNetPnPEvent

FilterDevicePnPEventNotify

FilterCancelSendNetBufferLists

A estrutura NDIS_FILTER_DRIVER_CHARACTERISTICS especifica os pontos de entrada padrão para essas funções opcionais e alteráveis em tempo de execução FilterXxx :

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

As quatro funções anteriores também são definidas na estrutura NDIS_FILTER_PARTIAL_CHARACTERISTICS . Essa estrutura especifica as funções que podem ser alteradas em um tempo de execução chamando a função NdisSetOptionalHandlers da função FilterSetModuleOptions . Se um driver de filtro alterar essas características parciais em runtime, ele deverá fornecer o ponto de entrada para FilterSetModuleOptions. As características parciais podem ser diferentes para cada módulo de filtro. Para obter mais informações, consulte Iniciando um módulo de filtro.

O NDIS chama a função FilterSetOptions dentro do contexto da chamada para NdisFRegisterFilterDriver. FilterSetOptions registra serviços opcionais com NDIS. Para obter mais informações, consulte Configurando serviços opcionais de driver de filtro.

Se a chamada para NdisFRegisterFilterDriver for bem-sucedida, o NDIS preencherá a variável em NdisFilterDriverHandle com um identificador de driver de filtro. O driver de filtro salva esse identificador e, posteriormente, passa esse identificador para funções NDIS, como NdisFDeregisterFilterDriver, que exigem um identificador de driver de filtro como um parâmetro de entrada. Quando o driver descarrega, ele deve chamar a função NdisFDeregisterFilterDriver para liberar os recursos de driver alocados por NdisFRegisterFilterDriver.

Depois que FilterSetOptions retornar, os módulos de filtro estarão no estado Desanexado . O NDIS pode chamar a função FilterAttach do driver de filtro a qualquer momento após o retorno da chamada para FilterSetOptions . O driver executa a inicialização específica do módulo de filtro na função FilterAttach . Para obter mais informações sobre como anexar um módulo de filtro a uma pilha de driver, consulte Anexando um módulo de filtro.

Um driver de filtro também executa qualquer outra inicialização específica do driver necessária no DriverEntry. O driver de filtro deve liberar os recursos específicos do driver que ele aloca em sua rotina FilterDriverUnload . Para obter mais informações, consulte Descarregando um driver de filtro.