FwpsAllocateCloneNetBufferList0 関数 (fwpsk.h)
FwpsAllocateCloneNetBufferList0 関数は、既存のNET_BUFFER_LIST構造体の複製であるNET_BUFFER_LIST構造体を割り当てます。
構文
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 コードを返します。
リターン コード | 説明 |
---|---|
|
複製 NET_BUFFER_LIST 構造体が正常に割り当てられました。 |
|
エラーが発生しました。 |
解説
コールアウト ドライバーは 、FwpsAllocateCloneNetBufferList0 関数を呼び出して、既存 のNET_BUFFER_LIST 構造体の複製NET_BUFFER_LIST構造体を割り当てます。
この関数は、 のラッパーです。 NdisAllocateCloneNetBufferList 関数ですが、WFP パケット インジェクション関数で使用するために特殊化されています。
複製NET_BUFFER_LIST構造体に特定のプールに関連付けられている属性が必要な場合、引き出しドライバーは 、NetBufferListPoolHandle または NetBufferPoolHandle パラメーターでプール ハンドル を 指定する必要があります。 これらのパラメーターが NULL の場合は、NDIS によって事前に割り当てられた既定のプールが使用されます。
複製NET_BUFFER_LIST構造体は、元のNET_BUFFER_LIST構造で記述されたものと同じデータを記述します。 FwpsAllocateCloneNetBufferList0 関数は、元の MDL で記述されたデータを新しいデータ バッファーにコピーしません。 代わりに、複製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 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | fwpsk.h (Fwpsk.h を含む) |
Library | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |