次の方法で共有


FwpsAllocateCloneNetBufferList0 関数 (fwpsk.h)

FwpsAllocateCloneNetBufferList0 関数は、既存の NET_BUFFER_LIST 構造体の複製である NET_BUFFER_LIST 構造体を割り当てます。

注意FwpsAllocateCloneNetBufferList0 は、FwpsAllocateCloneNetBufferList の特定のバージョンです。 詳細については、「WFP Version-Independent 名の と Windows の特定のバージョンを対象とする」を参照してください。
 

構文

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

パラメーター

[in, out] originalNetBufferList

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

[in, optional] netBufferListPoolHandle

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

[in, optional] netBufferPoolHandle

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

[in] allocateCloneFlags

現在、この関数に対して定義されているフラグはありません。 コールアウト ドライバーでは、このパラメーターを 0 に設定する必要があります。

[out] netBufferList

複製 NET_BUFFER_LIST 構造体へのポインターを受け取る変数へのポインター。

戻り値

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

リターン コード 形容
STATUS_SUCCESS
複製 NET_BUFFER_LIST 構造体が正常に割り当てられました。
その他の状態コードの
エラーが発生しました。

備考

コールアウト ドライバーは、既存のNET_BUFFER_LIST構造体の複製 NET_BUFFER_LIST 構造体を割り当てるために、FwpsAllocateCloneNetBufferList0 関数を呼び出します。

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

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

複製NET_BUFFER_LIST構造は、元のNET_BUFFER_LIST構造で記述されたものと同じデータを記述します。 FwpsAllocateCloneNetBufferList0 関数は、元の MDLs によって記述されたデータを新しいデータ バッファーにコピーしません。 代わりに、複製NET_BUFFER_LIST構造体は元のデータ バッファーを参照します。 複製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) または MDL を挿入または置換できます。 このようなドライバーは、呼び出す前に変更を元に戻す必要もあります。FwpsFreeCloneNetBufferList0 関数を します。

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

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

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

コールアウト ドライバーは、時間の長い可能性のある操作を待機する必要がある場合は、次を使用してパケットのディープ コピーを作成します。fwpsAllocateNetBufferAndNetBufferList0 し、元のパケットをブロックして吸収します。

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

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー fwpsk.h (Fwpsk.h を含む)
ライブラリ Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

関連項目

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

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