Freigeben über


PROTOCOL_CO_CREATE_VC Rückruffunktion (ndis.h)

Die ProtocolCoCreateVc--Funktion ist eine erforderliche Funktion, die Ressourcen zuweist, die für einen Anrufmanager oder Client zum Aktivieren und Verwalten einer virtuellen Verbindung (VC) erforderlich sind.

Note You must declare the function by using the PROTOCOL_CO_CREATE_VC type. Weitere Informationen finden Sie im folgenden Abschnitt "Beispiele".
 

Syntax

PROTOCOL_CO_CREATE_VC ProtocolCoCreateVc;

NDIS_STATUS ProtocolCoCreateVc(
  [in]  NDIS_HANDLE ProtocolAfContext,
  [in]  NDIS_HANDLE NdisVcHandle,
  [out] PNDIS_HANDLE ProtocolVcContext
)
{...}

Parameter

[in] ProtocolAfContext

Gibt das Handle für einen protokollverteilten Kontextbereich an, in dem der Anruf-Manager oder Client seinen zustand pro Geöffneter Zustand verwaltet. Der Anrufmanager hat dieses Handle von der ProtocolCmOpenAf--Funktion bereitgestellt. Der Client hat diesen Handle bereitgestellt, wenn er NdisClOpenAddressFamilyEx- aus seiner ProtocolCoAfRegisterNotify-Funktion aufgerufen hat.

[in] NdisVcHandle

Gibt ein Handle an, das von NDIS bereitgestellt wird und diese virtuelle Verbindung eindeutig identifiziert. Dieses Handle ist für den Protokolltreiber nicht transparent und für die Verwendung der NDIS-Bibliothek reserviert. Der Anrufmanager und der Client müssen dieses Handle jedoch speichern, um nachfolgende Aufrufe an NdisCo/Cl/Cm/MCmXxx Funktionen zu übergeben, die diese VC betreffen.

[out] ProtocolVcContext

Gibt das Handle für einen vom Protokoll bereitgestellten Kontextbereich an, in dem der Anruf-Manager oder Client den Status dieser virtuellen Verbindung verwaltet.

Rückgabewert

ProtocolCoCreateVc- gibt den Status seiner Vorgänge als einen der folgenden Werte zurück:

Rückgabecode Beschreibung
NDIS_STATUS_SUCCESS
Gibt an, dass der Anrufmanager oder der Client alle erforderlichen Ressourcen erfolgreich zugeordnet und/oder initialisiert hat, die zum Einrichten und Verwalten einer virtuellen Verbindung erforderlich waren.
NDIS_STATUS_RESOURCES
Gibt an, dass der Anrufmanager oder Der Client seine Ressourcen zum Einrichten und Verwalten einer virtuellen Verbindung nicht zuordnen und/oder initialisieren konnte.
NDIS_STATUS_XXX-
Gibt an, dass sich der Anruf-Manager oder Client nicht in einen Zustand setzen konnte, in dem eine virtuelle Verbindung hergestellt werden konnte. Dies kann ein Fehlerrücklaufwert sein, der von einer anderen NDIS-Bibliotheksroutine weitergegeben wird.
Hinweis Anrufmanager oder -clients können NDIS_STATUS_PENDING von ihren ProtocolCoCreateVc--Funktionen nicht zurückgeben. Durch das Zurückgeben ausstehender Dateien wird diese virtuelle Verbindung nicht verwendbar gerendert, und die NDIS-Bibliothek ruft den Client oder den Anruf-Manager auf, um sie zu löschen.
 

Bemerkungen

Die ProtocolCoCreateVc- Funktion eines Anruf-Managers oder Clients wird immer aufgerufen, wenn der entsprechende Client oder Anrufmanager NdisCoCreateVcaufruft. Clients initiieren die Erstellung von VCs beim Einrichten ihrer ausgehenden Anrufe, bevor sie NdisClMakeCallaufrufen. Ein Anrufmanager initiiert die Erstellung eines VC im Prozess der Benachrichtigung seines Clients, dass der CM ein Eingehendes Anrufangebot von einem Remoteknoten empfangen hat, der an einen SAP weitergeleitet wird, der bereits vor den CM-Anrufen bei diesem Client bei dem CM registriert ist. NdisCmDispatchIncomingCall.

ProtocolCoCreateVc alle erforderlichen Zuordnungen dynamischer Ressourcen und Strukturen durchführt, die der Anrufmanager oder Client für nachfolgende Vorgänge auf einem VC ausführen muss, der aktiviert wird. Zu diesen Ressourcen gehören, jedoch nicht beschränkt auf Speicherpuffer, Datenstrukturen, Ereignisse und andere ähnliche Ressourcen. Anrufmanager und Kunden sollten auch alle relevanten pro VC-Strukturen initialisieren, die sie benötigen, wenn ein Anruf eingerichtet wird.

Verbindungsorientierte Protokolltreiber müssen den Handle für die VC speichern, der in NdisVcHandle-angegeben ist, in ihrem Zustandsbereich pro VC, der in zukünftigen Vorgängen für diese virtuelle Verbindung verwendet werden soll. Die NdisVcHandle- ist als erforderlicher Parameter für die NdisCoXxx, NdisCmXxxund/oder NdisClXxx, dass anschließend ein solches verbindungsorientiertes Protokoll aufgerufen wird.

Wenn ein Anrufmanager oder Client Speicher für seine eigenen VC-Daten zugewiesen und seinen Zustand initialisiert hat, sollte die Adresse dieser Datenstruktur im Handle festgelegt werden, bevor das Steuerelement an NDIS zurückgegeben wird. Leiten Sie dazu den Handle ab und speichern Sie einen Zeiger auf den protokollgebundenen Datenbereich als Wert des Handles. Zum Beispiel:

*ProtocolVcContext = SomeBuffer;

Wenn ProtocolCoCreateVc die Ressource nicht zuordnen kann, die sie für nachfolgende Netzwerk-E/A-Vorgänge benötigt, sollte sie alle Ressourcen freigeben, die für diese VC zugewiesen wurden, und die Rückgabesteuerung mit dem Status NDIS_STATUS_RESOURCES.

Wenn ProtocolCoCreateVc seine erforderlichen Vorgänge abgeschlossen hat und den Anruf-Manager oder Client bereit gemacht hat, die Aufrufinitialisierung für diese virtuelle Verbindung auszuführen, sollte ProtocolCoCreateVc- die Steuerung so schnell wie möglich mit dem Status NDIS_STATUS_SUCCESS zurückgeben.

Aufrufe von ProtocolCoCreateVc- sind inhärent synchron. Das heißt, ProtocolCoCreateVc-kann NDIS_STATUS_PENDING nicht zurückgeben.

Nachdem die ProtocolCoCreateVc--Funktion eines Anrufmanagers die Steuerung zurückgegeben hat, wird die ProtocolCmMakeCall--Funktion des Anrufmanagers aufgerufen, um eine Verbindung mit einem Remoteknoten herzustellen. Anrufmanager sollten in ProtocolCmMakeCall- keine Maßnahmen ergreifen, die tatsächlich einen Aufruf herstellen, da die VC möglicherweise zerstört wird, bevor ein Aufruf aufgrund einer Fehlerbedingung in einer anderen Komponente von verbindungsorientiertem NDIS hergestellt wird.

Nachdem die ProtocolCoCreateVc--Funktion eines Clients die Steuerung zurückgegeben hat, wird die ProtocolClIncomingCall--Funktion des Clients benachrichtigt, wenn eine remote initiierte Anforderung zum Herstellen einer Verbindung mit einem VOM Client registrierten SAP über das Netzwerk erfolgt.

beispiele für

Um eine ProtocolCoCreateVc--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 ProtocolCoCreateVc--Funktion zu definieren, die den Namen "MyCoCreateVc" hat, verwenden Sie den PROTOCOL_CO_CREATE_VC Typ, wie in diesem Codebeispiel gezeigt:

PROTOCOL_CO_CREATE_VC MyCoCreateVc;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
NDIS_STATUS
 MyCoCreateVc(
    NDIS_HANDLE  ProtocolAfContext,
    NDIS_HANDLE  NdisVcHandle,
    PNDIS_HANDLE  ProtocolVcContext
    )
  {...}

Der PROTOCOL_CO_CREATE_VC 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 PROTOCOL_CO_CREATE_VC Funktionstyp 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 ProtocolCoCreateVc (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe ProtocolCoCreateVc (NDIS 5.1)) in Windows XP.
Zielplattform- Fenster
Header- ndis.h (include Ndis.h)
IRQL- <= DISPATCH_LEVEL

Siehe auch

NdisClMakeCall

NdisClOpenAddressFamilyEx

NdisCmDispatchIncomingCall

ProtocolClIncomingCall-

ProtocolCmMakeCall-

ProtocolCmOpenAf-

ProtocolCoAfRegisterNotify