Freigeben über


PROTOCOL_CM_OPEN_AF Rückruffunktion (ndis.h)

Die ProtocolCmOpenAf-Funktion ist erforderlich. Diese Funktion weist einem Anruf-Manager ressourcen pro geöffnet zu, um mit einem verbindungsorientierten NDIS-Client zu interagieren, der die Adressfamilie öffnet.

Hinweis Sie müssen die Funktion mit dem PROTOCOL_CM_OPEN_AF-Typ deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt Beispiele.
 

Syntax

PROTOCOL_CM_OPEN_AF ProtocolCmOpenAf;

NDIS_STATUS ProtocolCmOpenAf(
  [in]  NDIS_HANDLE CallMgrBindingContext,
  [in]  PCO_ADDRESS_FAMILY AddressFamily,
  [in]  NDIS_HANDLE NdisAfHandle,
  [out] PNDIS_HANDLE CallMgrAfContext
)
{...}

Parameter

[in] CallMgrBindingContext

Für einen nicht integrierten Anruf-Manager gibt CallMgrBindingContext das Handle für einen vom Anrufmanager zugewiesenen Kontextbereich an, in dem die Anruf-Manager ihre Statusinformationen pro Bindung verwalten. Der Anruf-Manager hat dieses Handle bereitgestellt, als er NdisOpenAdapterEx aufgerufen hat.

Für einen integrierten Anruf-Manager (MCM) gibt CallMgrBindingContext das Handle für einen durch Miniport zugewiesenen Kontextbereich an, in dem der Miniport seine Statusinformationen pro Adapter verwaltet. Der Miniport hat dieses Handle in seinem NdisMSetAttributesEx-Aufruf (für 5.x-Treiber) oder seinem NdisMSetMiniportAttributes-Aufruf (für 6.x-Treiber) bereitgestellt.

[in] AddressFamily

Gibt die Adressfamilie an, die ein Client öffnet. Diese Adressfamilie wurde vom Anruf-Manager registriert, als er aufgerufen hat NdisCmRegisterAddressFamilyEx.

[in] NdisAfHandle

Gibt ein von NDIS bereitgestelltes Handle an, das diese Adressfamilie instance eindeutig identifiziert. Dieses Handle ist für den Anruf-Manager undurchsichtig und für die Systemverwendung reserviert.

[out] CallMgrAfContext

Gibt das Handle für einen vom Anruf-Manager bereitgestellten Kontextbereich an, in dem der Anruf-Manager den Zustand zu diesem Geöffneten einer Adressfamilie verwaltet, die er bereitstellt.

Rückgabewert

ProtocolCmOpenAf gibt den status seiner Vorgänge wie folgt zurück:

Rückgabecode Beschreibung
NDIS_STATUS_SUCCESS
Gibt an, dass der Anruf-Manager alle Ressourcen erfolgreich zugeordnet und initialisiert hat, die zum Akzeptieren von Anforderungen vom Client an diese Adressfamilie erforderlich sind.
NDIS_STATUS_PENDING
Gibt an, dass der angeforderte Vorgang asynchron behandelt wird. Der Anruf-Manager muss aufrufen NdisCmOpenAddressFamilyComplete , wenn es alle open-AF-Vorgänge abgeschlossen hat, um NDIS (und dem Client) anzugeben, dass die Vorgänge abgeschlossen wurden.
NDIS_STATUS_RESOURCES
Gibt an, dass der Anruf-Manager die erforderlichen Vorgänge aufgrund eines Mangels an verfügbaren Systemressourcen, z. B. Arbeitsspeicher, nicht abschließen konnte.
NDIS_STATUS_XXX
Gibt an, dass sich der Anruf-Manager nicht in einen Zustand versetzen konnte, in dem er Anforderungen vom Client akzeptieren kann, um mit dieser Adressfamilie zu arbeiten. Dies kann ein Fehler sein, status von einer anderen NDIS-Bibliotheksfunktion weitergegeben wird, oder ein Fehler status vom Treiberschreiber für angemessen befunden.

Hinweise

ProtocolCmOpenAf führt alle erforderlichen Zuordnungen dynamischer Ressourcen und Strukturen aus, die der Aufruf-Manager für notwendig erachtet, um Vorgänge im Namen des Clients auszuführen, der eine instance dieser Adressfamilie öffnet. Zu diesen Ressourcen gehören speicherpuffer, Datenstrukturen, Ereignisse und andere ähnliche Ressourcen. Ein Anruf-Manager sollte auch alle relevanten pro geöffneten Daten initialisieren, bevor die Steuerung an NDIS zurückgegeben wird.

Wenn ein Anrufmanager seinen pro geöffneten Zustandsbereich zugewiesen hat, sollte die Adresse des Zustandsbereichs im CallMgrAfContext-Handle festgelegt werden, bevor die Steuerung an NDIS zurückgegeben wird. Leiten Sie dazu CallMgrAfContext ab, und speichern Sie einen Zeiger auf den Datenbereich als Wert des Handles. Beispiel:

*CallMgrAfContext = SomeBuffer;

Wenn ProtocolCmOpenAf die pro geöffneten Ressourcen nicht zuordnen kann, die es benötigt, um nachfolgende Anforderungen im Namen des Clients auszuführen, der diese Adressfamilie öffnet, sollte es alle Ressourcen freigeben, die es für das öffnen zugewiesen hat, und die Steuerung an die NDIS mit NDIS_STATUS_RESOURCES zurückgeben.

Wenn ProtocolCmOpenAf die erforderlichen Vorgänge abgeschlossen hat und der CM bereit ist, Anforderungen vom Client zu akzeptieren, sollte ProtocolCmOpenAf die Steuerung so schnell wie möglich mit einem status NDIS_STATUS_SUCCESS zurückgeben.

Beispiele

Um eine ProtocolCmOpenAf-Funktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der zu definierenden Funktion identifiziert. Windows stellt eine Reihe von Funktionstypen für Treiber bereit. Das Deklarieren einer Funktion mithilfe der Funktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine ProtocolCmOpenAf-Funktion mit dem Namen "MyCmOpenAf" zu definieren, verwenden Sie den typ PROTOCOL_CM_OPEN_AF , wie in diesem Codebeispiel gezeigt:

PROTOCOL_CM_OPEN_AF MyCmOpenAf;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
NDIS_STATUS
 MyCmOpenAf(
    NDIS_HANDLE  CallMgrBindingContext,
    PCO_ADDRESS_FAMILY  AddressFamily,
    NDIS_HANDLE  NdisAfHandle,
    PNDIS_HANDLE  CallMgrAfContext
    )
  {...}

Der PROTOCOL_CM_OPEN_AF Funktionstyp ist in der Headerdatei Ndis.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzu. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den PROTOCOL_CM_OPEN_AF Funktionstyp in der Headerdatei angewendet 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_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe ProtocolCmOpenAf (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe ProtocolCmOpenAf (NDIS 5.1)) in Windows XP.
Zielplattform Windows
Kopfzeile ndis.h (einschließlich Ndis.h)
IRQL <= DISPATCH_LEVEL

Weitere Informationen

NdisClOpenAddressFamilyEx

NdisCmOpenAddressFamilyComplete NdisCmRegisterAddressFamilyEx

NdisOpenAdapterEx