PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS コールバック関数 (ndis.h)
ProtocolCoReceiveNetBufferLists 関数プロセスは、基になるドライバーから指示を受け取ります。
構文
PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS ProtocolCoReceiveNetBufferLists;
void ProtocolCoReceiveNetBufferLists(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] NDIS_HANDLE ProtocolVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
)
{...}
パラメーター
[in] ProtocolBindingContext
バインディングの状態情報を維持するためにプロトコル ドライバーが割り当てたコンテキスト領域へのハンドル。 このハンドルは、NdisOpenAdapterEx 以前の呼び出しで NDIS に渡されました。
[in] ProtocolVcContext
プロトコル ドライバーによって割り当てられたコンテキスト領域へのハンドル。このドライバーは、仮想接続ごとの (VC) ランタイム状態情報を保持します。 クライアントまたはスタンドアロンの呼び出しマネージャーは、NdisCoCreateVc 関数を呼び出したとき、またはその ProtocolCoCreateVc 関数からこのハンドルを提供しました。
[in] NetBufferLists
基になるドライバーが割り当てた NET_BUFFER_LIST 構造体のリンクされたリスト。 各 NET_BUFFER_LIST 構造体は、通常、1 つの NET_BUFFER 構造体に関連付けられます。
[in] NumberOfNetBufferLists
NetBufferLists が指定する構造体のリンク されたリストにあるNET_BUFFER_LIST 構造体の数。
[in] ReceiveFlags
送信操作の属性を定義するフラグ。 フラグは、ビットごとの OR 演算と組み合わせることができます。 すべてのフラグをクリアするには、このパラメーターを 0 に設定します。 ProtocolCoReceiveNetBufferLists では、次のフラグがサポートされています。
NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL
現在の IRQL はDISPATCH_LEVEL。 このフラグの詳細については、「ディスパッチ IRQL 追跡」を参照してください。
NDIS_RECEIVE_FLAGS_RESOURCES
NDIS は、protocolCoReceiveNetBufferLists 戻す呼び出しの直後に、NET_BUFFER_LIST 構造体とアタッチされたNET_BUFFER構造体の所有権 再利用します。
戻り値
何一つ
備考
ProtocolCoReceiveNetBufferLists 関数は、CoNDIS プロトコル ドライバーに必要です。 NDIS は、バインドされたミニポート ドライバー 呼び出した後に ProtocolCoReceiveNetBufferLists を呼び出します。NdisMCoIndicateReceiveNetBufferLists 関数を します。 ProtocolCoReceiveNetBufferLists の呼び出しは、ループバックの結果として発生する可能性もあります。
CoReceiveFlags パラメーターの NDIS_RECEIVE_FLAGS_RESOURCES フラグが設定されていない場合、プロトコル ドライバーは、NET_BUFFER_LIST 構造体の所有権を保持し、NdisReturnNetBufferLists 関数を します。 NDIS は、NDIS_RECEIVE_FLAGS_RESOURCES フラグを設定する場合、プロトコル ドライバーは、NET_BUFFER_LIST 構造体と関連付けられているリソースを保持できません。 NDIS_RECEIVE_FLAGS_RESOURCES は、基になるドライバーに低い受信リソースがあることを示します。 この場合、ProtocolCoReceiveNetBufferLists 関数は、受信したデータをプロトコルで割り当てられたストレージにコピーし、できるだけ早く戻る必要があります。
マルチプロセッサ システムでは、ProtocolCoReceiveNetBufferLists 複数のプロセッサで同時に実行できます。 このような場合は、ProtocolCoReceiveNetBufferLists アクセスを する重要なデータ構造に保護 (スピン ロックの使用など) を適用します。
NDIS は、IRQL<= DISPATCH_LEVEL で ProtocolCoReceiveNetBufferLists 呼び出します。
の例
ProtocolCoReceiveNetBufferLists 関数を定義するには、まず、定義する関数の型を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数の種類のセットが用意されています。 関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、"MyCoReceiveNetBufferLists" という名前の ProtocolCoReceiveNetBufferLists 関数を定義するには、次のコード例に示すように PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS 型を使用します。
PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS MyCoReceiveNetBufferLists;
次に、次のように関数を実装します。
_Use_decl_annotations_
VOID
MyCoReceiveNetBufferLists(
NDIS_HANDLE ProtocolBindingContext,
NDIS_HANDLE ProtocolVcContext,
INPNET_BUFFER_LIST NetBufferLists,
ULONG NumberOfNetBufferLists,
ULONG ReceiveFlags
)
{...}
PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS 関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations 注釈により、ヘッダー ファイル内の PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS 関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「ndis ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.0 以降でサポートされています。 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | <= DISPATCH_LEVEL |
関連項目
ミニポートReturnNetBufferListsNdisCoCreateVc の
NdisMCoIndicateReceiveNetBufferLists のNdisOpenAdapterEx の
NdisReturnNetBufferLists の