次の方法で共有


OID_RECEIVE_FILTER_SET_FILTER

基になるドライバーは、ネットワーク アダプターにフィルターを設定するOID_RECEIVE_FILTER_SET_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_SET_FILTERの OID メソッド要求が必須です。

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

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

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

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

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

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

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

  • SR-IOV インターフェイスの場合、既定または既定以外の仮想ポート (VPort) に受信キューが作成されます。

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

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

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

  • 既定の VPort は常に存在するため、基になるドライバーは常に既定の VPort にフィルターを設定できます。

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

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

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

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

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

    受信キューを割り当てたプロトコル ドライバーのみが、そのキューにフィルターを設定できることに注意してください。

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

    基になるドライバーは、既定のキューまたはドロップ キューを所有していません。 そのため、ネットワーク アダプターにバインドされているすべてのプロトコル ドライバーは、既定のキューまたはドロップ キューを使用します。

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

    ミニポート ドライバーがOID_RECEIVE_FILTER_SET_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 は、データを設定します。METHOD_INFORMATION。BytesNeededNDIS_OID_REQUEST 構造体のメンバーを、必要な最小バッファー サイズに設定します。

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