PROTOCOL_CL_MAKE_CALL_COMPLETE Rückruffunktion (ndis.h)
Die ProtocolClMakeCallComplete--Funktion wird von verbindungsorientierten NDIS-Clients verwendet, die ausgehende Anrufe tätigen. Solche Clients müssen über ProtocolClMakeCallComplete- Funktionen verfügen, um die asynchronen Vorgänge auszuführen, die sie mit NdisClMakeCallinitiieren. Andernfalls kann eine solche protokolltreiber registrierte ProtocolClMakeCallComplete- Funktion einfach die Steuerung zurückgeben.
Syntax
PROTOCOL_CL_MAKE_CALL_COMPLETE ProtocolClMakeCallComplete;
void ProtocolClMakeCallComplete(
[in] NDIS_STATUS Status,
[in] NDIS_HANDLE ProtocolVcContext,
[in, optional] NDIS_HANDLE NdisPartyHandle,
[in] PCO_CALL_PARAMETERS CallParameters
)
{...}
Parameter
[in] Status
Gibt den endgültigen Status des ursprünglichen Aufrufs des Clients an NdisClMakeCallan, der eine der folgenden Sein kann:
NDIS_STATUS_SUCCESS
Der Versuch des Clients, eine virtuelle Verbindung einzurichten, war erfolgreich. Folglich kann der Client mit der NdisVcHandle-, die von NdisCoCreateVczurückgegeben wird, übertragungen auf dem aktiven VC-Kontextbereich fortsetzen, den der Client im kontextbezogenen Bereich ProtocolVcContext gespeichert hat.
NDIS_STATUS_RESOURCES
NDIS, der Anrufmanager oder ein zugrunde liegender Treiber konnten keine ausreichenden Ressourcen zuordnen, um die Verbindung einzurichten.
NDIS_STATUS_XXX
Der Anruf-Manager oder der zugrunde liegende Miniporttreiber konnte keine aktive Verbindung herstellen, und NDIS hat diesen treiberbestimmten Fehlerstatus an den Client weitergegeben.
[in] ProtocolVcContext
Gibt das Handle für den Kontextbereich des Clients pro VC an, den der Client ursprünglich an NDIS übermittelt hat, wenn er NdisCoCreateVc- aufgerufen hat, um die VC für den ausgehenden Anruf einzurichten.
[in, optional] NdisPartyHandle
Wenn Status- NDIS_STATUS_SUCCESS ist und der Client eine multipoint-VC erstellt hat, indem ein explizites ProtocolPartyContext- Handle an NdisClMakeCall-übergeben wird, ist dies ein gültiger NdisPartyHandle-. Andernfalls ist dieser Parameter NULL-.
ProtocolClMakeCallComplete- muss alle gültigen Eingaben NdisPartyHandle-speichern, normalerweise im Kontextbereich des Clients. Der Client muss dieses Handle verwenden, wenn (oder wann) er einen nachfolgenden Aufruf an NdisClDropParty oder NdisClCloseCall, der auf diese Partei verweist.
[in] CallParameters
Zeiger auf eine gepufferte CO_CALL_PARAMETERS Struktur. Der Client hat diesen Puffer zugewiesen und diese Struktur mit clientbestimmten Daten initialisiert, bevor dieser Zeiger an NdisClMakeCallübergeben wird. Während der Verarbeitung der Anforderung des Clients kann der Anrufmanager diese Daten ändern, um die Ergebnisse der Aushandlung mit dem Netzwerk oder mit einem Signalpeer widerzuspiegeln.
Rückgabewert
Nichts
Bemerkungen
Ein Aufruf von ProtocolClMakeCallComplete gibt an, dass der Anrufmanager die Verarbeitung der Anforderung des Clients abgeschlossen hat, um eine virtuelle Verbindung mit NdisClMakeCallherzustellen.
Wenn der Versuch des Clients, einen ausgehenden Aufruf herzustellen, nicht erfolgreich ist (Eingabe Status ist alles außer NDIS_STATUS_SUCCESS), sollte ProtocolClMakeCallComplete- Folgendes ausführen:
- Freigeben oder Vorbereiten der Wiederverwendung des ProtocolPartyContext- Bereichs( falls vorhanden) und des Puffers bei CallParameters, den der Client zugewiesen hat.
- Zerlegen Sie die vom Client erstellte VC mit einem Aufruf von NdisCoDeleteVc und veröffentlichen Oder bereiten Sie sich auf die Wiederverwendung des vom Client zugewiesenen ProtocolVcContext- Bereichs vor.
- Überprüfen Sie die Flags Element der Struktur bei CallParameters, um festzustellen, ob CALL_PARAMETERS_CHANGED festgelegt ist, was angibt, dass der Anrufmanager die vom Client bereitgestellten Aufrufparameter geändert hat.
-
Überprüfen Sie in diesem Fall die Daten bei CallParameters, um festzustellen, ob sie für diese Verbindung akzeptabel sind.
Beispielsweise kann der Client die puffernden Aufrufparameter für die aktive VC beibehalten, die NdisPartyHandle- speichern, wenn dies ein Multipoint-VC ist, und im Allgemeinen den Client für nachfolgende Übertragungen und andere Vorgänge auf dem aktiven VC vorbereiten, wenn die angegebenen Aufrufparameter zufriedenstellend gefunden werden.
-
Wenn nicht, bestimmt das Signalprotokoll, ob der Client versuchen kann, für akzeptable Anrufparameter mit dem Anruf-Manager neu zu verhandeln.
Ein bestimmter Anrufmanager kann beispielsweise zulassen, dass seine Clients NdisClModifyCallQoS eine oder mehrere Male unter diesen Umständen aufrufen können.
-
Wenn die CM-geänderten Aufrufparameter inakzeptabel sind und eine weitere Neuverhandlung unmöglich ist, muss ProtocolClMakeCallComplete den Aufruf mit NdisClCloseCallabreißen.
In diesem Fall sollte ProtocolClMakeCallComplete-nicht versuchen, alle vom Client zugewiesenen Ressourcen zurückzugeben, die von NdisClCloseCall zurückgegeben werden, aber einfach die Steuerung zurückgeben können. Stattdessen sollte der Client die von ihm zugewiesenen Ressourcen freigeben (oder sie für die Wiederverwendung vorbereiten) innerhalb seiner ProtocolClCloseCallComplete--Funktion.
beispiele für
Um eine ProtocolClMakeCallComplete--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 ProtocolClMakeCallComplete--Funktion zu definieren, die den Namen "MyClMakeCallComplete" hat, verwenden Sie den PROTOCOL_CL_MAKE_CALL_COMPLETE Typ, wie in diesem Codebeispiel gezeigt:
PROTOCOL_CL_MAKE_CALL_COMPLETE MyClMakeCallComplete;
Implementieren Sie dann Ihre Funktion wie folgt:
_Use_decl_annotations_
VOID
MyClMakeCallComplete(
NDIS_STATUS Status,
NDIS_HANDLE ProtocolVcContext,
NDIS_HANDLE NdisPartyHandle,
PCO_CALL_PARAMETERS CallParameters
)
{...}
Der PROTOCOL_CL_MAKE_CALL_COMPLETE 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_CL_MAKE_CALL_COMPLETE 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 ProtocolClMakeCallComplete (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe ProtocolClMakeCallComplete (NDIS 5.1)) in Windows XP. |
Zielplattform- | Fenster |
Header- | ndis.h (include Ndis.h) |
IRQL- | <= DISPATCH_LEVEL |