NDIS_RECEIVE_FILTER_FIELD_PARAMETERS-Struktur (ntddndis.h)

Die NDIS_RECEIVE_FILTER_FIELD_PARAMETERS-Struktur gibt das Filtertestkriterium für ein Feld in einem Netzwerkpaketheader an.

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

Syntax

typedef struct _NDIS_RECEIVE_FILTER_FIELD_PARAMETERS {
  NDIS_OBJECT_HEADER       Header;
  ULONG                    Flags;
  NDIS_FRAME_HEADER        FrameHeader;
  NDIS_RECEIVE_FILTER_TEST ReceiveFilterTest;
  union {
    NDIS_MAC_HEADER_FIELD  MacHeaderField;
    NDIS_ARP_HEADER_FIELD  ArpHeaderField;
    NDIS_IPV4_HEADER_FIELD IPv4HeaderField;
    NDIS_IPV6_HEADER_FIELD IPv6HeaderField;
    NDIS_UDP_HEADER_FIELD  UdpHeaderField;
  } HeaderField;
  _HEADER_FIELD            _HEADER_FIELD;
  union {
    UCHAR   FieldByteValue;
    USHORT  FieldShortValue;
    ULONG   FieldLongValue;
    ULONG64 FieldLong64Value;
    UCHAR   FieldByteArrayValue[16];
  } FieldValue;
  _FIELD_VALUE             _FIELD_VALUE;
  union {
    UCHAR   ResultByteValue;
    USHORT  ResultShortValue;
    ULONG   ResultLongValue;
    ULONG64 ResultLong64Value;
    UCHAR   ResultByteArrayValue[16];
  } ResultValue;
  _RESULT_VALUE            _RESULT_VALUE;
} NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, *PNDIS_RECEIVE_FILTER_FIELD_PARAMETERS;

Member

Header

Die NDIS_OBJECT_HEADER-Struktur für die NDIS_RECEIVE_FILTER_FIELD_PARAMETERS-Struktur . Der Treiber legt das Typelement der Struktur, die Header angibt, auf NDIS_OBJECT_TYPE_DEFAULT fest.

Um die Version der NDIS_RECEIVE_FILTER_FIELD_PARAMETERS-Struktur anzugeben, legt der Treiber den Revisionsmember auf einen der folgenden Werte fest:

Wert Bedeutung
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2
2
Der HeaderField-Union für NDIS 6.30 wurden zusätzliche Member hinzugefügt.

Der Treiber legt das Element Größe auf NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2 fest.

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1
1
Ursprüngliche Version für NDIS 6.20.

Der Treiber legt das Element Größe auf NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1 fest.

Flags

Ein bitweises OR von Flags. Die folgenden Flags sind gültig für die OID_RECEIVE_FILTER_SET_FILTER OID.

Wert Bedeutung
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
0x00000001
Wenn dieses Flag festgelegt ist, darf der Netzwerkadapter nur empfangene Pakete angeben, die die folgenden Kriterien erfüllen:
  • Die MAC-Adresse (Media Access Control) des Pakets entspricht dem angegebenen MAC-Headerfeldtest.
  • Das Paket enthält entweder kein VLAN-Tag oder ein VLAN-Tag mit der ID 0.
Weitere Informationen zu diesem Flag finden Sie im Abschnitt Hinweise.
Hinweis Wenn ein überlastender Treiber einen MAC-Adressfilter und einen VLAN-Bezeichnerfilter mit einer OID-Anforderung von OID_RECEIVE_FILTER_SET_FILTER festlegt, legt er dieses Flag in keinem der Filterfelder fest. In diesem Fall sollte der Miniporttreiber Pakete angeben, die sowohl der angegebenen MAC-Adresse als auch dem VLAN-Bezeichner entsprechen. Das heißt, der Miniporttreiber sollte keine Pakete mit einer übereinstimmenden MAC-Adresse angeben, die einen VLAN-Bezeichner null aufweisen oder nicht markierte Pakete sind.
 

FrameHeader

Der Headertyp im Netzwerkdatenrahmen.

ReceiveFilterTest

Der Typ des Tests, der für den Empfangsfilter ausgeführt werden soll.

HeaderField

Der Typ des Felds in einem Header. Der Feldtyp (z. B. NDIS_MAC_HEADER_FIELD) entspricht dem Typ des Headers, der im FrameHeader-Element angegeben ist.

Diese Union enthält die folgenden Elemente:

HeaderField.MacHeaderField

Der Feldtyp in einem MAC-Header.

HeaderField.ArpHeaderField

Der Feldtyp in einem ARP-Header (Address Resolution Protocol).

HeaderField.IPv4HeaderField

Ein NDIS_IPV4_HEADER_FIELD Enumerationswert, der den Typ des Felds in einem IPv4-Header (IP Version 4) angibt.

HeaderField.IPv6HeaderField

Ein NDIS_IPV6_HEADER_FIELD Enumerationswert, der den Typ des Felds in einem IPv6-Header (IP Version 6) angibt.

HeaderField.UdpHeaderField

Der Feldtyp in einem UDP-Header (User Datagram Protocol).

_HEADER_FIELD

FieldValue

Der Wert, den der Miniportadapter mit dem entsprechenden Headerfeldwert in eingehenden Paketen vergleicht. Die Position des Headerfeldwerts wird durch den Feldtyp bestimmt, der im HeaderField-Element angegeben ist.

Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

Diese Union enthält die folgenden Elemente:

FieldValue.FieldByteValue

Ein UCHAR-Wert , der mit einem Feld in einem Netzwerkpaket verglichen werden soll.

Hinweis Wenn das MacHeaderField-Element einen NdisMacHeaderFieldPacketType-Enumerationswert angibt, enthält dieses Element einen NDIS_MAC_PACKET_TYPE Enumerationswert.
 

FieldValue.FieldShortValue

Ein USHORT-Wert , der mit einem Feld in einem Netzwerkpaket verglichen werden soll.

FieldValue.FieldLongValue

Ein ULONG-Wert , der mit einem Feld in einem Netzwerkpaket verglichen werden soll.

FieldValue.FieldLong64Value

Ein ULONG64 Wert, der mit einem Feld in einem Netzwerkpaket verglichen werden soll.

FieldValue.FieldByteArrayValue[16]

Ein UCHAR-Array , das mit einem Feld in einem Netzwerkpaket verglichen werden soll.

_FIELD_VALUE

ResultValue

Eine Union, die einen Testergebniswert enthält.

Wenn das ReceiveFilterTest-Element auf NdisReceiveFilterTestMaskEqual festgelegt ist, berechnet der Netzwerkadapter zunächst ein Ergebnis aus dem Wert im FieldValue-Element und dem Headerfeldwert, wie vom HeaderField-Member angegeben. Anschließend vergleicht der Adapter das berechnete Ergebnis mit ResultValue.

Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

Diese Union enthält die folgenden Elemente:

ResultValue.ResultByteValue

Ein UCHAR-Wert , der mit einem Testergebnis verglichen werden soll.

ResultValue.ResultShortValue

Ein USHORT-Wert , der mit einem Testergebnis verglichen werden soll.

ResultValue.ResultLongValue

Ein ULONG-Wert , der mit einem Testergebnis verglichen werden soll.

ResultValue.ResultLong64Value

Ein ULONG64 Wert, der mit einem Testergebnis verglichen werden soll.

ResultValue.ResultByteArrayValue[16]

Ein UCHAR-Array , das mit einem Testergebnis verglichen werden soll.

_RESULT_VALUE

Hinweise

Die NDIS_RECEIVE_FILTER_FIELD_PARAMETERS-Struktur gibt das Filtertestkriterium für ein Feld in einem möglichen Array von Feldtests an, die mit dem NDIS_RECEIVE_FILTER_PARAMETERS Struktur.

In der folgenden Tabelle wird beschrieben, wie der Netzwerkadapter die Member ReceiveFilterTest, FieldValue und ResultValue verwendet, um einen Filtertest für den angegebenen Headerfeldwert eines empfangenen Pakets durchzuführen.

ReceiveFilterTest-Wert Vom Netzwerkadapter durchgeführter Filtertest
NdisReceiveFilterTestEqual (<Headerfeldwert> == FieldValue)
NdisReceiveFilterTestMaskEqual ((<Headerfeldwert> & FieldValue) == ResultValue)
NdisReceiveFilterTestNotEqual (<Headerfeldwert> != FieldValue)
 
Hinweis Alle Multibyte-Feld- und Ergebniswerte, z. B. die Elemente FieldShortValue und ResultLong64Value , müssen in der Netzwerkbytereihenfolge (big-endian) angegeben werden.
 
Wenn das NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO-Flag nicht festgelegt ist und kein VLAN-Bezeichnerfilter vorhanden ist, der durch eine OID-Satzanforderung von OID_RECEIVE_FILTER_SET_FILTER konfiguriert wurde, muss der Miniporttreiber eine der folgenden Aktionen ausführen:
  • Für NDIS 6.20 muss der Miniporttreiber eine fehlerhafte status für die OID-Anforderung von OID_RECEIVE_FILTER_SET_FILTER zurückgeben.
  • Wenn ab NDIS 6.30 das flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO nicht festgelegt ist und kein VLAN-Bezeichnerfilter durch die OID_RECEIVE_FILTER_SET_FILTER-Methodenanforderung konfiguriert ist, muss der Miniporttreiber eine der folgenden Aktionen ausführen:
    • Der Miniporttreiber muss eine fehlerhafte status für die OID_RECEIVE_FILTER_SET_FILTER-Methodenanforderung zurückgeben.
    • Der Miniporttreiber muss den Netzwerkadapter konfigurieren, um die angegebenen MAC-Adressfelder zu überprüfen und zu filtern. Wenn im empfangenen Paket ein VLAN-Tag vorhanden ist, muss es vom Netzwerkadapter aus den Paketdaten entfernt werden. Der Miniporttreiber muss das VLAN-Tag in einer NDIS_NET_BUFFER_LIST_8021Q_INFO platzieren, die der NET_BUFFER_LIST Struktur des Pakets zugeordnet ist.
Ab NDIS 6.30 muss der Miniporttreiber Folgendes tun, wenn das NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO-Flag nicht festgelegt ist und ein VLAN-Bezeichnerfilter ungleich null ist, der durch eine OID-Setanforderung von OID_RECEIVE_FILTER_SET_FILTER konfiguriert wurde:
  • Der Miniporttreiber muss den Netzwerkadapter so konfigurieren, dass die angegebenen MAC-Adress- und VLAN-Bezeichnerfelder überprüft und gefiltert werden.

    Wenn im empfangenen Paket ein VLAN-Tag vorhanden ist, muss es vom Netzwerkadapter aus den Paketdaten entfernt werden. Der Miniporttreiber muss das VLAN-Tag in einer NDIS_NET_BUFFER_LIST_8021Q_INFO platzieren, die der NET_BUFFER_LIST Struktur des Pakets zugeordnet ist.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.20 und höher.
Kopfzeile ntddndis.h (include Ndis.h)

Weitere Informationen

NDIS_ARP_HEADER_FIELD

NDIS_FRAME_HEADER

NDIS_IPV4_HEADER_FIELD

NDIS_IPV6_HEADER_FIELD

NDIS_MAC_HEADER_FIELD

NDIS_MAC_PACKET_TYPE

NDIS_OBJECT_HEADER

NDIS_RECEIVE_FILTER_PARAMETERS

NDIS_RECEIVE_FILTER_TEST

NDIS_UDP_HEADER_FIELD

OID_RECEIVE_FILTER_SET_FILTER