次の方法で共有


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

プールの割り当てオプションを定義します。 次に示す 1 つ以上のフラグ値をビットごとの OR 演算を使用して 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

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

[out] EcpContext

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

戻り値

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

リターン コード 形容
STATUS_INSUFFICIENT_RESOURCES FsRtlAllocateExtraCreateParameter は、ECP 構造体に十分なメモリを割り当てませんでした。 この場合、EcpContext は NULL
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 以降で使用できます。
ターゲット プラットフォーム の 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ 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