NDIS_PD_SET_RECEIVE_FILTER função de retorno de chamada (ndis.h)

A plataforma PacketDirect (PD) chama a função NdisPDSetReceiveFilter de um driver de miniporta compatível com PD para direcionar fluxos específicos de pacotes para uma fila de recebimento de PD específica.

Nota Você deve declarar a função usando o tipo NDIS_PD_SET_RECEIVE_FILTER . Para obter mais informações, consulte a seção Exemplos a seguir.

 

Sintaxe

NDIS_PD_SET_RECEIVE_FILTER NdisPdSetReceiveFilter;

NTSTATUS() NdisPdSetReceiveFilter(
  [in]  NDIS_PD_PROVIDER_HANDLE ProviderHandle,
  [in]  const NDIS_PD_FILTER_PARAMETERS *FilterParameters,
  [out] NDIS_PD_FILTER_HANDLE *FilterHandle
)
{...}

Parâmetros

[in] ProviderHandle

Um identificador de provedor que identifica o objeto de provedor do driver de miniporta compatível com PD.

[in] FilterParameters

Parâmetros que identificam as informações necessárias para o filtro. Para obter mais informações, consulte a estrutura NDIS_PD_FILTER_PARAMETERS .

[out] FilterHandle

Um identificador para o filtro.

Retornar valor

Essa função retorna STATUS_SUCCESS quando é concluída com êxito, caso contrário, retorna o código de erro apropriado.

Comentários

Os filtros PD são aplicados antes que qualquer distribuição ocorra. É por isso que a correspondência de pacotes com um filtro PD pode ser colocada em sua fila de PD dedicada e o restante dos pacotes pode ser distribuído pelo RSS como de costume. O cliente PD é responsável por encanar filtros ambíguos não sobrepostos. No entanto, alguns PDs fornecidos podem permitir filtros ambíguos sobrepostos, desde que o cliente PD possa passar um valor de prioridade que indique qual filtro deve ser aplicado primeiro. O provedor PD poderá falhar nas solicitações de conjunto de filtros com STATUS_NOT_SUPPORTED se o cliente tentar definir filtros com perfis conflitantes ou condições de correspondência sobrepostas. A estrutura NDIS_PD_CAPABILITIES não permite que o provedor anuncie todas as combinações válidas de perfis que o cliente PD pode usar simultaneamente, é por isso que alguns dos recursos são descobertos pelo cliente PD em runtime quando e se o provedor de PD falhar na solicitação de conjunto de filtros com STATUS_NOT_SUPPORTED

Exemplos

Para definir uma função NdisPDSetReceiveFilter , primeiro você deve fornecer uma declaração de função que identifique o tipo de função que você está definindo. O Windows fornece um conjunto de tipos de função para drivers. Declarar uma função usando os tipos de função ajuda a Análise de Código para Drivers, SDV ( Verificador de Driver Estático ) e outras ferramentas de verificação a encontrar erros e é um requisito para escrever drivers para o sistema operacional Windows.

Por exemplo, para definir uma função NdisPDSetReceiveFilter chamada "MyPDSetReceiveFilter", use o tipo NDIS_PD_SET_RECEIVE_FILTER conforme mostrado neste exemplo de código:

NDIS_PD_SET_RECEIVE_FILTER MyPDSetReceiveFilter;

Em seguida, implemente sua função da seguinte maneira:

_Use_decl_annotations_
VOID
 MyPDSetReceiveFilter(
    NDIS_PD_PROVIDER_HANDLE  ProviderHandle,
    CONST NDIS_PD_FILTER_PARAMETERS*  FilterParameters,
    NDIS_PD_FILTER_HANDLE*  FilterHandle
    )
  {...}

O tipo de função NDIS_PD_SET_RECEIVE_FILTER é definido no arquivo de cabeçalho Ntddndis.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação Use_decl_annotations à sua definição de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função NDIS_PD_SET_RECEIVE_FILTER no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers NDIS.

Para obter informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10
Servidor mínimo com suporte Windows Server 2016
Plataforma de Destino Windows
Cabeçalho ndis.h
IRQL PASSIVE_LEVEL