Função NdisClCloseCall (ndis.h)

NdisClCloseCall solicita que uma chamada na VC especificada seja interrompida.

Sintaxe

NDIS_STATUS NdisClCloseCall(
  [in]           NDIS_HANDLE NdisVcHandle,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in, optional] PVOID       Buffer,
  [in]           UINT        Size
);

Parâmetros

[in] NdisVcHandle

Manipule para a VC da chamada que está sendo fechada ou desconectada. Esse identificador foi fornecido pelo NDIS quando a VC foi originalmente criada com NdisCoCreateVc, seja pelo cliente em preparação para fazer uma chamada de saída ou pelo gerenciador de chamadas em preparação para expedir uma chamada de entrada para o cliente.

[in, optional] NdisPartyHandle

Manipule para a última parte a ser descartada em um VC de vários pontos ou NULL. Se essa for uma VC de vários pontos, o cliente obteve esse identificador de uma chamada anterior para NdisClMakeCall ou NdisClAddParty.

[in, optional] Buffer

Ponteiro para um buffer alocado pelo chamador que contém todos os dados a serem transmitidos para a parte no nó remoto quando a conexão é fechada. Dependendo do meio subjacente, esse ponteiro pode ser NULL.

[in] Size

Especifica o tamanho, em bytes, em Buffer, zero se Buffer for NULL.

Retornar valor

Quando NdisClCloseCall retorna qualquer coisa diferente de NDIS_STATUS_PENDING, o cliente deve fazer uma chamada interna para sua Função ProtocolClCloseCallComplete . Caso contrário, o NDIS chamará a função ProtocolClCloseCallComplete do cliente quando essa operação for concluída.

Comentários

Os clientes geralmente chamam NdisClCloseCall em qualquer uma das seguintes circunstâncias:

  • Para fechar uma chamada estabelecida, se a chamada foi iniciada pelo cliente com NdisClMakeCall ou se foi oferecida por um par remoto e aceita pelo cliente Função ProtocolClIncomingCall .
  • Na lista Função ProtocolClIncomingCloseCall para derrubar uma chamada estabelecida.

    Isso ocorre quando a parte remota fecha uma chamada de entrada que a parte remota iniciou originalmente e que o cliente aceitou. Para chamadas de saída iniciadas pelo cliente, isso ocorre quando a parte remota fecha a conexão ponto a ponto no nó remoto ou quando a última parte restante em uma VC de vários pontos fecha a chamada no nó remoto.

  • Na lista Função ProtocolClMakeCallComplete para derrubar uma tentativa iniciada pelo cliente de fazer uma chamada de saída.

    Isso ocorrerá se o gerenciador de chamadas tiver modificado os parâmetros de chamada especificados pelo cliente passados para NdisClMakeCall e o cliente achar essas modificações inaceitáveis.

  • Da função ProtocolClIncomingQoSChange para derrubar uma chamada estabelecida.

    Isso ocorrerá se uma alteração de QoS proposta pela outra parte na VC for inaceitável para o cliente.

  • Na lista Função ProtocolClModifyCallQoSComplete para derrubar uma chamada estabelecida.

    Isso ocorrerá se uma alteração de QoS proposta pelo cliente na VC não for aceita e o QoS modificado por CM retornado ao ProtocolClModifyCallQoSComplete for inaceitável para o cliente.

Antes de chamar NdisClCloseCall, um protocolo deve garantir que todos os seus pacotes de envio pendentes tenham sido retornados à suaFunção ProtocolCoSendNetBufferListsComplete. (Pacotes enviados por meio de NdisCoSendNetBufferLists são sempre retornados de forma assíncrona para ProtocolCoSendNetBufferListsComplete.) Depois de chamar NdisClCloseCall, um protocolo não deve chamar NdisCoSendNetBufferLists para enviar pacotes na VC referenciada por NdisClCloseCall.

A chamada de um cliente para NdisClCloseCall faz com que o NDIS marque o NdisVcHandle como fechando e chame a função ProtocolCmCloseCall do CM.

Para derrubar uma chamada estabelecida em uma VC de vários pontos criada pelo cliente, o cliente deve chamar NdisClDropParty uma ou mais vezes para liberar todas, exceto a última parte na VC, antes de chamar NdisClCloseCall. O gerenciador de chamadas falhará na solicitação de qualquer cliente para fechar uma chamada de vários pontos se a VC fornecida ainda tiver mais de uma parte conectada. O NdisPartyHandle passado para NdisClCloseCall pode ser qualquer identificador válido que o cliente obteve de suas chamadas anteriores para NdisClAddParty ou NdisClMakeCall com o NdisVcHandle fornecido.

Como partes remotas de uma solicitação de chamada multiponto iniciada pelo cliente para que suas conexões sejam fechadas, o NDIS chama a função ProtocolClDropParty do cliente, desde que exista mais de uma parte pendente na VC de vários pontos criados pelo cliente. Quando a última parte remota restante fecha sua conexão, o NDIS chama o clienteEm vez disso, a função ProtocolClIncomingCloseCall. Consequentemente, a função ProtocolClIncomingCloseCall de qualquer cliente que configure conexões de vários pontos deve identificar a última parte restante em seus VCs de vários pontos e passar o NdisPartyHandle apropriado para NdisClCloseCall.

Depois que o cliente libera um NdisPartyHandle com NdisClCloseCall, ele pode liberar (ou reinicializar para reutilizar) os recursos para o estado por parte que estava mantendo. No entanto, o cliente não pode liberar ou reutilizar seus recursos por VC de maneira semelhante ao concluir a operação iniciada com NdisClCloseCall porque o NdisVcHandle, que não pode ser reutilizado para fazer outra chamada porque está marcado como fechamento, ainda é válido até que a VC seja destruída. O cliente deverá chamar NdisCoDeleteVc se ele criou a VC para uma chamada de saída antes de liberar ou reinicializar seus recursos por VC ou o cliente deverá adiar a versão ou a reinicialização desses recursos até que sua função ProtocolCoDeleteVc seja chamada.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte para drivers NDIS 6.0 e NDIS 5.1 (consulte NdisClCloseCall (NDIS 5.1)) no Windows Vista. Com suporte para drivers NDIS 5.1 (consulte NdisClCloseCall (NDIS 5.1)) no Windows XP.
Plataforma de Destino Área de Trabalho
Cabeçalho ndis.h (inclua Ndis.h)
Biblioteca Ndis.lib
IRQL <= DISPATCH_LEVEL
Regras de conformidade de DDI Irql_Protocol_Driver_Function(ndis)

Confira também

NdisClDropParty

NdisClMakeCall

NdisClModifyCallQoS

NdisCoDeleteVc

NdisCoSendNetBufferLists

ProtocolClCloseCallComplete

ProtocolClIncomingCallQoSChange

ProtocolClIncomingCloseCall

ProtocolClIncomingDropParty

ProtocolClMakeCallComplete

ProtocolClModifyCallQoSComplete

ProtocolCmCloseCall

ProtocolCoSendNetBufferListsComplete