PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETEコールバック関数 (ndis.h)
ProtocolCoSendNetBufferListsComplete 関数は、プロトコル ドライバーが呼び出しで開始した送信操作を完了します。NdisCoSendNetBufferLists 関数を します。
構文
PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE ProtocolCoSendNetBufferListsComplete;
void ProtocolCoSendNetBufferListsComplete(
[in] NDIS_HANDLE ProtocolVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG SendCompleteFlags
)
{...}
パラメーター
[in] ProtocolVcContext
プロトコル ドライバーによって割り当てられたコンテキスト領域へのハンドル。このドライバーは、仮想接続ごとの (VC) ランタイム状態情報を保持します。 クライアントまたはスタンドアロンの呼び出しマネージャーは、NdisCoCreateVc 関数を呼び出したとき、またはその ProtocolCoCreateVc 関数からこのハンドルを提供しました。
[in] NetBufferLists
前の呼び出しでプロトコル ドライバーが指定した NET_BUFFER_LIST 構造体の一覧へのポインター。NdisCoSendNetBufferLists 関数を します。
[in] SendCompleteFlags
ビットごとの OR 操作と組み合わせることができる NDIS フラグ。 すべてのフラグをクリアするには、このパラメーターを 0 に設定します。 ProtocolCoSendNetBufferListsComplete では、NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL フラグがサポートされています。設定されている場合は、現在の IRQL がDISPATCH_LEVELされていることを示します。 このフラグの詳細については、「ディスパッチ IRQL 追跡」を参照してください。
戻り値
何一つ
備考
ProtocolCoSendNetBufferListsComplete 関数は、CoNDIS プロトコル ドライバーに必要です。 ProtocolCoSendNetBufferListsComplete 、送信操作を完了するために必要なすべての後処理を実行します。 たとえば、プロトコル ドライバーは、送信操作が完了したことをネットワーク データを送信するドライバーを要求したクライアントに通知できます。
NDIS は、基になるミニポート ドライバー 呼び出した後に ProtocolCoSendNetBufferListsComplete を呼び出します。NdisMCoSendNetBufferListsComplete 関数を します。 完全な送信操作は、基になるミニポート ドライバーが指定されたネットワーク データを送信したことを必ずしも意味しません。 たとえば、ミニポート ドライバーは、ネットワーク インターフェイス カード (NIC) ハードウェアにネットワーク データを転送するとすぐに送信操作が完了したことを示すことができます。
NDIS が ProtocolCoSendNetBufferListsComplete 呼び出すと、プロトコル ドライバーは、NetBufferLists パラメーターが指定するNET_BUFFER_LIST構造体に関連付けられているすべてのリソースの所有権を回復します。
NDIS は常に、プロトコル ドライバーが提供するネットワーク データを、NdisCoSendNetBufferListsに渡されたプロトコルによって決定された順序で基になるドライバーに送信します。 ただし、基になるドライバーは、任意の順序で送信要求を完了できます。 つまり、プロトコル ドライバーは NDIS に依存して、基になるドライバーに "先入れ先出し" (FIFO) 順にネットワーク データを送信できます。 ただし、プロトコル ドライバーは、基になるドライバーに依存して、NdisMCoSendNetBufferListsComplete を同じ順序で呼び出すことはできません。
NDIS は、IRQL= DISPATCH_LEVEL で ProtocolCoSendNetBufferListsComplete < 呼び出します。
の例
ProtocolCoSendNetBufferListsComplete 関数を定義するには、まず、定義する関数の型を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数の種類のセットが用意されています。 関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、"MyCoSendNetBufferListsComplete" という名前の ProtocolCoSendNetBufferListsComplete 関数を定義するには、次のコード例に示すように PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE 型を使用します。
PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE MyCoSendNetBufferListsComplete;
次に、次のように関数を実装します。
_Use_decl_annotations_
VOID
MyCoSendNetBufferListsComplete(
NDIS_HANDLE ProtocolVcContext,
PNET_BUFFER_LIST NetBufferLists,
ULONG SendCompleteFlags
)
{...}
PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE 関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations 注釈により、ヘッダー ファイル内の PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE 関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「ndis ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.0 以降でサポートされています。 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | <= DISPATCH_LEVEL |
関連項目
NdisCoCreateVc の
NdisCoSendNetBufferLists の
NdisMCoSendNetBufferListsComplete の