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 がNDIS_OBJECT_TYPE_DEFAULTに指定する構造体の Type メンバーを設定します。

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 Oid。

意味
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
0x00000001
このフラグが設定されている場合、ネットワーク アダプターは、次の条件を満たす受信パケットのみを示す必要があります。
  • パケットのメディア アクセス制御 (MAC) アドレスは、指定された MAC ヘッダー フィールド テストと一致します。
  • パケットに VLAN タグが含まれていないか、ID が 0 の VLAN タグがあります。
このフラグの詳細については、「解説」セクションを参照してください。
メモ 上にあるドライバーが MAC アドレス フィルターと、OID_RECEIVE_FILTER_SET_FILTER の OID 要求を持つ VLAN 識別子フィルターを設定する 場合、フィルター フィールドのいずれにもこのフラグは設定されません。 この場合、ミニポート ドライバーは、指定された MAC アドレスと VLAN 識別子の両方に一致するパケットを示す必要があります。 つまり、ミニポート ドライバーは、0 個の VLAN 識別子を持つ、またはタグ付けされていないパケットが一致する MAC アドレスを持つパケットを示すべきではありません。
 

FrameHeader

ネットワーク データ フレーム内のヘッダーの種類。

ReceiveFilterTest

受信フィルターに対して実行するテストの種類。

HeaderField

ヘッダー内のフィールドの型。 フィールド型 ( たとえば、NDIS_MAC_HEADER_FIELD) は、 FrameHeader メンバーで指定されたヘッダーの型に対応します。

この共用体には、次のメンバーが含まれています。

HeaderField.MacHeaderField

MAC ヘッダーのフィールドの種類。

HeaderField.ArpHeaderField

アドレス解決プロトコル (ARP) ヘッダーのフィールドの型。

HeaderField.IPv4HeaderField

IP バージョン 4 (IPv4) ヘッダーのフィールドの種類を指定する NDIS_IPV4_HEADER_FIELD列挙値

HeaderField.IPv6HeaderField

IP バージョン 6 (IPv6) ヘッダーのフィールドの種類を指定する NDIS_IPV6_HEADER_FIELD列挙値

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構造体は、 で指定できるフィールド テストの配列内の 1 つのフィールドのフィルター テスト条件を指定します。 NDIS_RECEIVE_FILTER_PARAMETERS 構造。

次の表では、ネットワーク アダプターが ReceiveFilterTestFieldValue、および ResultValue メンバーを使用して、受信パケットの指定されたヘッダー フィールド値に対してフィルター テストを実行する方法について説明します。

ReceiveFilterTest ネットワーク アダプターによって実行されるフィルター テスト
NdisReceiveFilterTestEqual (<ヘッダー フィールド値> == FieldValue)
NdisReceiveFilterTestMaskEqual ((<ヘッダー フィールド値> & FieldValue) == ResultValue)
NdisReceiveFilterTestNotEqual (<ヘッダー フィールド値> != FieldValue)
 
メモFieldShortValue メンバーや ResultLong64Value メンバーなどのマルチバイト フィールドと結果の値はすべて、ネットワーク バイト順 (ビッグ エンディアン) 形式で指定する必要があります。
 
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO フラグが設定されておらず、OID_RECEIVE_FILTER_SET_FILTER の OID セット要求によって構成された VLAN 識別子フィルターがない場合、ミニポート ドライバーは次のいずれかを実行する必要があります。
  • 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 に VLAN タグを配置 する 必要があります。
NDIS 6.30 以降では、NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO フラグが設定されておらず、 OID_RECEIVE_FILTER_SET_FILTER の OID セット要求によって構成された 0 以外の VLAN 識別子フィルターがある場合、ミニポート ドライバーは次の操作を行う必要があります。
  • ミニポート ドライバーは、指定された MAC アドレスと VLAN 識別子フィールドを検査してフィルター処理するようにネットワーク アダプターを構成する必要があります。

    VLAN タグが受信パケットに存在する場合、ネットワーク アダプターはパケット データから VLAN タグを削除する必要があります。 ミニポート ドライバーは、パケットのNET_BUFFER_LIST構造に関連付けられている NDIS_NET_BUFFER_LIST_8021Q_INFO に VLAN タグを配置 する 必要があります。

要件

要件
サポートされている最小のクライアント NDIS 6.20 以降でサポートされています。
Header 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