Usuwanie inwestora
Tylko klient zorientowany na połączenie, menedżer wywołań lub sterownik MCM, który zainicjował tworzenie obwodu wirtualnego (VC), może zainicjować usunięcie tego VC. W związku z tym klient usuwa vc, który został wcześniej utworzony na potrzeby połączenia wychodzącego, menedżer wywołań lub sterownik MCM usuwa vc, który został wcześniej utworzony na potrzeby połączenia przychodzącego za pośrednictwem sieci, a menedżer wywołań usuwa vc, który został wcześniej utworzony do wymiany komunikatów sygnalizujących za pośrednictwem sieci. (Sterownik MCM nie wzywa NDIS do usunięcia VC, który został utworzony w celu wymiany komunikatów sygnalizacyjnych. Usuwnie takiego VC odbywa się poprzez operację wewnętrzną, która jest nieprzejrzysta dla NDIS.)
Klient zorientowany na połączenie lub menedżer połączeń inicjuje usunięcie VC za pomocą NdisCoDeleteVc.
Na poniższej ilustracji przedstawiono klienta zarządzania połączeniami inicjującego usunięcie obwodu wirtualnego.
Ilustracja poniżej przedstawia klienta sterownika MCM inicjującego usunięcie VC.
Na poniższej ilustracji przedstawiono menedżera połączeń inicjującego usunięcie VC.
Gdy klient lub menedżer wywołań wywołuje NdisCoDeleteVc lub gdy sterownik MCM wywołuje NdisMCmDeleteVc, nie mogą istnieć zaległe wywołania dla danego VC i ten VC musi już zostać dezaktywowany. Aby spełnić te wymagania, oznacza to, że spełnione są następujące warunki:
Klient już wywołał NdisClCloseCall z danym NdisVcHandle, a jego wniosek o zamknięcie połączenia został zakończony pomyślnie.
Menedżer połączeń już wywołał NdisCmDeactivateVc lub sterownik MCM już wywołał NdisMCmDeactivateVc z podanym NdisVcHandle i żądanie dezaktywacji zostało pomyślnie zakończone (zobacz Żądanie przychodzące, aby zamknąć połączenie).
Wywołanie klienta lub menedżera połączeń do NdisCoDeleteVc powoduje, że NDIS wywołuje zarówno funkcję MiniportCoDeleteVc w sterowniku miniportu, jak i funkcję ProtocolCoDeleteVc klienta lub menedżera połączeń, z którym wywoływacz współdzieli NdisVcHandle (zobacz trzy poprzednie ilustracje).
MiniportCoDeleteVc zwalnia wszelkie zasoby przydzielone dla VC oraz kontekst sterownika miniportu związany z VC. ProtocolCoDeleteVc zwalnia wszystkie zasoby wykorzystywane przez klienta lub menedżera wywołań do wykonywania operacji i śledzenia stanu VC. Zarówno funkcje MiniportCoDeleteVc, jak i ProtocolCoDeleteVc są funkcjami synchronicznymi i nie mogą zwrócić NDIS_STATUS_PENDING.
Sterownik MCM inicjuje usunięcie VC z NdisMCmDeleteVc(zobacz poniższy rysunek).
Wywołanie sterownika MCM do NdisMCmDeleteVc powoduje wywołanie ProtocolCoDeleteVc funkcji klienta, z którym sterownik MCM udostępnił NdisVcHandle .
Gdy NdisCoDeleteVc lub NdisMCmDeleteVc zwraca kontrolę, NdisVcHandle nie jest już prawidłowa.