Compartilhar via


Filtrando solicitações de OID em um driver de filtro NDIS

Os drivers de filtro podem processar solicitações OID originadas por drivers sobrepostos. O NDIS chama a função FilterOidRequest para processar cada solicitação OID. Os drivers de filtro podem encaminhar solicitações OID para drivers subjacentes chamando a função NdisFOidRequest .

O NDIS pode chamar a função FilterCancelOidRequest de um driver de filtro para cancelar uma solicitação OID. Quando o NDIS chama FilterCancelOidRequest, o driver de filtro deve tentar chamar a função NdisFOidRequest o mais rápido possível.

A figura a seguir ilustra uma solicitação OID filtrada.

Diagrama ilustrando o processo de uma solicitação OID filtrada.

O driver de filtro pode concluir a solicitação OID de forma síncrona ou assíncrona retornando NDIS_STATUS_SUCCESS ou NDIS_STATUS_PENDING, respectivamente, de FilterOidRequest. FilterOidRequest também pode ser concluído de forma síncrona com um erro status.

Um driver de filtro que lida com êxito com uma solicitação de conjunto de OID deve definir o membro SupportedRevision na estrutura NDIS_OID_REQUEST ao retornar da solicitação de conjunto de OID. O membro SupportedRevision notifica o iniciador da solicitação OID sobre qual revisão o driver tinha suporte. Para obter mais informações sobre informações de versão em estruturas NDIS, consulte Especificando informações de versão do NDIS.

Se FilterOidRequest retornar NDIS_STATUS_PENDING, ele deverá chamar a função NdisFOidRequestComplete depois de concluir a solicitação OID. Nesse caso, o driver passa os resultados da solicitação no parâmetro OidRequest de NdisFOidRequestComplete. O driver passa a status final da solicitação no parâmetro Status de NdisFOidRequestComplete.

Se FilterOidRequest retornar NDIS_STATUS_SUCCESS, ele retornará os resultados de uma solicitação de consulta na estrutura NDIS_OID_REQUEST no parâmetro OidRequest . Nesse caso, o driver não chama a função NdisFOidRequestComplete .

Para encaminhar uma solicitação OID para drivers subjacentes, um driver de filtro chama a função NdisFOidRequest . Se uma solicitação não deve ser encaminhada para os drivers subjacentes, um driver de filtro pode concluir a solicitação imediatamente. Para concluir a solicitação sem encaminhamento, o driver pode retornar NDIS_STATUS_SUCCESS (ou um erro status) de FilterOidRequest ou pode chamar NdisFOidRequestComplete após retornar NDIS_STATUS_PENDING.

Nota Antes que o driver chame NdisFOidRequest, o driver deve alocar uma estrutura NDIS_OID_REQUEST e transferir as informações de solicitação para a nova estrutura chamando NdisAllocateCloneOidRequest.

A solicitação encaminhada prossegue da mesma forma que uma solicitação iniciada por um driver de filtro. Para obter mais informações, consulte Gerando solicitações OID de um driver de filtro NDIS.

Depois que os drivers subjacentes concluirem uma solicitação encaminhada, o driver de filtro poderá modificar a resposta, se necessário, e passá-la para drivers sobrepostos.

Um driver de filtro pode receber solicitações OID de drivers sobrepostos quando está no estado Reiniciar, Executar, Pausar ou Pausar .

Nota Assim como os drivers de miniporto, os drivers de filtro podem receber apenas uma solicitação OID por vez. Como o NDIS serializa solicitações enviadas para um módulo de filtro, um driver de filtro não pode ser chamado em FilterOidRequest antes de concluir a solicitação anterior.

Veja a seguir um exemplo de um driver de filtro modificando uma solicitação OID:

  • Um driver de filtro adiciona um cabeçalho. Nesse caso, depois que o driver recebe uma resposta a uma consulta para OID_GEN_MAXIMUM_FRAME_SIZE dos drivers subjacentes, o filtro subtrai o tamanho de seu cabeçalho da resposta. O driver subtrai seu tamanho de cabeçalho porque o driver insere um cabeçalho na frente de cada pacote enviado e remove o cabeçalho em cada pacote recebido.