次の方法で共有


PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE コールバック関数 (ndis.h)

ProtocolSendNetBufferListsComplete 関数は、 への呼び出しでプロトコル ドライバーが開始した送信操作を完了します。 NdisSendNetBufferLists 関数。

メモPROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE型を使用して関数を宣言する必要があります。 詳細については、次の例に関するセクションを参照してください。
 

構文

PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE ProtocolSendNetBufferListsComplete;

void ProtocolSendNetBufferListsComplete(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNET_BUFFER_LIST NetBufferList,
  [in] ULONG SendCompleteFlags
)
{...}

パラメーター

[in] ProtocolBindingContext

バインディングに関する状態情報を維持するためにプロトコル ドライバーが割り当てたコンテキスト領域へのハンドル。 このハンドルは、 NdisOpenAdapterEx の以前の呼び出しで NDIS に渡されました。

[in] NetBufferList

以前 NdisSendNetBufferLists の呼び出しでプロトコル ドライバーが指定したNET_BUFFER_LIST構造体の一覧へのポインター。

[in] SendCompleteFlags

OR 操作と組み合わせることができる NDIS フラグ。 すべてのフラグをクリアするには、このメンバーを 0 に設定します。 この関数は、NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL フラグをサポートしています。が設定されている場合は、現在の IRQL がDISPATCH_LEVELされていることを示します。 このフラグの詳細については、「 ディスパッチ IRQL 追跡」を参照してください。

戻り値

なし

解説

ProtocolSendNetBufferListsComplete は、プロトコル ドライバーに必要な関数です。 ProtocolSendNetBufferListsComplete は、送信操作を完了するために必要な後処理を実行します。 たとえば、プロトコル ドライバーは、送信操作が完了したことをネットワーク データを送信するようにプロトコルを要求したクライアントに通知できます。

基になるミニポート ドライバーが を呼び出した後、NDIS は ProtocolSendNetBufferListsComplete を呼び出します。 NdisMSendNetBufferListsComplete 関数。 通常、送信操作の完了は、基になるミニポート ドライバーが指定されたネットワーク データを送信したことを意味します。 ただし、ミニポート ドライバーは、ネットワーク データを NIC に転送するとすぐに送信操作が完了したことを示すことができます。

NDIS が ProtocolSendNetBufferListsComplete を呼び出すと、プロトコル ドライバーは、NetBufferLists パラメーターで指定されたNET_BUFFER_LIST構造体に関連付けられているすべてのリソースの所有権を回復します。

NDIS は常に、 NdisSendNetBufferLists に渡されるプロトコルによって決定された順序で、基になるミニポート ドライバーにプロトコル提供のネットワーク データを送信します。 ただし、基になるドライバーは、任意の順序で送信要求を完了できます。 つまり、プロトコル ドライバーは NDIS に依存して、基になるドライバーに FIFO でネットワーク データを送信できます。 ただし、プロトコル ドライバーは、基になるドライバーを使用して NdisMSendNetBufferListsComplete を同じ順序で呼び出すことはできません。

NDIS は、IRQL<= DISPATCH_LEVELで ProtocolSendNetBufferListsComplete を呼び出します。

ProtocolSendNetBufferListsComplete 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバー用の一連の関数型が用意されています。 関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。

たとえば、" MySendNetBufferListsComplete" という名前の ProtocolSendNetBufferListsComplete 関数を定義するには、次のコード例に示すように 、PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE 型を使用します。

PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE MySendNetBufferListsComplete;

次に、次のように関数を実装します。

_Use_decl_annotations_
VOID
 MySendNetBufferListsComplete(
    NDIS_HANDLE  ProtocolBindingContext,
    PNET_BUFFER_LIST  NetBufferLists,
    ULONG  SendCompleteFlags
    )
  {...}

PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のPROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。

Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー ndis.h (Ndis.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

NET_BUFFER

NET_BUFFER_LIST

NdisMSendNetBufferListsComplete

NdisOpenAdapterEx

NdisSendNetBufferLists