Freigeben über


PROTOCOL_CM_CLOSE_CALL Rückruffunktion (ndis.h)

Die ProtocolCmCloseCall-Funktion ist eine erforderliche Funktion, die einen vorhandenen Aufruf beendet und alle Ressourcen freigibt, die der Anrufmanager für den Anruf zugewiesen hat.

Hinweis Sie müssen die Funktion mithilfe des PROTOCOL_CM_CLOSE_CALL Typs deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt "Beispiele".
 

Syntax

PROTOCOL_CM_CLOSE_CALL ProtocolCmCloseCall;

NDIS_STATUS ProtocolCmCloseCall(
  [in]           NDIS_HANDLE CallMgrVcContext,
  [in, optional] NDIS_HANDLE CallMgrPartyContext,
  [in, optional] PVOID CloseData,
  [in, optional] UINT Size
)
{...}

Parameter

[in] CallMgrVcContext

Gibt das Handle für einen kontextbezogenen Kontextbereich eines Anrufmanagers an, in dem der Anrufmanager den Status pro VC verwaltet. Dieses Handle wurde NDIS von den Anrufmanagern ProtocolCmMakeCall-Funktion bereitgestellt.

[in, optional] CallMgrPartyContext

Gibt ggf. den Handle für einen Kontextbereich eines Anrufmanagers an, in dem der Anrufmanager Informationen zu einer Partei auf einem Multipoint VC verwaltet. Dieses Handle ist NULL-, wenn der geschlossene Aufruf kein Multipoint-Aufruf ist.

[in, optional] CloseData

Zeigen Sie auf einen Puffer, der verbindungsorientierte clientspezifische Daten enthält, die über die Verbindung gesendet werden sollen, bevor der Aufruf beendet wird. Dieser Parameter ist NULL-, wenn das zugrunde liegende Netzwerkmedium beim Schließen einer Verbindung keine Übertragung von Daten unterstützt.

[in, optional] Size

Gibt die Länge des Puffers bei CloseData-in Byte an, null, wenn CloseData-NULL-ist.

Rückgabewert

ProtocolCmCloseCall gibt den Status seiner Vorgänge als einer der folgenden Zurück:

Rückgabecode Beschreibung
NDIS_STATUS_SUCCESS
Gibt an, dass der Anrufmanager den Anruf erfolgreich beendet hat.
NDIS_STATUS_PENDING
Gibt an, dass der Anrufmanager die Anforderung zum asynchronen Beenden des Anrufs abschließt. Wenn der Anrufmanager alle Vorgänge abgeschlossen hat, die zum Beenden der Verbindung erforderlich sind, muss er NdisCloseCallComplete aufrufen, um NDIS zu signalisieren, dass der Anruf geschlossen wurde.
NDIS_STATUS_INVALID_DATA
Gibt an, dass CloseData- angegeben wurde, aber das zugrunde liegende Netzwerkmedium unterstützt das gleichzeitige Senden von Daten beim Beenden eines Anrufs nicht.
NDIS_STATUS_XXX-
Gibt an, dass der Anrufmanager den Anruf nicht beenden konnte. Der zurückgegebene tatsächliche Fehler kann ein Status sein, der von einer anderen NDIS-Bibliotheksroutine weitergegeben wird.

Bemerkungen

ProtocolCmCloseCall mit Netzwerksteuerungsgeräten oder anderen medienspezifischen Akteuren kommuniziert, wie es durch seine Medien erforderlich ist, um eine Verbindung zwischen dem lokalen Knoten und einem Remoteknoten zu beenden. Wenn der Anruf-Manager für die Kommunikation mit Netzwerksteuerungsgeräten (z. B. einem Netzwerkswitch) erforderlich ist, sollte er eine virtuelle Verbindung mit dem Netzwerksteuerungsgerät verwenden, das er in seiner ProtocolBindAdapterEx--Funktion eingerichtet hat. Eigenständige Anrufmanager kommunizieren mit solchen Netzwerkgeräten, indem sie NdisCoSendNetBufferListsaufrufen. Miniport-Treiber mit integrierter Anrufverwaltungsunterstützung rufen nie NdisCoSendNetBufferLists. Stattdessen übertragen sie die Daten direkt über das Netzwerk.

Wenn CloseData- nichtNULL- ist und das Senden von Daten beim Beenden der Verbindung von den Medien unterstützt wird, die dieser Anrufmanager verarbeitet, sollte der Anrufmanager die unter CloseData- angegebenen Daten an den Remoteknoten übertragen, bevor die Anrufendung abgeschlossen wird. Wenn das gleichzeitige Senden von Daten mit einer beendeten Verbindung nicht unterstützt wird, sollten Anrufmanager NDIS_STATUS_INVALID_DATA zurückgeben.

Wenn ProtocolCmCloseCall- eine explizite CallMgrPartyContextübergeben wird, ist der beendete Aufruf eine Multipoint-VC, und der Anrufmanager muss jede erforderliche Netzwerkkommunikation mit seiner Netzwerkhardware ausführen, je nach Medientyp, um den Anruf als Multipoint-Aufruf zu beenden. Der Anrufmanager muss auch den Zuvor zugewiesenen Speicher in ProtocolCmMakeCallfür den Status pro Partei freigeben, auf den CallMgrPartyContext verweist. Wenn diese Ressourcen nicht ordnungsgemäß freigegeben, zugeordnet oder anderweitig deaktiviert werden, tritt ein Speicherverlust auf.

Nachdem der Anruf mit dem Netzwerk beendet wurde, werden alle Schließendaten gesendet, und alle Ressourcen bei CallMgrPartyContext freigegeben wurden, muss der Anrufmanager NdisCmDeactivateVcaufrufen. Dadurch werden NDIS und der zugrunde liegende Miniporttreiber benachrichtigt, falls vorhanden, keine weiteren Übertragungen für die jeweilige VC zu erwarten.

beispiele für

Um eine ProtocolCmCloseCall--Funktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der Funktion identifiziert, die Sie definieren. Windows stellt eine Reihe von Funktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Funktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine ProtocolCmCloseCall--Funktion zu definieren, die den Namen "MyCmCloseCall" hat, verwenden Sie den PROTOCOL_CM_CLOSE_CALL Typ, wie in diesem Codebeispiel gezeigt:

PROTOCOL_CM_CLOSE_CALL MyCmCloseCall;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
NDIS_STATUS
 MyCmCloseCall(
    NDIS_HANDLE  CallMgrVcContext,
    NDIS_HANDLE  CallMgrPartyContext,
    PVOID  CloseData,
    UINT  Size
    )
  {...}

Der PROTOCOL_CM_CLOSE_CALL Funktionstyp wird in der Ndis.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den funktionstyp PROTOCOL_CM_CLOSE_CALL in der Headerdatei angewendet werden, verwendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für NDIS-Treiber.

Informationen zu Use_decl_annotationsfinden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe ProtocolCmCloseCall (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe ProtocolCmCloseCall (NDIS 5.1)) in Windows XP.
Zielplattform- Fenster
Header- ndis.h (include Ndis.h)
IRQL- <= DISPATCH_LEVEL

Siehe auch

NdisClMakeCall

NdisCmDeactivateVc

NdisCoSendNetBufferLists

ProtocolCmMakeCall-