Excluindo uma VC
Somente o cliente orientado à conexão, o gerenciador de chamadas ou o driver MCM que iniciou a criação de um VC (circuito virtual) pode iniciar a exclusão dessa VC. Portanto, um cliente exclui uma VC que ele criou anteriormente para uma chamada de saída, um gerenciador de chamadas ou driver MCM exclui uma VC que ele criou anteriormente para uma chamada de entrada pela rede e um gerenciador de chamadas exclui uma VC que ele criou anteriormente para trocar mensagens de sinalização pela rede. (Um driver MCM não chama o NDIS para excluir uma VC que ele criou para trocar mensagens de sinalização. O driver MCM exclui essa VC com uma operação interna opaca ao NDIS.)
Um cliente orientado a conexões ou um gerenciador de chamadas inicia a exclusão de uma VC com NdisCoDeleteVc.
A figura a seguir mostra um cliente de um gerenciador de chamadas iniciando a exclusão de uma VC.
A figura a seguir mostra um cliente de um driver MCM iniciando a exclusão de uma VC.
A figura a seguir mostra um gerenciador de chamadas iniciando a exclusão de uma VC.
Quando um cliente ou gerenciador de chamadas chama NdisCoDeleteVc ou quando um driver MCM chama NdisMCmDeleteVc, não deve haver chamadas pendentes na VC fornecida e essa VC já deve ter sido desativada. Atender a esses requisitos implica que as seguintes condições são atendidas:
O cliente já chamou NdisClCloseCall com o NdisVcHandle fornecido e sua solicitação de chamada próxima 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 do cliente ou do gerenciador de chamadas para NdisCoDeleteVc faz com que o NDIS chame a função MiniportCoDeleteVc do driver de miniport subjacente e a função ProtocolCoDeleteVc do cliente ou gerenciador de chamadas com a qual o chamador compartilha o NdisVcHandle (consulte as três figuras anteriores).
MiniportCoDeleteVc libera todos os recursos alocados para a VC, bem como o contexto do driver de miniporto para a VC. ProtocolCoDeleteVc libera todos os recursos que o cliente ou o gerenciador de chamadas usou para executar operações no e acompanhar o estado da VC. MiniportCoDeleteVc e ProtocolCoDeleteVc são funções síncronas que não podem retornar NDIS_STATUS_PENDING.
Um driver MCM inicia a exclusão de uma VC com NdisMCmDeleteVc (consulte a figura a seguir).
Uma chamada de driver MCM para NdisMCmDeleteVc faz com que o NDIS chame a função ProtocolCoDeleteVc do cliente com o qual o driver MCM compartilhou o NdisVcHandle .
Quando NdisCoDeleteVc ou NdisMCmDeleteVc retorna o controle, o NdisVcHandle não é mais válido.