次の方法で共有


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 構造体。 ドライバーは、ヘッダー がNDIS_OBJECT_TYPE_DEFAULTに指定 構造体の メンバーを設定します。

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 構造体のバージョンを示すために、ドライバーは、リビジョン メンバーを次のいずれかの値に設定します。

価値 意味
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2
2
NDIS 6.30 の HeaderField 共用体にメンバーを追加しました。

ドライバーは、サイズ メンバーを 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 以降でサポートされています。
ヘッダー 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