NDIS_RECEIVE_FILTER_FIELD_PARAMETERS結構 (ntddndis.h)

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 結構會指定網路封包標頭中欄位的篩選測試準則。

NDIS 接收篩選條件用於下列 NDIS 介面:

語法

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;

成員

Header

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 結構的NDIS_OBJECT_HEADER結構。 驅動程式會將 Header 所指定之結構的 Type 成員設定為NDIS_OBJECT_TYPE_DEFAULT。

若要指出 NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 結構的版本,驅動程式會將 Revision 成員設定為下列其中一個值:

意義
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2
2
已將其他成員新增至 NDIS 6.30 的 HeaderField 聯集。

驅動程式會將 Size 成員設定為 NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1
1
NDIS 6.20 的原始版本。

驅動程式會將 Size 成員設定為 NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1

Flags

旗標的位 OR。 下列旗標對 有效 OID_RECEIVE_FILTER_SET_FILTER 老。

意義
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
0x00000001
如果已設定此旗標,網路適配器必須只指出通過下列準則的已接收封包:
  • 封包的媒體訪問控制 (MAC) 位址符合指定的 MAC 標頭欄位測試。
  • 封包不包含 VLAN 標籤,或具有識別碼為零的 VLAN 標籤。
如需此旗標的詳細資訊,請參閱一節。
注意 如果過度配置驅動程式設定 MAC 位址篩選條件,以及具有 OID 要求的 VLAN 識別元篩選 條件OID_RECEIVE_FILTER_SET_FILTER,則不會在任一篩選字段中設定此旗標。 在此情況下,迷你埠驅動程序應該指出符合指定 MAC 位址和 VLAN 識別碼的封包。 也就是說,迷你埠驅動程序不應該指出具有零 VLAN 標識碼或未標記封包之相符 MAC 位址的封包。
 

FrameHeader

網路數據框架中的標頭類型。

ReceiveFilterTest

要針對接收篩選條件執行的測試類型。

HeaderField

標頭中的欄位類型。 例如,欄位類型 (,NDIS_MAC_HEADER_FIELD) 對應至 FrameHeader 成員中指定的標頭類型。

此聯集包含下列成員:

HeaderField.MacHeaderField

MAC 標頭中的欄位類型。

HeaderField.ArpHeaderField

位址解析通訊協定 (ARP) 標頭中的欄位類型。

HeaderField.IPv4HeaderField

NDIS_IPV4_HEADER_FIELD 列舉值,指定IP版本4 (IPv4) 標頭中的欄位類型。

HeaderField.IPv6HeaderField

NDIS_IPV6_HEADER_FIELD列舉值,指定IP版本6 (IPv6) 標頭中的欄位類型。

HeaderField.UdpHeaderField

用戶數據報通訊協定中的欄位類型, (UDP) 標頭。

_HEADER_FIELD

FieldValue

迷你埠配接器與傳入封包中對應的標頭域值相比較的值。 標頭域值的位置取決於 HeaderField 成員中指定的欄位類型。

如需詳細資訊,請參閱<備註>一節。

此聯集包含下列成員:

FieldValue.FieldByteValue

要與網路封包中欄位比較的 UCHAR 值。

注意 如果 MacHeaderField 成員指定 NdisMacHeaderFieldPacketType 列舉值,則此成員包含 NDIS_MAC_PACKET_TYPE 列舉值。
 

FieldValue.FieldShortValue

要與網路封包中欄位比較的 USHORT 值。

FieldValue.FieldLongValue

要與網路封包中欄位比較的 ULONG 值。

FieldValue.FieldLong64Value

要與網路封包中欄位比較 的ULONG64 值。

FieldValue.FieldByteArrayValue[16]

要與網路封包中字段比較的 UCHAR 陣列。

_FIELD_VALUE

ResultValue

包含測試結果值的等位。

如果 ReceiveFilterTest 成員設定為 NdisReceiveFilterTestMaskEqual,網路適配器會先計算 FieldValue 成員中的值和 HeaderField 成員所指定的標頭域值的結果。 接著,配接器會比較計算結果與 ResultValue

如需詳細資訊,請參閱<備註>一節。

此聯集包含下列成員:

ResultValue.ResultByteValue

要與測試結果比較的 UCHAR 值。

ResultValue.ResultShortValue

要與測試結果比較的 USHORT 值。

ResultValue.ResultLongValue

要與測試結果比較的 ULONG 值。

ResultValue.ResultLong64Value

要與測試結果比較 的ULONG64 值。

ResultValue.ResultByteArrayValue[16]

要與測試結果比較的 UCHAR 陣列。

_RESULT_VALUE

備註

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 結構會指定一個字段的篩選測試準則,該欄位的可能陣列中可以使用 指定 NDIS_RECEIVE_FILTER_PARAMETERS 結構。

下表描述網路適配器如何使用 ReceiveFilterTestFieldValue 和 ResultValue 成員,對所接收封包的指定標頭域值執行篩選測試。

ReceiveFilterTest 網路配接器所執行的篩選測試
NdisReceiveFilterTestEqual < (標頭域值> == FieldValue)
NdisReceiveFilterTestMaskEqual < ( (標頭域值> & FieldValue) == ResultValue)
NdisReceiveFilterTestNotEqual < (標頭域值> != FieldValue)
 
注意 所有多位元組位元段和結果值,例如 FieldShortValueResultLong64Value 成員,都必須以網路位元組順序指定, (big-endian) 格式。
 
如果未設定 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 旗標,而且沒有 OID 集合要求所設定的 VLAN 識別符篩選器 OID_RECEIVE_FILTER_SET_FILTER,迷你埠驅動程式必須執行下列其中一項:
  • 針對 NDIS 6.20,迷你埠驅動程式必須針對 OID_RECEIVE_FILTER_SET_FILTER的 OID 要求傳回失敗狀態。
  • 從 NDIS 6.30 開始,如果未設定 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 旗標,而且 OID_RECEIVE_FILTER_SET_FILTER方法要求 未設定 VLAN 識別符篩選,迷你埠驅動程式必須執行下列其中一項:
    • 迷你埠驅動程序必須傳回 OID_RECEIVE_FILTER_SET_FILTER 方法要求的失敗狀態。
    • 迷你埠驅動程式必須設定網路適配器,以檢查和篩選指定的 MAC 位址欄位。 如果接收的封包中有 VLAN 標籤,網路適配器必須將其從封包數據中移除。 迷你埠驅動程序必須將 VLAN 標籤放在與封包NET_BUFFER_LIST結構相關聯的NDIS_NET_BUFFER_LIST_8021Q_INFO中。
從 NDIS 6.30 開始,如果未設定 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 旗標,而且有非零 VLAN 標識符篩選條件,則 OID 集合要求 OID_RECEIVE_FILTER_SET_FILTER,迷你埠驅動程式必須執行下列動作:
  • 迷你埠驅動程式必須設定網路適配器,以檢查和篩選指定的 MAC 位址和 VLAN 識別符字段。

    如果接收的封包中有 VLAN 標籤,網路適配器必須將其從封包數據中移除。 迷你埠驅動程序必須將 VLAN 標籤放在與封包NET_BUFFER_LIST結構相關聯的NDIS_NET_BUFFER_LIST_8021Q_INFO中。

規格需求

需求
最低支援的用戶端 NDIS 6.20 和更新版本支援。
標頭 ntddndis.h (包含 Ndis.h)

另請參閱

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