次の方法で共有


FsRtlAllocateExtraCreateParameter 関数 (ntifs.h)

FsRtlAllocateExtraCreateParameter ルーチンは、追加の create パラメーター (ECP) コンテキスト構造にメモリを割り当て、その構造体へのポインターを生成します。

構文

NTSTATUS FsRtlAllocateExtraCreateParameter(
  [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] EcpType

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

[in] SizeOfContext

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

[in] Flags

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

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

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

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

[in, optional] CleanupCallback

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

[in] PoolTag

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

[out] EcpContext

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

戻り値

FltAllocateExtraCreateParameter は 、次のいずれかの状態コードを返します。

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

注釈

既定では、 FsRtlAllocateExtraCreateParameter ルーチンは、ECP コンテキスト構造用にページングされたメモリ プールを割り当てます。 flags パラメーターの説明に従ってFSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOLビットマスクを使用すると、ページなしのメモリ プールが割り当てられます。 このプールが割り当てられ、ECP コンテキスト構造が初期化されると、 FltInsertExtraCreateParameter ルーチンを使用して、ECP コンテキスト構造 (ECP リスト要素) を ECP リスト構造体 (ECP_LIST) に挿入します。

呼び出し元がECP_LISTを割り当て、 IoCreateFileEx の呼び出しで 1 つ以上の ECP が使用されている場合、前の説明は正しいです。 この場合、システムはどの ECP も解放されないため、呼び出し元は同じ ECP セットを使用して IoCreateFileEx に対して複数の呼び出しを行うことができます。 ただし、ファイル システムまたはファイル システム フィルター ドライバーが、IRP_MJ_CREATE要求の処理中に既存または新しく作成されたECP_LISTに ECP をアタッチすると、IRP が完了すると、この ECP が自動的にクリーンアップされます。 その結果、フィルター ドライバーは、動的に追加される ECP をクリーンする必要はありません。 これにより、フィルター ドライバーの ECP を再解析ポイント間で適切に伝達できます。つまり、複数のIRP_MJ_CREATE要求を生成する必要があるプロセスです。

要件

要件
サポートされている最小のクライアント FsRtlAllocateExtraCreateParameter ルーチンは、Windows Vista 以降で使用できます。
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL

こちらもご覧ください

ECP_LIST

FltAllocateExtraCreateParameterFromLookasideList

FltAllocateExtraCreateParameterList

FltCreateFileEx2

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK