Partilhar via


Eliminar um VC

Somente o cliente orientado à conexão, o gerenciador de chamadas ou o driver MCM que iniciou a criação de um circuito virtual (VC) pode iniciar a exclusão desse VC. Por conseguinte, um cliente elimina um VC que criou anteriormente para uma chamada de saída, um gestor de chamadas ou um controlador MCM elimina um VC que criou anteriormente para uma chamada de entrada através da rede e um gestor de chamadas elimina um VC que criou anteriormente para trocar mensagens de sinalização através da rede. (Um driver MCM não chama o NDIS para excluir um VC criado para trocar mensagens de sinalização. O driver MCM exclui tal VC com uma operação interna que é opaca para NDIS.)

Um cliente ou gestor de chamadas com orientação de ligação inicia a eliminação de um VC com NdisCoDeleteVc.

A figura a seguir mostra um cliente de um gerenciador de chamadas iniciando a exclusão de um VC.

Diagrama que mostra um cliente de um gestor de chamadas a iniciar a eliminação de um VC.

A seguinte figura mostra um cliente de um controlador MCM a iniciar a exclusão de um VC.

Diagrama mostrando um cliente de um driver MCM iniciando a exclusão de um VC.

A figura a seguir mostra um gerenciador de chamadas iniciando a exclusão de um VC.

Diagrama mostrando um gerente de chamadas iniciando a exclusão de um VC.

Quando um cliente ou gestor de chamadas chama NdisCoDeleteVc ou quando um controlador MCM chama NdisMCmDeleteVc , não deve haver chamadas pendentes no VC dado e esse VC já deve ter sido desativado. O cumprimento destes requisitos implica o cumprimento das seguintes condições:

  • O cliente já chamou NdisClCloseCall com o dado NdisVcHandle e a sua solicitação de encerramento de chamada foi concluída com êxito.

  • O gerenciador de chamadas já chamou NdisCmDeactivateVc ou o driver MCM já chamou NdisMCmDeactivateVc com o NdisVcHandle fornecido e a solicitação de desativação foi concluída com êxito (consulte Solicitação de entrada para fechar uma chamada).

A chamada de um cliente ou gestor de chamadas para NdisCoDeleteVc faz com que o NDIS chame tanto a função de MiniportCoDeleteVc do driver de miniporta subjacente quanto a função de ProtocolCoDeleteVc do cliente ou gestor de chamadas com o qual o chamador compartilha o NdisVcHandle (veja as três figuras anteriores).

MiniportCoDeleteVc libera todos os recursos alocados para o VC, bem como o contexto do driver de miniporta para o VC. ProtocolCoDeleteVc libera todos os recursos que o cliente ou o gerenciador de chamadas usou para executar operações e rastrear o estado do VC. Tanto MiniportCoDeleteVc quanto ProtocolCoDeleteVc são funções síncronas que não podem retornar NDIS_STATUS_PENDING.

Um driver MCM inicia a exclusão de um VC com NdisMCmDeleteVc (veja a figura a seguir).

Diagrama mostrando um driver MCM iniciando a exclusão de um VC.

Uma chamada do driver MCM para NdisMCmDeleteVc faz com que o NDIS chame a função ProtocolCoDeleteVc do cliente com o qual o driver MCM partilhou o NdisVcHandle.

Quando NdisCoDeleteVc ou NdisMCmDeleteVc retorna o controle, o NdisVcHandle não é mais válido.