次の方法で共有


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 関数は、元の MDLs によって記述されたデータを新しいデータ バッファーにコピーします。 複製 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
ターゲット プラットフォーム 万国
ヘッダー fwpsk.h (Fwpsk.h を含む)
ライブラリ Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

関連項目

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

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