次の方法で共有


FwpsAllocateDeepCloneNetBufferList0 関数 (fwpsk.h)

FwpsAllocateDeepCloneNetBufferList0 関数は、既存のNET_BUFFER_LIST構造体のディープ クローンであるNET_BUFFER_LIST構造体を割り当てます。

構文

NTSTATUS FwpsAllocateDeepCloneNetBufferList0(
  [in, out]      NET_BUFFER_LIST *originalNetBufferList,
  [in, optional] NDIS_HANDLE     netBufferListPoolHandle,
  [in, optional] NDIS_HANDLE     netBufferPoolHandle,
  [out]          NET_BUFFER_LIST **netBufferList
);

パラメーター

[in, out] originalNetBufferList

複製される元の NET_BUFFER_LIST 構造体へのポインター。

[in, optional] netBufferListPoolHandle

NdisAllocateNetBufferListPool 関数の以前の呼び出しから取得されたNET_BUFFER_LIST プール ハンドル。 このパラメーターは省略可能であり、 NULL にすることができます

[in, optional] netBufferPoolHandle

NdisAllocateNetBufferPool 関数の以前の呼び出しから取得されたNET_BUFFER_LIST プール ハンドル。 このパラメーターは省略可能であり、 NULL にすることができます

[out] netBufferList

ディープ クローン NET_BUFFER_LIST 構造体へのポインターを受け取る変数へのポインター。

戻り値

FwpsAllocateDeepCloneNetBufferList0 関数は、次のいずれかの NTSTATUS コードを返します。

リターン コード 説明
STATUS_SUCCESS ディープ クローン NET_BUFFER_LIST 構造体が正常に割り当てられています。
その他の状態コード エラーが発生しました。

解説

コールアウト ドライバーは、FwpsAllocateDeepCloneNetBufferList0 関数を呼び出して、既存のNET_BUFFER_LIST構造体のディープ クローンNET_BUFFER_LIST構造体を割り当てます。

この関数は NdisAllocateCloneNetBufferList 関数のラッパーですが、WFP パケット インジェクション関数で使用するために特殊化されています。

ディープ クローン NET_BUFFER_LIST構造体に特定のプールに関連付けられている属性が必要な場合、引き出しドライバーは、NetBufferListPoolHandle または NetBufferPoolHandle パラメーターでプール ハンドルを指定する必要があります。 これらのパラメーターが NULL の場合は、NDIS によって事前に割り当てられた既定のプールが使用されます。

ディープ クローン NET_BUFFER_LIST 構造体は、元の NET_BUFFER_LIST 構造で記述されたものと同じデータを記述します。 FwpsAllocateDeepCloneNetBufferList0 関数は、元の MDL によって記述されたデータを新しいデータ バッファーにコピーします。 複製 NET_BUFFER_LIST 構造体には、初期 NET_BUFFER_LIST_CONTEXT 構造体が含まれます。

この関数は、新しく作成された複製NET_BUFFER_LIST構造体の ParentNetBufferList メンバーを、親NET_BUFFER_LIST構造体を指すよう設定します。 親構造体の ChildRefCount メンバーは 1 ずつインクリメントされます。

コールアウト ドライバーは、複製NET_BUFFER_LIST構造を変更し、パケット インジェクション関数を呼び出すことによって、元のNET_BUFFER_LIST構造の代わりにネットワーク スタックに挿入できます。 複製NET_BUFFER_LIST構造体によって記述されたデータがネットワーク スタックに正常に挿入されると、引き出し線ドライバーは FwpsFreeCloneNetBufferList0 関数を呼び出すことによって、複製NET_BUFFER_LIST構造体を解放します。

コールアウト ドライバーは、ディープ クローン NET_BUFFER_LIST内の個々ネット バッファー (NET_BUFFER) または MDL を挿入または置換できます。 ドライバーは 、FwpsFreeCloneNetBufferList0 関数を呼び出す前に、これらの変更を元に戻す必要があります。

複製されたパケットを管理するためのガイドライン

コールアウト ドライバーは、複製されたパケットを無期限に保持することはできません。 複製されたパケットは、アイドル状態のコンピューターでの電源管理操作に干渉する可能性があります。

WFP でのディープ クローン パケットの用途は、元のパケットに依存しないパケットを必要とするユーザー モード アプリケーションまたはその他の比較的高速な操作から明確にすることです。 コールアウト ドライバーは、ユーザー入力、Web サービスのクリアランス、または任意の時間がかかる可能性のあるその他の操作を待機している間、複製されたパケットを保持することはできません。

コールアウト ドライバーは、常にできるだけ早く保持されたパケットを返す必要があります。

要件

要件
サポートされている最小のクライアント WIP ビルド 25324
対象プラットフォーム ユニバーサル
Header fwpsk.h (Fwpsk.h を含む)
Library Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

パケット インジェクション関数