MINIPORT_CO_SEND_NET_BUFFER_LISTSコールバック関数 (ndis.h)
ミニポートCoSendNetBufferLists 関数は、NET_BUFFER_LIST 構造体の指定されたリンクされたリストに含まれているネットワーク データを送信します。
構文
MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;
void MiniportCoSendNetBufferLists(
[in] NDIS_HANDLE MiniportVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG SendFlags
)
{...}
パラメーター
[in] MiniportVcContext
ミニポート ドライバーが仮想接続 (VC) ごとの状態を維持するミニポート ドライバーによって割り当てられたコンテキスト領域へのハンドル。 ミニポート ドライバーは、その ミニポートCoCreateVc 関数から NDIS にこのハンドルを提供しました。
[in] NetBufferLists
NET_BUFFER_LIST 構造体のリンクされたリスト内の最初の NET_BUFFER_LIST 構造体へのポインター。 リスト内の各 NET_BUFFER_LIST 構造体は、NET_BUFFER 構造体の一覧を記述します。 リスト内の各 NET_BUFFER 構造体は、メモリ記述子リスト (MDL) のチェーンにマップされます。 MDL には、ミニポートCoSendNetBufferLists 送信 ネットワーク データが含まれています。
[in] SendFlags
送信操作の属性を定義するフラグ。 フラグは、ビットごとの OR 演算と組み合わせることができます。 すべてのフラグをクリアするには、このパラメーターを 0 に設定します。 ミニポートCoSendNetBufferLists は、次のフラグをサポートしています。
NDIS_SEND_FLAGS_DISPATCH_LEVEL
現在の IRQL がDISPATCH_LEVEL場合、呼び出し元は必要に応じてこのフラグを設定できます。 このフラグの詳細については、「ディスパッチ IRQL 追跡」を参照してください。
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
NDIS はループバックを確認する必要があります。 既定では、NDIS は、送信要求を送信したドライバーにデータをループ バックしません。 上にあるドライバーは、NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK フラグを設定することで、この動作をオーバーライドできます。 このフラグが設定されている場合、NDIS は、バインディングの受信条件に一致するデータを含むすべての NET_BUFFER 構造体を識別します。 NDIS は、基になるドライバーの条件に一致する NET_BUFFER 構造体を示します。 このフラグは、他のバインディングでのループバックのチェックやループ バックには影響しません。
戻り値
何一つ
備考
CoNDIS ミニポート ドライバーには、ミニポートCoSendNetBufferLists 関数が必要です。 上にあるドライバーがNdisCoSendNetBufferLists 関数、NDIS は、バインドされたミニポート ドライバーの ミニポートCoSendNetBufferLists 関数を呼び出します。
NDIS NetBufferLists で渡される NET_BUFFER_LIST 構造体のリンクされたリストの順序は、ミニポート ドライバーがネットワーク データを送信する順序を表します。 さらに、ミニポート ドライバーは、ミニポート ドライバーが構造体を受信した順序で複数の ミニポートCoSendNetBufferLists 呼び出しから NET_BUFFER_LIST 構造体を送信する必要があります。
CoNDIS ミニポート ドライバーは、NDIS ミニポートCoSendNetBufferLists 関数を呼び出すことによって行うすべての送信要求を受け入れる必要があります。 ミニポート ドライバーがすぐに要求の送信を完了できない場合、ドライバーは要求を完了するまでキューに要求を保持する必要があります。 送信要求が保留中の間、ミニポート ドライバーは、NET_BUFFER_LIST 構造体と、NET_BUFFER_LIST 構造体に関連付けられているすべてのリソースの所有権を保持します。
ミニポート ドライバーは、次を呼び出す必要があります。NdisMCoSendNetBufferListsComplete 関数を して、すべての CoNDIS 送信要求を完了します。 コンピューターのパフォーマンスを向上させるために、ドライバーは、複数の送信要求からの NET_BUFFER_LIST 構造を含むリンクリストを作成できます。 その後、ドライバーは、NdisMCoSendNetBufferListsComplete 1 回の呼び出しでこのようなリンクリストを渡すことができます。
さらに、ドライバーが NdisMCoSendNetBufferListsComplete 呼び出した直後に、ミニポート ドライバーが NET_BUFFER_LIST 構造体やその他の関連リソースにアクセスできないと想定する必要があります。
ミニポートCoSendNetBufferLists 関数は、同じキューにアクセスするドライバーの他の ミニポートXxx 関数とネットワーク データの内部キューへのアクセスを同期する必要があります。 ミニポート ドライバーは、スピン ロックを使用して、キューへのアクセスを同期できます。
プロトコル ドライバーは、バインドされたミニポート ドライバーが選択したメディアの種類に基づいて、必要なネットワーク データを決定する役割を担います。 ただし、プロトコル ドライバーは、選択したメディアの最小パケット サイズよりも短いパケットを指定するネットワーク データを提供できます。 この場合、選択 メディアが送信パケット サイズに最小長要件を課す場合、ミニポートCoSendNetBufferLists は 0 でパケットを埋め込む必要があります。
NDIS は、IRQL<= DISPATCH_LEVEL で ミニポートCoSendNetBufferLists 呼び出します。
の例
ミニポートCoSendNetBufferLists 関数を定義するには、まず、定義する関数の型を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数の種類のセットが用意されています。 関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、"MyCoSendNetBufferLists" という名前の ミニポートCoSendNetBufferLists 関数を定義するには、次のコード例に示すように MINIPORT_CO_SEND_NET_BUFFER_LISTS 型を使用します。
MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;
次に、次のように関数を実装します。
_Use_decl_annotations_
VOID
MyCoSendNetBufferLists(
NDIS_HANDLE MiniportVcContext,
PNET_BUFFER_LIST NetBufferLists,
ULONG SendFlags
)
{...}
MINIPORT_CO_SEND_NET_BUFFER_LISTS 関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations 注釈を使用すると、ヘッダー ファイル内の MINIPORT_CO_SEND_NET_BUFFER_LISTS 関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「ndis ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.0 以降でサポートされています。 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | <= DISPATCH_LEVEL |
関連項目
ミニポートCoCreateVc を する
NdisCoSendNetBufferLists の
NdisMCoSendNetBufferListsComplete の