次の方法で共有


NdisMIndicateReceiveNetBufferLists 関数 (ndis.h)

ミニポート ドライバーは、ネットワークからのデータの受信を示すために NdisMIndicateReceiveNetBufferLists 関数を呼び出します。

構文

void NdisMIndicateReceiveNetBufferLists(
  [in] NDIS_HANDLE      MiniportAdapterHandle,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG            NumberOfNetBufferLists,
  [in] ULONG            ReceiveFlags
);

パラメーター

[in] MiniportAdapterHandle

NDIS が に渡したミニポート ハンドル MiniportInitializeEx 関数。

NetBufferList

ミニポート ドライバーが割り当てた NET_BUFFER_LIST 構造体のリンクされた一覧。

[in] PortNumber

ミニポート アダプターのポートを識別するポート番号。 ミニポート アダプターのポート番号を割り当てるには、 NdisMAllocatePort 関数を呼び出します。 0 の値は、ミニポート アダプターの既定のポートを識別します。 ミニポート ドライバーが指定したアダプターのポートを割り当てされていない場合は、既定のポートを使用します。

[in] NumberOfNetBufferLists

NetBufferListsの構造体のリンクリストにあるNET_BUFFER_LIST構造体の数。

[in] ReceiveFlags

送信操作の属性を定義するフラグ。 フラグは OR 操作と組み合わせることができます。 すべてのフラグをクリアするには、このメンバーを 0 に設定します。 この関数は、次のフラグをサポートしています。

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

現在の IRQL がDISPATCH_LEVELされることを指定します。 このフラグの詳細については、「 ディスパッチ IRQL 追跡」を参照してください。

NDIS_RECEIVE_FLAGS_RESOURCES

ミニポート ドライバーが NdisMIndicateReceiveNetBufferLists への呼び出しが返された直後に、NET_BUFFER_LIST構造体とアタッチされているNET_BUFFER構造体の所有権を再利用することを指定します。

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

NetBufferLists のリスト内のすべてのNET_BUFFER_LIST構造体が同じプロトコルの種類 (EtherType) であることを指定します。

ミニポート ドライバー

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPEは、必要に応じて、NBL チェーン内のすべての NBL が同じ EtherType を持つミニポート ドライバーによって設定されます。 このフラグを設定すると、ミニポート ドライバーは、パフォーマンスを向上させる EtherType の各パケットを調べる必要がないことを NDIS と上位層のプロトコルに通知します。 ミニポート ドライバーは、このフラグを設定する必要はありません。

軽量フィルター (LWF)

新規受信を示す場合、NBL チェーン内のすべての NBL が同じ EtherType を持つことが確実である場合は、軽量フィルター (LWF) を必要に応じてNDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE設定することもできます。 ただし、ミニポート ドライバーと同様に、LWF は、この場合、このフラグを設定する必要がなく、常にフラグをクリアすることを選択できます。

下位層からの受信を通過する場合、LWF で NBL の EtherType が変更された場合、LWF は、同じ EtherType を持たなくなった場合にフラグをクリア する必要があります

下位層からの受信を通過する場合、LWF が NBL の EtherType を変更した場合、NBL チェーン内のすべての NBL が同じ EtherType を持つことが確実である場合、LWF はオプションでこのフラグを設定できます。 この場合、LWF はこのフラグを設定する必要がなく、常にクリアすることを選択できます。

下位層からの受信を使用する場合、このフラグが設定されている場合、LWF はチェーン内の各 NBL が同じ EtherType を持つものとします。 LWF は、このフラグを読み取る必要はありません。代わりに、すべての NBL から常に EtherType を読み取ることができます。

複数の NBL チェーンを組み合わせる場合、新しい NBL チェーンに同種の EtherType が含まれていると確信しない限り、LWF はこのフラグをクリア する必要があります

プロトコル ドライバー

下位層から受信を使用する場合、NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPEが設定されている場合、プロトコルはチェーン内の各 NBL が同じ EtherType を持つものとします。 プロトコルは、このフラグを読み取る必要はありません。代わりに、すべての NBL から常に EtherType を読み取ることができます。

NDIS_RECEIVE_FLAGS_SINGLE_VLAN

NetBufferLists のリスト内のすべてのNET_BUFFER_LIST構造が同じ VLAN に属することを指定します。

NDIS_RECEIVE_FLAGS_PERFECT_FILTERED

NetBufferLists のリスト内のすべてのNET_BUFFER_LIST構造体に、ミニポート アダプターに割り当てられているパケット フィルターとマルチキャスト アドレス一覧に一致するデータのみを含むように指定します。

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

NetBufferLists のリスト内のすべてのNET_BUFFER_LIST構造体が同じ VM キューに属することを指定します。 ミニポート ドライバーは、 の Flags メンバーで NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION フラグが設定されている場合、キューのすべての受信通知に対してこの フラグ を設定する必要があります。 その キューが割り当てられたときに構造体をNDIS_RECEIVE_QUEUE_PARAMETERSします。

NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID

NetBufferLists のリスト内のすべてのNET_BUFFER_LIST構造体に、有効な共有メモリ情報が含まれていることを指定します。 受信した NET_BUFFER_LISTでこのフラグが設定されている場合、NDIS は共有メモリ情報を有効として扱います。 このフラグが設定されていない場合、NDIS とドライバーは共有メモリ情報を無視します。 たとえば、パケット データを変更する中間ドライバーでは、このフラグを使用して、データをコピーする必要があるかどうかを判断できます。 ミニポート ドライバーは、 フラグを使用して、キューが削除されたときに VM キューに関連付けられているメモリを解放する方法を決定できます。

NDIS_RECEIVE_FLAGS_MORE_NBLS

予約済み。

戻り値

なし

解説

ミニポート ドライバーは通常、ミニポートInterruptDPC 関数から NdisMIndicateReceiveNetBufferLists 関数を呼び出します。 ミニポート ドライバーは、NdisMIndicateReceiveNetBufferLists を呼び出すとき、NetBufferLists パラメーターでNET_BUFFER_LIST構造体の一覧を指定します。 NDIS は、 NET_BUFFER_LIST 構造体を に渡します。バインドされたプロトコル ドライバー の ProtocolReceiveNetBufferLists 関数。

ミニポート ドライバーは、各NET_BUFFER_LIST構造体の SourceHandle メンバーを、MiniportAdapterHandle パラメーターと同じ値に設定する必要があります。

ミニポート ドライバーが NdisMIndicateReceiveNetBufferLists を呼び出し、ReceiveFlags パラメーターのNDIS_RECEIVE_FLAG_RESOURCES フラグをクリアする場合、NDIS は、ミニポート ドライバーに示されたNET_BUFFER_LIST構造体を返します。 MiniportReturnNetBufferLists 関数。 この場合、ミニポート ドライバーは、NDIS がミニポート ドライバーミニポートReturnNetBufferLists 関数にNET_BUFFER_LIST構造体を返すまで、NET_BUFFER_LIST構造体を再利用することはできません。

ミニポート ドライバーが NdisMIndicateReceiveNetBufferLists を呼び出し、ReceiveFlags パラメーターにNDIS_RECEIVE_FLAG_RESOURCES フラグを設定する場合、ミニポート ドライバーがNET_BUFFER_LIST構造体の所有権を直ちに回復する必要があることを示します。 この場合、NDIS はミニポート ドライバーの ミニポートReturnNetBufferLists 関数を呼び出して 、NET_BUFFER_LIST 構造体を返しません。 代わりに、NDIS は NdisMIndicateReceiveNetBufferLists から戻ると、ミニポート ドライバーにNET_BUFFER_LIST構造体を返します。 ミニポート ドライバーは、NdisMIndicateReceiveNetBufferLists が返された直後に、NET_BUFFER_LIST構造体を再利用する必要があります。 ミニポート ドライバーは、 NET_BUFFER_LIST 構造体を再利用するには、独自のを呼び出すことができます。 MiniportReturnNetBufferLists 関数。

ReceiveFlags パラメーターでNDIS_RECEIVE_FLAG_RESOURCES フラグを設定すると、プロトコル ドライバーは強制的にネットワーク データをコピーし、NET_BUFFER_LIST構造体をミニポート ドライバーに解放します。 ドライバーライターは、不要なコピーを回避するために、十分な事前割り当て 済みNET_BUFFER_LIST 構造体を使用してミニポート ドライバーを設計する必要があります。

NdisMIndicateReceiveNetBufferLists の呼び出し元は、NET_BUFFER_LIST構造体、アタッチされたNET_BUFFER構造体、およびアタッチされている MDL を適切に初期化する必要があります。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
対象プラットフォーム ユニバーサル
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 Irql_SendRcv_Function(ndis)

こちらもご覧ください

MiniportInitializeEx

MiniportInterruptDPC

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists