Arresto TAPI CONDIS
Una sessione TAPI inizia dopo che un driver miniport della rete WAN CoNDIS ha enumerato le funzionalità TAPI in un'applicazione. All'interno di una sessione è possibile aprire una o più righe e è possibile stabilire una o più chiamate. Durante il periodo di apertura di una riga, è possibile stabilire molte chiamate e quindi chiudere o eliminare. Durante una sessione, una o più righe possono passare attraverso transizioni da aperte a chiuse molte volte. Il modo in cui un driver miniport gestisce tali transizioni è descritto in questa sezione.
Chiusura di una chiamata
Una chiamata in-process può essere chiusa dal nodo locale o dal nodo remoto. La chiamata può essere chiusa sul nodo locale, perché l'ultima applicazione con un handle alla chiamata ha chiuso l'handle o forse perché è stato chiamato miniportHaltEx o MiniportResetEx del driver miniport. Se il nodo remoto si blocca in una chiamata in-process, il driver miniport deve informare i livelli superiori per abbattere la chiamata.
Se un'applicazione nel nodo locale chiude la chiamata, deve disconnettere la chiamata. Una chiamata viene disconnessa in seguito a un'applicazione che chiama la funzione lineDrop TAPI. Questa chiamata di funzione TAPI fa sì che il driver NDPROXY chiami la funzione NdisClCloseCall e passi un handle che rappresenta il vc per la chiamata. NDIS chiama a sua volta la funzione ProtocolCmCloseCall del driver Miniport WAN CoNDIS. Il driver miniport deve restituire NDIS_STATUS_PENDING a NDPROXY in modo che il driver miniport possa completare NdisClCloseCall in modo asincrono.
ProtocolCmCloseCall del driver miniport deve comunicare con i dispositivi di controllo di rete per terminare una connessione tra il nodo locale e un nodo remoto. Il driver miniport deve quindi chiamare la funzione NdisMCmDeactivateVc per avviare la disattivazione del vc usato per la chiamata.
Dopo che il driver miniport termina la connessione, ProtocolCmCloseCall può chiamare la funzione NdisMCmCloseCallComplete per completare la chiusura della chiamata.
Se il nodo remoto si blocca una chiamata in-process, il driver miniport chiama la funzione NdisCmDispatchIncomingCloseCall per informare NDISWAN e NDPROXY di rimuovere la chiamata in ingresso.
Chiusura di una riga
Una riga viene chiusa quando l'ultima applicazione con un handle aperto alla riga ha chiuso l'handle. Una riga viene chiusa in seguito a un'applicazione che chiama la funzione lineClose TAPI. Questa chiamata di funzione TAPI fa sì che il driver NDPROXY avvii la chiusura di tutte le chiamate su tale riga, come descritto nella sezione precedente. Il driver miniport dovrebbe eliminare le chiamate e pulire il proprio stato.
Chiusura di una sessione
La terminazione della sessione può essere avviata dai livelli superiori o da un driver miniport della rete WAN CoNDIS. Dopo che l'ultimo processo client è stato scollegato dal modulo di telefonia di livello superiore, il driver NDPROXY verrà informato che deve terminare la sessione con ognuno degli adattatori registrati. A tale scopo, il driver NDPROXY chiama la funzione NdisClCloseAddressFamily e passa l'handle alla famiglia di indirizzi TAPI. NDIS chiama a sua volta la funzione ProtocolCmCloseAf del driver miniport. Il driver miniport deve terminare tutte le attività correlate in corso sull'adattatore specificato e rilasciare tutte le risorse pertinenti. Dopo aver chiamato NdisClCloseAddressFamily, il client deve considerare l'handle per la famiglia di indirizzi TAPI non valida.
La terminazione della sessione avviata dal driver può verificarsi se il driver miniport viene scaricato nella funzione MiniportHaltEx . In genere, il driver miniport completa tutte le richieste NDPROXY in sospeso e notifica a NDISWAN che tutte le chiamate stanno chiudendo. Se il driver miniport è stato ricaricato in un secondo momento, verrà eseguito lo stesso processo di inizializzazione descritto in precedenza.
Il driver miniport della rete WAN CoNDIS potrebbe anche avviare la chiusura della sessione se ha subito una riconfigurazione dinamica che ha richiesto una reinizializzazione completa di tutti i client e i driver. Ad esempio, se la modellazione line-device di un adattatore (ad esempio, il numero di dispositivi line supportati) è stata modificata in tempo reale.