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 追跡」を参照してください。
戻り値
なし
解説
CoNDIS プロトコル ドライバーには ProtocolCoSendNetBufferListsComplete 関数が必要です。 ProtocolCoSendNetBufferListsComplete は、送信操作を完了するために必要な事後処理を実行します。 たとえば、プロトコル ドライバーは、送信操作が完了したことをネットワーク データの送信をドライバーに要求したクライアントに通知できます。
NDIS は、基になるミニポート ドライバーが を呼び出した後に ProtocolCoSendNetBufferListsComplete を呼び出します。 NdisMCoSendNetBufferListsComplete 関数。 完全な送信操作は、基になるミニポート ドライバーが指定されたネットワーク データを送信したことを必ずしも意味するものではありません。 たとえば、ミニポート ドライバーは、ネットワーク インターフェイス カード (NIC) ハードウェアにネットワーク データを転送するとすぐに送信操作が完了したことを示すことができます。
NDIS が ProtocolCoSendNetBufferListsComplete を呼び出すと、プロトコル ドライバーは 、NetBufferLists パラメーターが指定するNET_BUFFER_LIST構造体に関連付けられているすべてのリソースの所有権を回復します。
NDIS は常に、 NdisCoSendNetBufferLists に渡されたプロトコルによって決定された順序で、基になるドライバーにプロトコル ドライバーによって提供されるネットワーク データを送信します。 ただし、基になるドライバーは、任意の順序で送信要求を完了できます。 つまり、プロトコル ドライバーは NDIS に依存して、基になるドライバーに "first in, first out" (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 以降でサポートされています。 |
対象プラットフォーム | Windows |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | <= DISPATCH_LEVEL |