次の方法で共有


FltAllocateExtraCreateParameter 関数 (fltkernel.h)

FltAllocateExtraCreateParameter ルーチンは、ユーザー定義の追加作成パラメーター (ECP) コンテキスト構造にページングされたメモリ プールを割り当て、その構造体へのポインターを生成します。

構文

NTSTATUS FLTAPI FltAllocateExtraCreateParameter(
  [in]           PFLT_FILTER                                    Filter,
  [in]           LPCGUID                                        EcpType,
  [in]           ULONG                                          SizeOfContext,
  [in]           FSRTL_ALLOCATE_ECP_FLAGS                       Flags,
  [in, optional] PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
  [in]           ULONG                                          PoolTag,
  [out]          PVOID                                          *EcpContext
);

パラメーター

[in] Filter

ミニフィルター ドライバーの不透明なフィルター ポインター。 このポインターは、ミニフィルター ドライバーを一意に識別し、ミニフィルター ドライバーが読み込まれている限り一定のままになります。

[in] EcpType

ECP コンテキスト構造の型を示すユーザー定義 GUID へのポインター。 詳細については、「ドライバー での GUID の使用」を参照してください。

[in] SizeOfContext

ユーザー定義コンテキスト構造のサイズ (バイト単位)。

[in] Flags

プールの割り当てオプションを定義します。 次に示す 1 つ以上のフラグ値をビットごとの OR 演算を使用して Flags パラメーターと組み合わせた場合にプールを割り当てる方法について説明します。

  • FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL - ページ以外のプールが割り当てられます。 このフラグ値を使用しない場合は、ページ プールが割り当てられます。

  • FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA - このルーチンによって割り当てられたすべてのプールは、現在のプロセスのメモリ クォータに対して課金されます。

複数のフラグを使用すると、使用されるフラグ値に関連付けられているすべての効果が発生します。

[in, optional] CleanupCallback

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK型のミニフィルター定義クリーンアップ コールバック ルーチンへの省略可能なポインター。 クリーンアップ コールバック ルーチンは、(FltAllocateExtraCreateParameter ルーチンによって作成された) ECP 構造体が削除されたときに呼び出されます。 クリーンアップ コールバック ルーチンが適用できない場合は、このパラメーターを NULL に設定します。

[in] PoolTag

割り当てられたメモリのプール タグを指定します。 詳細については、ExAllocatePoolWithTag Tag パラメーター参照してください。

[out] EcpContext

割り当てられた ECP コンテキスト構造体へのポインターを受け取ります。 ルーチンが十分なプールの割り当てに失敗した場合、*EcpContext は NULL され、ルーチンは状態コードSTATUS_INSUFFICIENT_RESOURCESを返します。

戻り値

FltAllocateExtraCreateParameter は、次のいずれかの値を返すことができます。

リターン コード 形容
STATUS_INSUFFICIENT_RESOURCES FltAllocateExtraCreateParameter 、ECP 構造体に十分なメモリを割り当てることができませんでした。 この場合、EcpContext は NULL されます。
STATUS_SUCCESS ECP 構造体が正常に割り当てられました。 この場合、割り当てられた構造体へのポインターが、EcpContext パラメーターで返されます。

備考

既定では、fltAllocateExtraCreateParameter ルーチン は、ユーザー定義の ECP コンテキスト構造にページングされたメモリ プールを割り当てます。 上記のようにFSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOLビットマスクが使用されている場合は、ページングされていないメモリ プールが割り当てられます。 このプールが割り当てられ、ECP コンテキスト構造が初期化されると、FltInsertExtraCreateParameter ルーチンを使用して、ECP コンテキスト構造 (ECP リスト要素) を ECP リスト構造 (ECP リスト) に挿入します。

FltAllocateExtraCreateParameter ルーチンによって割り当てられたメモリ プールは、オペレーティング システムによって自動的に解放されません。 このメモリ プールは、最終的に次のいずれかの方法を使用して解放する必要があります。

  • FltRemoveExtraCreateParameter ルーチンを呼び出して ECP リストから ECP コンテキスト構造を削除し、FltFreeExtraCreateParameter ルーチンを呼び出して ECP コンテキスト構造自体を解放します。 ECP リストは存在したままです。

  • fltFreeExtraCreateParameterList ルーチン 呼び出します。これにより、リスト要素 (ECP コンテキスト構造体) を含む ECP リストが解放されます。 ECP リストが破棄されます。

    ただし、ファイル システムまたはファイル システム フィルター ドライバーが、IRP_MJ_CREATE要求の処理中に既存または新しく作成されたECP_LISTに ECP をアタッチすると、IRP が完了すると、この ECP が自動的にクリーンアップされます。 その結果、フィルター ドライバーは、動的に追加される ECP をクリーンアップする必要はありません。 これにより、フィルター ドライバーの ECP を再解析ポイント間で適切に伝達できます。つまり、複数のIRP_MJ_CREATE要求を生成する必要があるプロセスです。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ FltMgr.lib
IRQL <= APC_LEVEL

関連項目

ECP_LIST

FltAllocateExtraCreateParameterFromLookasideList

FltAllocateExtraCreateParameterList

FltCreateFileEx2 する

FltFreeExtraCreateParameter する

FltFreeExtraCreateParameterList する

FltGetEcpListFromCallbackData

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK