Compartilhar via


Pausando um módulo de filtro

Para pausar um módulo de filtro em execução, o NDIS chama a função FilterPause do driver de filtro. O módulo de filtro entra no estado Pausando no início da execução na função FilterPause .

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

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

  • Não deve originar novas indicações de recebimento.

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

  • Se houver operações de recebimento originadas pelo driver de filtro e esse NDIS não tiver sido concluído, o driver de filtro deverá aguardar o NDIS concluir essas operações. A operação de pausa não é concluída até que o NDIS chame a função FilterReturnNetBufferLists para todas essas indicações de recebimento pendentes.

  • Deve retornar quaisquer indicações de recebimento pendentes de que os drivers subjacentes se originaram imediatamente no NDIS. A operação de pausa não é concluída até que o driver chame a função NdisFReturnNetBufferLists para essas indicações de recebimento pendentes. Essas indicações de recebimento pendentes poderão existir se o driver enfileirar os buffers que recebe de drivers subjacentes.

  • Deve retornar novas indicações de recebimento de que os drivers subjacentes se originam no NDIS imediatamente chamando a função NdisFReturnNetBufferLists . Se necessário, o driver pode copiar as indicações de recebimento e enfileira-las antes que elas sejam retornadas.

    ObservaçãoNdisFReturnNetBufferLists não deve ser chamado para NBLs indicadas com NDIS_RECEIVE_FLAGS_RESOURCES sinalizador definido em uma chamada FilterReceiveNetBufferLists correspondente. Essas NBLs são retornadas ao NDIS de forma síncrona retornando da rotina FilterReceiveNetBufferLists .

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

  • Se houver operações de envio originadas pelo driver de filtro e esse NDIS não tiver sido concluído, o driver de filtro deverá aguardar o NDIS concluir essas operações. A operação de pausa não é concluída até que o NDIS chame a função FilterSendNetBufferListsComplete para todas essas solicitações de envio pendentes.

  • Deve retornar todas as novas solicitações de envio feitas à função FilterSendNetBufferLists imediatamente chamando a função NdisFSendNetBufferListsComplete . O driver de filtro deve definir o membro Status em cada estrutura 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 tratar status indicações em sua função FilterStatus.

  • 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.

  • Pode iniciar solicitações OID.

  • Não deve liberar os recursos alocados pelo driver durante a operação de anexação.

  • Deve cancelar temporizadores, se necessário, para interromper as operações de envio e recebimento.

    Para obter mais informações sobre temporizadores, consulte NDIS 6.0 Timer Services.

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

Se o driver retornar NDIS_STATUS_PENDING, ele deverá chamar a função NdisFPauseComplete depois de concluir a operação de pausa.

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

  • Não deve originar novas indicações de recebimento.

  • Deve retornar novas indicações de recebimento de que os drivers subjacentes se originam no NDIS imediatamente chamando a função NdisFReturnNetBufferLists . Se necessário, o driver pode copiar as indicações de recebimento e enfileira-las antes que elas sejam retornadas.

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

  • Deve retornar todas as novas solicitações de envio feitas à função FilterSendNetBufferLists imediatamente chamando a função NdisFSendNetBufferListsComplete . O driver de filtro deve definir o membro Status em cada estrutura NET_BUFFER_LIST como NDIS_STATUS_PAUSED.

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

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

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

  • Pode iniciar solicitações OID.

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