Freigeben über


OID_RECEIVE_FILTER_SET_FILTER

Ein überlastender Treiber gibt eine OID-Methodenanforderung von OID_RECEIVE_FILTER_SET_FILTER aus, um einen Filter für einen Netzwerkadapter festzulegen.

Das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur enthält einen Zeiger auf einen vom Aufrufer zugewiesenen Puffer. Dieser Puffer ist so formatiert, dass er Folgendes enthält:

Nach erfolgreicher Rückgabe der OID-Methodenanforderung enthält das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur einen Zeiger auf eine NDIS_RECEIVE_FILTER_PARAMETERS-Struktur . Wenn der überlastende Treiber einen neuen Empfangsfilter erstellt, aktualisiert NDIS diese Struktur mit einem neuen Filterbezeichner.

Bemerkungen

NDIS-Empfangsfilter werden in den folgenden NDIS-Schnittstellen verwendet:

Die OID-Methodenanforderung von OID_RECEIVE_FILTER_SET_FILTER ist für Miniporttreiber obligatorisch, die die NDIS-Paketkopplung, SR-IOV- oder VMQ-Schnittstelle unterstützen.

Der überlastende Treiber initialisiert die NDIS_RECEIVE_FILTER_PARAMETERS-Struktur mit der angeforderten Filterkonfiguration. NDIS weist einen Filterbezeichner im FilterId-Member der NDIS_RECEIVE_FILTER_PARAMETERS-Struktur zu und übergibt die Methodenanforderung an den zugrunde liegenden Miniporttreiber.

Jeder Filter, der für eine Empfangswarteschlange festgelegt ist, verfügt über einen eindeutigen Filterbezeichner für einen Netzwerkadapter. Das heißt, die Filterbezeichner werden nicht in verschiedenen Warteschlangen dupliziert, die der Netzwerkadapter verwaltet. Wenn NDIS eine OID-Anforderung empfängt, um einen Filter für eine Empfangswarteschlange festzulegen, überprüft es die Filterparameter. Nachdem NDIS die erforderlichen Ressourcen und den Filterbezeichner zugewiesen hat, sendet es die OID-Anforderung an den zugrunde liegenden Netzwerkadapter. Wenn der Netzwerkadapter die erforderlichen Software- und Hardwareressourcen für den Filter erfolgreich zuordnen kann, schließt er die OID-Anforderung mit einer Rückgabe status von NDIS_STATUS_SUCCESS ab.

Hinweis Ab NDIS 6.30 wird der Paketkopplungs-Empfangsfilter nur in der Standard-Empfangswarteschlange des Netzwerkadapters unterstützt. Diese Empfangswarteschlange weist den Bezeichner NDIS_DEFAULT_RECEIVE_QUEUE_ID auf.

Der Miniporttreiber muss die Filterbezeichner für die zugeordneten Empfangsfilter beibehalten. NDIS verwendet den Bezeichner eines Filters in späteren OID-Anforderungen, um die Empfangsfilterparameter zu ändern oder den Empfangsfilter zu löschen.

Nachdem ein Miniporttreiber eine OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE Anforderung empfangen hat und Filter enthält, die für die Warteschlange festgelegt sind, befindet sich die Warteschlange im Status "Ausgeführt" . In diesem Zustand kann der Miniporttreiber Hinweise auf Pakete in der Warteschlange starten, indem er NdisMIndicateReceiveNetBufferLists aufruft.

Zusätzliche Richtlinien für die SR-IOV-Schnittstelle

Die folgenden Punkte gelten für Miniporttreiber, die die SR-IOV-Schnittstelle unterstützen:

  • Für die SR-IOV-Schnittstelle wird eine Empfangswarteschlange auf einem standardmäßigen oder nicht standardmäßigen virtuellen Port (VPort) erstellt.

    Hinweis Ab Windows Server 2012 unterstützt die SR-IOV-Schnittstelle nur die Standard-Empfangswarteschlange eines VPorts.

    Nachdem ein SR-IOV-VPort über eine OID-Satzanforderung von OID_NIC_SWITCH_CREATE_VPORT zugewiesen wurde, können überlippende Treiber Filter für den VPort mit OID-Anforderungen von OID_RECEIVE_FILTER_SET_FILTER festlegen.

    Hinweis Nur der überlastende Treiber, der den VPort zugewiesen hat, kann einen Filter für diesen VPort festlegen.

  • Da der Standard-VPort immer vorhanden ist, können überlastende Treiber immer einen Filter für den Standard-VPort festlegen.

  • Wenn der VPort erstellt wird, werden keine Empfangsfilter für ihn festgelegt. In diesem Fall darf der Miniporttreiber keine Empfangspakete auf diesem VPort angeben, bevor der Miniporttreiber eine OID-Anforderung von OID_RECEIVE_FILTER_SET_FILTER für den VPort empfängt. Nachdem diese OID-Anforderung ausgestellt wurde, kann der Miniporttreiber Pakete für diesen VPort angeben.

    Hinweis Wenn der Miniporttreiber pakete auf einem VPort angibt, während er eine OID-Anforderung von OID_RECEIVE_FILTER_SET_FILTER verarbeitet, muss er die OID-Anforderung abschließen und einen NDIS_STATUS_SUCCESS status Code zurückgeben.

Zusätzliche Richtlinien für die VMQ-Schnittstelle

Die folgenden Punkte gelten für Miniporttreiber, die die VMQ-Schnittstelle unterstützen:

  • Nachdem eine VMQ-Empfangswarteschlange zugewiesen wurde, können überlastende Treiber Filter für die Empfangswarteschlange mit OID-Anforderungen von OID_RECEIVE_FILTER_SET_FILTER festlegen.

    Hinweis Nur der Protokolltreiber, der eine Empfangswarteschlange zugeordnet hat, kann einen Filter für diese Warteschlange festlegen.

  • Da die Standardwarteschlange immer vorhanden ist, können überlastende Treiber immer einen Filter für die Standardwarteschlange festlegen. Wenn der Netzwerkadapter eine Ablagewarteschlange unterstützt, können überlastende Treiber einen Filter für die Ablagewarteschlange festlegen.

    Überlastende Treiber besitzen nicht die Standard- oder Ablagewarteschlangen. Daher verwenden alle Protokolltreiber, die an einen Netzwerkadapter gebunden sind, die Standard- oder Ablagewarteschlange.

  • Wenn die Empfangswarteschlange erstellt wird, werden keine Empfangsfilter für sie festgelegt. In diesem Fall darf der Miniporttreiber keine Empfangspakete in dieser Empfangswarteschlange angeben, bevor der Miniporttreiber eine OID-Anforderung von OID_RECEIVE_FILTER_SET_FILTER für die Empfangswarteschlange empfängt. Nachdem diese OID-Anforderung ausgestellt wurde, kann der Miniporttreiber Pakete für diese Empfangswarteschlange angeben.

    Hinweis Wenn der Miniporttreiber pakete in einer Warteschlange angibt, während er eine OID-Anforderung von OID_RECEIVE_FILTER_SET_FILTER verarbeitet, muss er die OID-Anforderung abschließen und einen NDIS_STATUS_SUCCESS status Code zurückgeben.

Zurückgeben status Codes

Der Miniporttreiber gibt einen der folgenden status Codes für die OID-Methodenanforderung von OID_RECEIVE_FILTER_SET_FILTER zurück:

NDIS_STATUS_SUCCESS
Der Filter wurde erfolgreich für die Warteschlange festgelegt. Der Informationspuffer enthält die aktualisierte NDIS_RECEIVE_FILTER_PARAMETERS-Struktur .

NDIS_STATUS_PENDING
Die Anforderung steht aus. Der endgültige status Code und die Ergebnisse werden an den OID-Anforderungsabschlusshandler des Aufrufers übergeben.

NDIS_STATUS_INVALID_PARAMETER
Mindestens ein Parameter, den der überlastende Treiber angegeben hat, war ungültig.

NDIS_STATUS_INVALID_LENGTH
Der Informationspuffer war zu kurz. NDIS legt die DATEN fest. METHOD_INFORMATION. BytesNeed-Member in der NDIS_OID_REQUEST-Struktur auf die erforderliche Mindestpuffergröße.

NDIS_STATUS_NOT_SUPPORTED
Die NDIS-Version des Miniporttreibers ist eine frühere Version als 6.20.

NDIS_STATUS_FAILURE
Die Anforderung ist aus anderen Gründen fehlgeschlagen.

Requirements (Anforderungen)

Version

Unterstützt in NDIS 6.20 und höher.

Header

Ntddndis.h (include Ndis.h)

Weitere Informationen

NdisMIndicateReceiveNetBufferLists

NDIS_OID_REQUEST

NDIS_RECEIVE_FILTER_PARAMETERS

NET_BUFFER_LIST

NET_BUFFER_LIST_RECEIVE_FILTER_ID

OID_NIC_SWITCH_CREATE_VPORT

OID_RECEIVE_FILTER_CLEAR_FILTER

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE