次の方法で共有


FltAllocateExtraCreateParameterFromLookasideList 関数 (fltkernel.h)

FltAllocateExtraCreateParameterFromLookasideList ルーチンは、追加の create パラメーター (ECP) コンテキスト構造用に特定のルックアサイド リストからメモリ プールを割り当て、その構造体へのポインターを生成します。

構文

NTSTATUS FLTAPI FltAllocateExtraCreateParameterFromLookasideList(
  [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, out]      PVOID                                          LookasideList,
  [out]          PVOID                                          *EcpContext
);

パラメーター

[in] Filter

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

[in] EcpType

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

[in] SizeOfContext

ECP コンテキスト構造のサイズ (バイト単位)。

[in] Flags

プール割り当てオプションを定義します。 SizeOfContext パラメーターの値が、指定されたルックアサイド リストのサイズ (バイト単位) よりも大きい場合、ECP コンテキスト構造はルックアサイド リストではなくシステム プールから割り当てられます。 この場合、 Flags パラメーターに FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA ビット フラグ値が含まれている場合、ルーチンによって割り当てられたシステム プールは、現在のプロセスのメモリ クォータに対して課金されます。 詳細については、FltAllocateExtraCreateParameterFlags パラメーターを参照してください。 ECP コンテキスト構造のメモリがルックアサイド リストから割り当てられる場合、より一般的なケースでは、FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA ビット フラグはルーチンで使用されません。

[in, optional] CleanupCallback

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK 型のミニフィルター定義クリーンアップ コールバック ルーチンへのオプションのポインター。 クリーンアップ コールバック ルーチンは、ECP コンテキスト構造が削除されるときに呼び出されます。 クリーンアップ コールバック ルーチンが適用されない場合は、このパラメーターを NULL に 設定します。

[in, out] LookasideList

(ECP コンテキスト構造の場合) からプールを割り当てようとする初期化されたルックアサイド リストへのポインター。 ルックアサイド リストを初期化するには、 FltInitExtraCreateParameterLookasideList ルーチンを 使用します。

[out] EcpContext

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

戻り値

FltAllocateExtraCreateParameterFromLookasideList ルーチンは、次のいずれかの値を返すことができます。

リターン コード 説明
STATUS_INSUFFICIENT_RESOURCES FltAllocateExtraCreateParameterFromLookasideList ルーチンは、ECP コンテキスト構造に十分なメモリを割り当てることができませんでした。 この場合、 EcpContextNULL になります
STATUS_SUCCESS ECP コンテキスト構造が正常に割り当てられています。 この場合、割り当てられた構造体へのポインターが EcpContext パラメーターによって返されます。

注釈

このルーチンは、Windows Vista 以降で使用できます。

FltAllocateExtraCreateParameterFromLookasideList ルーチンは、指定された初期化されたページまたはページ以外のルックアサイド リストから ECP コンテキスト構造のメモリ プールを割り当てます。 ただし、( SizeOfContext パラメーターで定義されている) ECP コンテキスト構造のサイズがルックアサイド リストよりも大きい場合、ルーチンは同様にページシステム プールまたは非ページ システム プールからメモリを割り当てます。

FltInitExtraCreateParameterLookasideList ルーチンを使用して、ページプールまたは非ページ プールのルックアサイド リストを初期化します。 検索側リストから ECP コンテキスト構造を割り当てるには FltAllocateExtraCreateParameterFromLookasideList ルーチンを使用し、ECP コンテキスト構造の割り当てを解除するには FltFreeExtraCreateParameter ルーチンを使用します。

ルックアサイド リストを解放するには、 FltDeleteExtraCreateParameterLookasideList ルーチンを使用します。

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

ドライバーでルックアサイド リストを使用する方法の詳細については、「Lookaside Listsの使用」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library FltMgr.lib
IRQL <= APC_LEVEL

こちらもご覧ください

ECP_LIST

FltAllocateExtraCreateParameter

FltAllocateExtraCreateParameterList

FltCreateFileEx2

FltDeleteExtraCreateParameterLookasideList

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInitExtraCreateParameterLookasideList

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK