Compartilhar via


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

A função ProtocolOidRequestComplete conclui o processamento de uma solicitação OID iniciada pelo driver de protocolo para a qual a função NdisOidRequest retornada NDIS_STATUS_PENDING.

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

Sintaxe

PROTOCOL_OID_REQUEST_COMPLETE ProtocolOidRequestComplete;

void ProtocolOidRequestComplete(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNDIS_OID_REQUEST OidRequest,
  [in] NDIS_STATUS Status
)
{...}

Parâmetros

[in] ProtocolBindingContext

Um identificador para uma área de contexto alocada pelo driver de protocolo na qual o driver de protocolo mantém o estado de tempo de execução por associação. O driver forneceu esse identificador quando chamou a função NdisOpenAdapterEx.

[in] OidRequest

Um ponteiro para a estrutura de NDIS_OID_REQUEST fornecida pelo driver de protocolo que foi passada anteriormente para a função de NdisOidRequest.

[in] Status

O status final da solicitação. O driver subjacente ou o NDIS determina esse status final. Esse parâmetro determina o que ProtocolOidRequestComplete faz com as informações em OidRequest.

Valor de retorno

Nenhum

Observações

ProtocolOidRequestComplete usa o valor de entrada de Status da seguinte maneira:

  • Se Status for NDIS_STATUS_SUCCESS, o bytesRead ou bytesWritten membro da estrutura NDIS_OID_REQUEST foi definido pelo NDIS ou pelo driver subjacente para especificar a quantidade de informações fornecidas pelo driver de protocolo que foram transferidas do buffer em do InformationBuffer para a NIC em uma operação definida ou quantas informações foram retornadas em InformationBuffer em resposta a uma operação de consulta.

    Se o driver de protocolo fez uma consulta, ProtocolOidRequestComplete poderá usar os dados retornados em do InformationBuffer de qualquer forma determinado pelo driver de protocolo, dependendo do valor do membro Oid do.

    Por exemplo, se o driver de protocolo iniciou originalmente um OID_GEN_MAXIMUM_SEND_PACKETS consulta, ProtocolOidRequestComplete pode configurar variáveis de estado na área de ProtocolBindingContext para limitar o número de envios pendentes que o driver configurará para chamadas subsequentes à função de NdisSendNetBufferLIsts do.

  • Se Status for NDIS_STATUS_INVALID_LENGTH ou NDIS_STATUS_BUFFER_TOO_SHORT, o membro bytesNeeded especificará o valor específico do OID do membro InformationBufferLength necessário para executar a operação solicitada.

    Nessas circunstâncias, ProtocolOidRequestComplete pode alocar espaço de buffer suficiente para a solicitação, configurar outra estrutura NDIS_OID_REQUEST com o InformationBufferLength necessário e o mesmo Oid e tentar novamente a chamada para a função NdisOidRequest.

    ProtocolOidRequestComplete pode repetir solicitações para determinados outros argumentos de XXX NDIS_STATUS_, como descrito na referência para a função NdisOidRequest.

  • Se Status for um valor NDIS_STATUS_ XXX que seja um erro irrecuperável, ProtocolOidRequestComplete deverá liberar a memória alocada para a estrutura de NDIS_OID_REQUEST e determinar se o driver deve fechar a associação ou ajustar suas informações de estado específicas de associação para lidar com operações de E/S de rede contínuas na associação.
Para consultas e conjuntos globais, a chamada do driver de miniporto sem conexão subjacente para a função NdisMOidRequestComplete faz com que o NDIS chame a função ProtocolOidRequestComplete. O NDIS encaminha a de Status de determinada pelo miniporto passada para NdisMOidRequestComplete como o status de de entrada para ProtocolOidRequestComplete.

Para consultas específicas de associação, o NDIS chama a função ProtocolOidRequestComplete em si. Como a biblioteca NDIS mantém associações para todos os drivers de miniporto, o NDIS pode retornar informações específicas de associação apenas sobre drivers subjacentes que relatam seu tipo médio como um para o qual o sistema fornece uma biblioteca de filtros. O NDIS retorna NDIS_STATUS_NOT_SUPPORTED para consultas específicas de associação iniciadas pelo driver de protocolo para outros drivers de miniporto.

Para obter mais informações sobre OIDs definidos pelo sistema, consulte OIDs do NDIS.

ProtocolOidRequestComplete pode ser chamado antes que o driver de protocolo tenha tempo para inspecionar o código de status que NdisOidRequest retorna em Status.

Chamadas NDIS ProtocolOidRequestComplete no <DO IRQL = DISPATCH_LEVEL.

exemplos de

Para definir uma função ProtocolOidRequestComplete, 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 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 gravar drivers para o sistema operacional Windows.

Por exemplo, para definir uma função ProtocolOidRequestComplete chamada "MyOidRequestComplete", use o tipo PROTOCOL_OID_REQUEST_COMPLETE conforme mostrado neste exemplo de código:

PROTOCOL_OID_REQUEST_COMPLETE MyOidRequestComplete;

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

_Use_decl_annotations_
VOID
 MyOidRequestComplete(
    NDIS_HANDLE  ProtocolBindingContext,
    PNDIS_OID_REQUEST  OidRequest,
    NDIS_STATUS  Status
    )
  {...}

O tipo de função PROTOCOL_OID_REQUEST_COMPLETE é definido no arquivo de cabeçalho Ndis.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 PROTOCOL_OID_REQUEST_COMPLETE 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
de cliente com suporte mínimo Com suporte no NDIS 6.0 e posterior.
da Plataforma de Destino Windows
cabeçalho ndis.h (inclua Ndis.h)
IRQL <= DISPATCH_LEVEL

Consulte também

NDIS_OID_REQUEST

NdisMOidRequestComplete

NdisOidRequest

NdisOpenAdapterEx

OID_GEN_MAXIMUM_SEND_PACKETS