PROTOCOL_CM_OPEN_AF Rückruffunktion (ndis.h)
Die ProtocolCmOpenAf--Funktion ist erforderlich. Diese Funktion weist ressourcenbasierte Ressourcen für einen Anrufmanager zu, um mit einem verbindungsorientierten NDIS-Client zu interagieren, der die Adressfamilie öffnet.
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 Anrufmanager gibt CallMgrBindingContext das Handle für einen Kontextbereich mit Anruf-Manager zugewiesen an, in dem die Anrufmanager ihre Informationen über den Bindungsstatus verwalten. Der Anruf-Manager hat diesen Handle bereitgestellt, wenn er NdisOpenAdapterExaufgerufen hat.
Für einen integrierten Anrufmanager (MCM) gibt CallMgrBindingContext- den Handle für einen miniportgeteilten 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 in seinen NdisMSetMiniportAttributes Aufruf (für 6.x-Treiber) bereitgestellt.
[in] AddressFamily
Gibt die Adressfamilie an, die ein Client öffnet. Diese Adressfamilie wurde vom Anrufmanager beim Aufrufen registriert. NdisCmRegisterAddressFamilyEx.
[in] NdisAfHandle
Gibt ein Handle an, das von NDIS bereitgestellt wird und diese Adressfamilieninstanz 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 Anrufmanager den Status über diese geöffnete Adressfamilie verwaltet.
Rückgabewert
ProtocolCmOpenAf gibt den Status seiner Vorgänge als eine der folgenden Aktionen zurück:
Rückgabecode | Beschreibung |
---|---|
|
Gibt an, dass der Anrufmanager alle Ressourcen erfolgreich zugeordnet und initialisiert hat, die zum Annehmen von Anforderungen vom Client an diese Adressfamilie erforderlich sind. |
|
Gibt an, dass der angeforderte Vorgang asynchron behandelt wird. Der Anrufmanager muss anrufen NdisCmOpenAddressFamilyComplete, wenn alle Open-AF-Vorgänge abgeschlossen wurden, um NDIS (und den Client) anzugeben, dass die Vorgänge abgeschlossen wurden. |
|
Gibt an, dass der Anrufmanager seine erforderlichen Vorgänge aufgrund eines Mangels an verfügbaren Systemressourcen, z. B. Arbeitsspeicher, nicht abschließen konnte. |
|
Gibt an, dass der Anrufmanager sich nicht in einen Zustand setzen konnte, in dem er Anfragen vom Client akzeptieren kann, um mit dieser Adressfamilie zu arbeiten. Dies kann ein Fehlerstatus sein, der von einer anderen NDIS-Bibliotheksfunktion oder einem fehlerstatus weitergegeben wird, der vom Treiberschreiber entsprechend bestimmt wurde. |
Bemerkungen
ProtocolCmOpenAf alle erforderlichen Zuordnungen dynamischer Ressourcen und Strukturen durchführt, die der Anruf-Manager-Writer für die Ausführung von Vorgängen im Auftrag des Clients, der eine Instanz dieser Adressfamilie öffnet, als notwendig erachtet. Zu diesen Ressourcen gehören, jedoch nicht beschränkt auf Speicherpuffer, Datenstrukturen, Ereignisse und andere ähnliche Ressourcen. Ein Anrufmanager sollte auch alle relevanten daten pro geöffneten Daten initialisieren, bevor die Steuerung an NDIS zurückgegeben wird.
Wenn ein Anrufmanager seinen zustandsspezifischen Bereich zugewiesen hat, sollte die Adresse des Statusbereichs im CallMgrAfContext- Handle festgelegt werden, bevor die Steuerung an NDIS zurückgegeben wird. Führen Sie hierzu die Ableitung CallMgrAfContext aus, und speichern Sie einen Zeiger auf den Datenbereich als Wert des Handles. Zum Beispiel:
*CallMgrAfContext = SomeBuffer;
Wenn ProtocolCmOpenAf die pro geöffneten Ressourcen nicht zuordnen kann, die sie benötigt, um nachfolgende Anforderungen im Auftrag des Clients auszuführen, der diese Adressfamilie öffnet, sollte sie alle Ressourcen freigeben, die sie für das öffnende Steuerelement zugewiesen haben, und die NDIS mit NDIS_STATUS_RESOURCES zurückgeben.
Wenn ProtocolCmOpenAf die erforderlichen Vorgänge abgeschlossen hat und die CM bereit ist, Anforderungen vom Client zu akzeptieren, sollte ProtocolCmOpenAf die Steuerung so schnell wie möglich mit einem Status von NDIS_STATUS_SUCCESS zurückgeben.
beispiele für
Um eine ProtocolCmOpenAf--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 ProtocolCmOpenAf--Funktion zu definieren, die den Namen "MyCmOpenAf" hat, verwenden Sie den PROTOCOL_CM_OPEN_AF Typ, 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 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_OPEN_AF 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 ProtocolCmOpenAf (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe ProtocolCmOpenAf (NDIS 5.1)) in Windows XP. |
Zielplattform- | Fenster |
Header- | ndis.h (include Ndis.h) |
IRQL- | <= DISPATCH_LEVEL |