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 が 〘に渡したミニポート ハンドルミニポートInitializeEx 関数を します。
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 は、NBLs が同じ EtherType を持たなくなった場合にフラグをクリア 必要があります。
下位層からの受信を通過する場合、LWF が NBLs の 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 キューに属することを指定します。 ミニポート ドライバーは、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 メンバーを、ミニポートAdapterHandle パラメーターと同じ値に設定する必要があります。
ミニポート ドライバーが NdisMIndicateReceiveNetBufferLists 呼び出し、ReceiveFlags パラメーターで NDIS_RECEIVE_FLAG_RESOURCES フラグをクリアする場合、NDIS はミニポート ドライバーの指定された NET_BUFFER_LIST 構造体を返します。ミニポートReturnNetBufferLists 関数を します。 この場合、ミニポート ドライバーは、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 構造体を再利用するには、ミニポート ドライバーは、独自の呼び出しを行うことができます。ミニポートReturnNetBufferLists 関数を します。
ReceiveFlags パラメーターに NDIS_RECEIVE_FLAG_RESOURCES フラグを設定すると、プロトコル ドライバーが強制的にネットワーク データをコピーし、NET_BUFFER_LIST 構造体をミニポート ドライバーに解放します。 ドライバーライターは、不要なコピーを回避するために十分な事前割り当て NET_BUFFER_LIST 構造でミニポート ドライバーを設計する必要があります。
NdisMIndicateReceiveNetBufferLists の呼び出し元は、NET_BUFFER_LIST 構造体、アタッチされた NET_BUFFER 構造体、およびアタッチされた MDL を適切に初期化する必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.0 以降でサポートされています。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ndis.h (Ndis.h を含む) |
ライブラリ | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 を する | Irql_SendRcv_Function(ndis) |
関連項目
ミニポートReturnNetBufferListsNdisMAllocatePort の
ProtocolReceiveNetBufferLists