OID_RECEIVE_FILTER_SET_FILTER

上位ドライバーは、ネットワーク アダプターにフィルターを設定するOID_RECEIVE_FILTER_Standard Edition T_FILTERの OID メソッド要求を発行します。

NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには、呼び出し元によって割り当てられたバッファーへのポインターが含まれています。 このバッファーは、次のようにフォーマットされます:

OID メソッド要求から正常に戻った後、 NDIS_OID_REQUEST 構造体InformationBuffer のメンバーには、 NDIS_RECEIVE_FILTER_PARAMETERS 構造体へのポインターが含まれます。 上位ドライバーが新しい受信フィルターを作成している場合、NDIS は、新しいフィルター識別子でこの構造体を更新します。

解説

NDIS 受信フィルターは、次の NDIS インターフェイスで使用されます:

NDIS パケット結合、SR-IOV、または VMQ インターフェイスをサポートするミニポート ドライバーには、OID_RECEIVE_FILTER_Standard Edition T_FILTERの OID メソッド要求が必須です。

上位ドライバーは、要求されたフィルター構成を使用して NDIS_RECEIVE_FILTER_PARAMETERS 構造体を初期化します。 NDIS は、NDIS_RECEIVE_FILTER_PARAMETERS 構造体の FilterId メンバーに フィルター識別子を割り当て、下位ミニポート ドライバーにメソッド要求を渡します。

受信キューに設定された各フィルターには、ネットワーク アダプターの一意のフィルター識別子があります。 つまり、フィルター識別子は、ネットワーク アダプターが管理する異なるキューでは重複しません。 NDIS は、受信キューにフィルターを設定する OID 要求を受信すると、フィルター パラメーターを検証します。 NDIS は、必要なリソースとフィルター識別子を割り当てた後、下位ネットワーク アダプターに OID 要求を送信します。 ネットワーク アダプターは、フィルターに必要なソフトウェアとハードウェア リソースを正常に割り当てることができる場合は、NDIS_STATUS_SUCCESSの戻り値の状態で OID 要求を完了します。

NDIS 6.30 以降では、packet coalescing 受信フィルターは、ネットワーク アダプターの既定の受信キューでのみサポートされます。 この受信キューには、NDIS_DEFAULT_RECEIVE_QUEUE_IDの識別子があります。

ミニポート ドライバーは、割り当てられた受信フィルターのフィルター識別子を保持する必要があります。 NDIS は、受信フィルター パラメーターを変更したり、受信フィルターをクリアしたりするために、後の OID 要求でフィルターの識別子を使用します。

ミニポート ドライバーは、 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 要求を受信し、キューに設定されているフィルターをもってから後、キューは Running 状態になります。 この状態で、ミニポート ドライバーは NdisMIndicateReceiveNetBufferLists を呼び出すことによって、キュー内のパケットの表示を開始できます。

SR-IOV インターフェイスの追加ガイドライン

SR-IOV インターフェイスをサポートするミニポート ドライバーには、次の点が適用されます:

  • SR-IOV インターフェイスの場合、デフォルトまたはデフォルトではない仮想ポート (VPort) に受信キューが作成されます。

    Windows Server 2012 以降では、SR-IOV インターフェイスは VPort のデフォルトの受信キューのみをサポートします。

    SR-IOV VPort が OID_NIC_SWITCH_CREATE_VPORT の OID セット要求を通じて割り当てられた後、上位ドライバーは、OID_RECEIVE_FILTER_Standard Edition T_FILTERの OID 要求を使用して VPort にフィルターを設定できます。

    VPort を割り当てた上位ドライバーのみが、その VPort にフィルターを設定できます。

  • デフォルトの VPort は常に存在するため、上位ドライバーは常にデフォルトの VPort にフィルターを設定できます。

  • VPort が作成されると、受信フィルターは設定されません。 この場合、ミニポート ドライバーは、ミニポート ドライバーは、VPort のOID_RECEIVE_FILTER_Standard Edition T_FILTERの OID 要求を受信する前に、その VPort の受信パケットを示す必要があります。 この OID 要求が発行された後、ミニポート ドライバーは、その VPort 上のパケットを示すことができます。

    ミニポート ドライバーは、OID_RECEIVE_FILTER_Standard Edition T_FILTERの OID 要求の処理中に VPort 上のパケットを示す場合は、OID 要求を完了し、NDIS_STATUS_SUCCESS状態コードを返す必要があります。

VMQ インターフェイスの追加ガイドライン

VMQ インターフェイスをサポートするミニポート ドライバーには、次の点が適用されます:

  • VMQ 受信キューが割り当てられた後、上位ドライバーは、OID_RECEIVE_FILTER_Standard Edition T_FILTERの OID 要求を使用して受信キューにフィルターを設定できます。

    受信キューを割り当てたプロトコル ドライバーのみが、そのキューにフィルターを設定できます。

  • デフォルトのキューは常に存在するため、上位ドライバーは常にデフォルトのキューにフィルターを設定できます。 ネットワーク アダプターがドロップ キューをサポートしている場合、上位ドライバーはドロップ キューにフィルターを設定できます。

    上位ドライバーは、デフォルトのキューまたはドロップ キューを所有していません。 したがって、ネットワーク アダプターにバインドされているすべてのプロトコル ドライバーは、デフォルトのキューまたはドロップ キューを使用します。

  • 受信キューが作成されると、受信フィルターは設定されません。 この場合、ミニポート ドライバーは、ミニポート ドライバーが受信キューのOID_RECEIVE_FILTER_Standard Edition T_FILTERの OID 要求を受信する前に、その受信キューの受信パケットを示す必要があります。 この OID 要求が発行された後、ミニポート ドライバーは、その受信キューのパケットを示すことができます。

    ミニポート ドライバーは、OID_RECEIVE_FILTER_Standard Edition T_FILTERの OID 要求の処理中にパケットを示す場合は、OID 要求を完了し、NDIS_STATUS_SUCCESS状態コードを返す必要があります。

状態コードを返す

ミニポートドライバーは、OID_RECEIVE_FILTER_SET_FILTER の OID セット要求に対して、次の状態コードのいずれかを返します:

NDIS_STATUS_SUCCESS
フィルターがキューに正常に設定されました。 情報バッファーには、更新された NDIS_RECEIVE_FILTER_PARAMETERS 構造体が含まれています。

NDIS_STATUS_PENDING
要求の完了が保留中です。 最終的な状態コードと結果は、呼び出し元の OID 要求完了ハンドラーに渡されます。

NDIS_STATUS_INVALID_PARAMETER
上位ドライバーが指定した1つ以上のパラメーターが無効でした。

NDIS_STATUS_INVALID_LENGTH
情報バッファーが短すぎました。 NDISは、 NDIS_OID_REQUEST 構造体の DATA.METHOD_INFORMATION.BytesNeeded メンバーを必要な最小バッファサイズに設定します。

NDIS_STATUS_NOT_SUPPORTED
ミニポート ドライバーの NDIS バージョンは、 6.20 以前のバージョンです。

NDIS_STATUS_FAILURE
その他の理由で要求に失敗しました。

要件

バージョン

NDIS 6.20 以降でサポートされています。

ヘッダー

Ntddndis.h (Ndis.h を含む)

関連項目

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