PROTOCOL_UNBIND_ADAPTER_EX Rückruffunktion (ndis.h)
NDIS ruft die ProtocolUnbindAdapterEx--Funktion eines Protokolltreibers auf, um den Treiber von einem zugrunde liegenden Miniportadapter abzubinden.
Syntax
PROTOCOL_UNBIND_ADAPTER_EX ProtocolUnbindAdapterEx;
NDIS_STATUS ProtocolUnbindAdapterEx(
[in] NDIS_HANDLE UnbindContext,
[in] NDIS_HANDLE ProtocolBindingContext
)
{...}
Parameter
[in] UnbindContext
Das Handle, das den NDIS-Kontextbereich für diesen nicht gebundenen Vorgang identifiziert.
[in] ProtocolBindingContext
Ein Handle zu einem Kontextbereich, der vom Protokolltreiber zugewiesen wird. Der Protokolltreiber verwaltet die Kontextinformationen pro Bindung in diesem Kontextbereich. Der Treiber hat diesen Handle an NDIS übergeben, wenn der Treiber die NdisOpenAdapterEx--Funktion aufgerufen hat.
Rückgabewert
ProtocolUnbindAdapterEx gibt einen der folgenden Statuswerte zurück:
Rückgabecode | Beschreibung |
---|---|
|
ProtocolUnbindAdapterEx erfolgreich von einem zugrunde liegenden Miniportadapter getrennt. |
|
ProtocolUnbindAdapterEx den nicht gebundenen Vorgang nicht abgeschlossen und der Vorgang wird asynchron abgeschlossen. Der Protokolltreiber muss die NdisCompleteUnbindAdapterEx Funktion nach Abschluss des nicht gebundenen Vorgangs. |
Bemerkungen
ProtocolUnbindAdapterEx ist eine erforderliche Funktion. Als Kehrwert der ProtocolBindAdapterEx--Funktion ruft NDIS ProtocolUnbindAdapterEx auf, um die Ressourcen freizugeben, die der Treiber für Netzwerk-E/A-Vorgänge zugewiesen hat, die für eine Bindung spezifisch sind. Ein Protokolltreiber kann einen nicht gebundenen Vorgang nicht versagen.
Vor dem Aufrufen ProtocolUnbindAdapterExhält NDIS die Protokollbindung an. Um die Bindung anzuhalten, ruft NDIS die ProtocolNetPnPEvent--Funktion auf und gibt ein NetEventPause--Ereignis an.
ProtocolUnbindAdapterEx- muss die NdisCloseAdapterEx--Funktion aufrufen, um die Bindung an den zugrunde liegenden Miniportadapter zu schließen. Wenn NdisCloseAdapterEx NDIS_STATUS_SUCCESS zurückgibt, ist der Schließvorgang abgeschlossen. Wenn NdisCloseAdapterEx NDIS_STATUS_PENDING zurückgibt, ruft NDIS den Protokolltreiber auf. ProtocolCloseAdapterCompleteEx Funktion nach Abschluss des Schließens.
Vor dem Aufrufen NdisCloseAdapterExsollte der Protokolltreiber die Multicast-Adressliste und Paketfilter für die Bindung löschen. Der Protokolltreiber legt die Bindungs-Multicast-Adressliste auf NULL-und den Paketfilter auf Null fest. Weitere Informationen finden Sie unter OID_802_3_MULTICAST_LIST und OID_GEN_CURRENT_PACKET_FILTER.
Wenn ein Reaktivierungsmuster angegeben wurde, sollte der Protokolltreiber es mit dem OID_PNP_REMOVE_WAKE_UP_PATTERN OID entfernen und die empfangenden Seitenskalierungsparameter mit dem OID_GEN_RECEIVE_SCALE_PARAMETERS OID löschen. Ein NDIS 6.20- und höher-Protokolltreiber sollte ein Wake-on-LAN-Muster mit dem OID_PM_REMOVE_WOL_PATTERN OID entfernen und einen Offload mit geringem Stromverbrauch mit dem OID_PM_REMOVE_PROTOCOL_OFFLOAD OID entfernen.
ProtocolUnbindAdapterEx darf den Speicher bei ProtocolBindingContext nicht freigeben, bis der Abschlussvorgang abgeschlossen ist. NDIS übergibt das Handle bei ProtocolBindingContext- an ProtocolCloseAdapterCompleteEx-.
Wenn der Protokolltreiber den nicht gebundenen Vorgang abgeschlossen hat, kann ProtocolUnbindAdapterEx- NDIS_STATUS_SUCCESS zurückgeben. Wenn NdisCloseAdapterEx NDIS_STATUS_PENDING zurückgibt, muss ProtocolUnbindAdapterEx warten, bis NDIS ProtocolCloseAdapterCompleteEx- aufruft, bevor NDIS_STATUS_SUCCESS zurückgegeben werden kann.
ProtocolUnbindAdapterEx kann NDIS_STATUS_PENDING zurückgeben, um den Abschluss des nicht gebundenen Vorgangs zu einem späteren Zeitpunkt zurückstellen zu können. Wenn ProtocolUnbindAdapterEx NDIS_STATUS_PENDING zurückgibt, muss der Treiber schließlich den Aufruf des Treibers ausführen. NdisCompleteUnbindAdapterEx Funktion, um den nicht gebundenen Vorgang abzuschließen. Wenn die NdisCloseAdapterEx-funktion zurückgegeben NDIS_STATUS_PENDING, kann der Treiber den nicht gebundenen Vorgang in ProtocolCloseAdapterCompleteExabschließen. ProtocolUnbindAdapterEx kann das Handle bei UnbindContext- im Kontextbereich bei ProtocolBindingContext speichern, bevor NdisCloseAdapterExaufgerufen wird. Wenn ProtocolUnbindAdapterEx den Handle gespeichert, kann ProtocolCloseAdapterCompleteEx- das Handle an NdisCompleteUnbindAdapterEx übergeben, um den nicht gebundenen Vorgang abzuschließen.
Sobald ProtocolUnbindAdapterExNdisCloseAdapterExaufruft, wird das von der NdisOpenAdapterEx-Funktion abgerufene Handle an der NdisBindingHandle Parameter ungültig. ProtocolUnbindAdapterEx können keine nachfolgenden Aufrufe an NdisXxx--Funktionen mit diesem Handle ausführen. Der Treiber kann Empfangs- und Statusanzeigen vom zugrunde liegenden Miniportadapter abrufen, bis der Abschlussvorgang abgeschlossen ist.
NDIS ruft ProtocolUnbindAdapterEx bei IRQL = PASSIVE_LEVEL auf.
Aktualisieren der Power Management- und RSS-Einstellungen
NDIS 6.0- und 6.1-Protokolltreiber sollten gegebenenfalls die folgenden Vorgänge ausführen:- Entfernen Der Energieverwaltungs-Wake auf LAN-Mustern (WOL) aus dem Miniportadapter mit dem OID_PNP_REMOVE_WAKE_UP_PATTERN OID.
- Löschen sie die Parameter für die empfangene seitenskalierung mit dem OID_GEN_RECEIVE_SCALE_PARAMETERS OID.
- Entfernen Sie die Wol-Management-Muster aus dem Miniportadapter mit dem OID_PM_REMOVE_WOL_PATTERN OID.
- Entfernen von Stromverwaltungsprotokollen aus dem Miniportadapter mit dem OID_PM_REMOVE_PROTOCOL_OFFLOAD OID.
beispiele für
Um eine ProtocolUnbindAdapterEx--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 ProtocolUnbindAdapterEx--Funktion zu definieren, die den Namen "MyUnbindAdapterEx" hat, verwenden Sie den PROTOCOL_UNBIND_ADAPTER_EX Typ, wie in diesem Codebeispiel gezeigt:
PROTOCOL_UNBIND_ADAPTER_EX MyUnbindAdapterEx;
Implementieren Sie dann Ihre Funktion wie folgt:
_Use_decl_annotations_
NDIS_STATUS
MyUnbindAdapterEx(
NDIS_HANDLE UnbindContext,
NDIS_HANDLE ProtocolBindingContext
)
{...}
Der PROTOCOL_UNBIND_ADAPTER_EX 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_UNBIND_ADAPTER_EX 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 höher. |
Zielplattform- | Fenster |
Header- | ndis.h (include Ndis.h) |
IRQL- | PASSIVE_LEVEL |
Siehe auch
OID_GEN_RECEIVE_SCALE_PARAMETERSOID_PNP_REMOVE_WAKE_UP_PATTERN
ProtocolCloseAdapterCompleteEx-