função FILTER_SYNCHRONOUS_OID_REQUEST (ndis.h)

O NDIS chama a função FilterSynchronousOidRequest de um driver de filtro para visualizar uma solicitação OID síncrona antes que a solicitação seja fornecida ao driver de miniporto subjacente.

Essa função tem suporte no NDIS 6.81 e posterior.

Sintaxe

NDIS_STATUS FILTER_SYNCHRONOUS_OID_REQUEST(
            NDIS_HANDLE      FilterModuleContext,
  [in, out] NDIS_OID_REQUEST *OidRequest,
  [out]     PVOID            *CallContext
);

Parâmetros

FilterModuleContext

Um identificador para a área de contexto do módulo de filtro que é o destino dessa solicitação. O driver de filtro criou e inicializou essa área de contexto na função FilterAttach .

[in, out] OidRequest

Um ponteiro para uma estrutura NDIS_OID_REQUEST que especifica a operação solicitada.

[out] CallContext

Um slot de armazenamento do tamanho de PVOID para o driver de filtro compartilhar o estado entre seus manipuladores FilterSynchronousOidRequest e FilterSynchronousOidRequestComplete . O NDIS garante que isso inicialmente aponte para um valor zero. Consulte a seção Comentários para obter mais informações.

Retornar valor

Essa função retorna um dos seguintes códigos de NDIS_STATUS apropriados:

Código de retorno Descrição
NDIS_STATUS_SUCCESS Permita que a solicitação OID continue se propagando para o driver de miniporto. Os drivers de filtro devem retornar esse código status para qualquer tipo não reconhecido de OID.
NDIS_STATUS_ALREADY_COMPLETE Pare de propagar a solicitação OID para baixo e, em vez disso, retorne-a ao chamador com o status NDIS_STATUS_SUCCESS.
  • NDIS_STATUS_BUFFER_TOO_SHORT
  • NDIS_STATUS_INVALID_LENGTH
  • NDIS_STATUS_INVALID_DATA
O mesmo que FilterDirectOidRequest.
NDIS_STATUS_RESOURCES O mesmo que FilterDirectOidRequest, mas com um cuidado de que as solicitações OID síncronas devem ser concluídas rapidamente e, portanto, os drivers de filtro normalmente devem evitar a alocação de recursos.
NDIS_STATUS_NOT_SUPPORTED Os drivers de filtro não devem retornar esse código simplesmente porque o OID não é reconhecido. Os drivers de filtro só poderão retornar isso se o filtro reconhecer a operação, mas não puder executá-la por algum motivo.

Comentários

FilterSynchronousOidRequest é uma função opcional. Se um driver de filtro não precisar observar ou modificar solicitações OID síncronas enviadas ao driver de miniporto, o driver de filtro deverá definir o ponto de entrada dessa função como NULL quando chamar NdisFRegisterFilterDriver.

O NDIS chama a função FilterSynchronousOidRequest do driver de filtro para processar solicitações OID síncronas originadas por drivers sobrepostos. Os drivers de filtro podem ler ou modificar alguns campos na estrutura NDIS_OID_REQUEST da seguinte maneira:

Campo Filtrar acesso
parâmetro Somente leitura
RequestType Leitura/gravação
PortNumber Leitura/gravação
Tempo limite Não acessar
RequestId Não acessar
RequestHandle Leitura/gravação
DATA Leitura/gravação
NdisReserved Não acessar
MiniportReserved Não acessar
SourceReserved Não acessar
SupportedRevision Leitura/gravação
Reservado1, Reservado2 Não acessar
SwitchId Leitura/gravação
VPortId Leitura/gravação
Flags Leitura/gravação

Além de modificar a estrutura NDIS_OID_REQUEST , os drivers de filtro podem controlar a solicitação usando o código de retorno de FilterSynchronousOidRequest:

  • NDIS_STATUS_SUCCESS: o OID continua a se propagar para o driver de miniporta.
  • NDIS_STATUS_ALREADY_COMPLETE: o OID é imediatamente concluído de volta para os drivers overlying, sem primeiro propagar para o driver de miniporto. A solicitação OID é concluída para o driver sobreposto com NDIS_STATUS_SUCCESS.
  • Qualquer outro código status: o OID é imediatamente concluído de volta para os drivers excessivamente, sem primeiro propagar para o driver de miniporto. A solicitação OID é concluída para o driver sobreposto com o código status retornado pelo driver de filtro.

Se o driver de filtro também registrar um manipulador FilterSynchronousOidRequestComplete , o NDIS garantirá que o manipulador FilterSynchronousOidRequestComplete será chamado se e somente se o manipulador FilterSynchronousOidRequest retornar NDIS_STATUS_SUCCESS.

O manipulador FilterSynchronousOidRequest pode gravar qualquer valor do tamanho de PVOID em *CallContext e o mesmo valor será retornado ao manipulador FilterSynchronousOidRequestComplete do driver de filtro quando a solicitação OID for concluída. O driver de filtro pode usar isso para transportar o estado entre os dois manipuladores. Como o manipulador FilterSynchronousOidRequestComplete só será invocado se o manipulador FilterSynchronousOidRequest retornar NDIS_STATUS_SUCCESS, não haverá motivo para gravar um valor em *CallContext ao retornar qualquer outro código. Da mesma forma, não há motivo para gravar um valor em *CallContext se o driver de filtro não fornecer um manipulador FilterSynchronousOidRequestComplete .

Os drivers de filtro não devem retornar NDIS_STATUS_PENDING de um manipulador FilterSynchronousOidRequest . As solicitações OID síncronas não podem ser pendentes ou canceladas.

Espera-se que os drivers de filtro retornem do manipulador FilterSynchronousOidRequest rapidamente, sem bloquear, esperar ou dormir. As solicitações OID síncronas são usadas apenas para operações de baixa latência, e os drivers de filtro devem se esforçar para continuar ou concluí-las em vários milissegundos. O NDIS não serializa solicitações OID síncronas entre si, em relação a outras solicitações OID ou em FilterPause. É responsabilidade do driver de filtro implementar qualquer sincronização necessária.

O NDIS serializa solicitações OID síncronas em FilterDetach: o NDIS garante que nenhuma solicitação OID síncrona estará ativa quando FilterDetach for invocado.

Os drivers de filtro não devem chamar NdisAllocateCloneOidRequest ou NdisCancelOidRequest em uma solicitação OID síncrona. Os drivers de filtro não devem chamar NdisFSynchronousOidRequest em uma solicitação OID recebida por meio de um manipulador FilterSynchronousOidRequest .

Se um driver de filtro gerar o IRQL em seu manipulador FilterSynchronousOidRequest , ele deverá restaurar o IRQL para seu nível inicial antes de retornar de seu manipulador FilterSynchronousOidRequest .

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1709
Plataforma de Destino Windows
Cabeçalho ndis.h (inclua Ndis.h)
IRQL <= DISPATCH_LEVEL

Confira também

FilterSynchronousOidRequestComplete

NdisFSynchronousOidRequest

Interface de solicitação OID síncrona no NDIS 6.80