ファイル システム フィルター ドライバーで ECP を使用して IRP_MJ_CREATE 操作を処理する

ファイル システム フィルター ドライバーで追加の作成パラメーター (ECP) を使用して、 IRP_MJ_CREATE 操作を処理できます。 ファイル システム フィルター ドライバーは、次のセクションのルーチンを呼び出して、 IRP_MJ_CREATE 操作の ECP を取得、設定 (追加)、確認、および削除できます。 ECP の発生元のオペレーティング システム領域を決定することもできます。

ECP の取得

IRP_MJ_CREATE 操作の ECP を取得するには:

  1. FltGetEcpListFromCallbackData (または FsRtlGetEcpListFromIrp) を呼び出して、作成操作に関連付けられている ECP_LIST へのポインターを取得します。

  2. 次のいずれかの操作を実行します。

ECP の設定;

IRP_MJ_CREATE 操作の ECP を設定するには、ファイル システム フィルター ドライバーは次のいずれかを行います。

  • 既存の ECP_LIST に ECP を設定します。

  • 新しく作成した ECP_LIST に ECP を設定します。

既存の ECP_LIST での ECP の設定

作成操作に関連付けられている existing ECP_LIST で ECP を設定するには:

  1. FltGetEcpListFromCallbackData (または FsRtlGetEcpListFromIrp) を呼び出して、作成操作に関連付けられている ECP_LIST へのポインターを取得します。

  2. FltAllocateExtraCreateParameter (または FsRtlAllocateExtraCreateParameter) を呼び出して、ECP コンテキスト構造体にページ メモリ プールを割り当て、その構造体へのポインターを生成します。

  3. FltInsertExtraCreateParameter (または FsRtlInsertExtraCreateParameter) を呼び出して、ECP コンテキスト構造体を ECP_LIST 構造体に挿入します。

新しく作成された ECP_LIST での ECP の設定

ECP_LIST が現在作成操作に関連付けられていない場合は、作成し、その中に ECP を設定する必要があります。

  1. FltAllocateExtraCreateParameterList (または FsRtlAllocateExtraCreateParameterList) を呼び出して、 ECP_LIST 構造体のメモリを割り当てます。

  2. FltAllocateExtraCreateParameter (または FsRtlAllocateExtraCreateParameter) を呼び出して、ECP コンテキスト構造体にページ メモリ プールを割り当て、その構造体へのポインターを生成します。

  3. FltInsertExtraCreateParameter (または FsRtlInsertExtraCreateParameter) を呼び出して、ECP コンテキスト構造体を ECP_LIST に挿入します。

  4. FltSetEcpListIntoCallbackData (または FsRtlSetEcpListIntoIrp) を呼び出して、ECP リストを作成操作にアタッチします。

ECP の削除

IRP_MJ_CREATE 操作の ECP を削除するには:

  1. FltRemoveExtraCreateParameter (または FsRtlRemoveExtraCreateParameter) を呼び出して、ECP リストで ECP コンテキスト構造を検索します。 ECP コンテキスト構造が見つかった場合、ルーチンは ECP コンテキスト構造を ECP リストからデタッチします。

  2. デタッチされた ECP コンテキスト構造体のメモリを解放するには、 FltFreeExtraCreateParameter (または FsRtlFreeExtraCreateParameter) を呼び出します。 次のいずれかの方法でメモリを割り当てた場合は、これらのルーチンを呼び出して ECP コンテキスト構造のメモリを解放できます。

ECP を確認済みとしてマークするか、受信確認状態を決定する

次のルーチンを呼び出して、ECP を確認済みとしてマークするか、または ECP が受信確認済みとしてマークされているかどうかを判断します。

  • FltAcknowledgeEcp (または FsRtlAcknowledgeEcp) を呼び出して、ECP コンテキスト構造を確認済みとしてマークします。 ECP は、ECP の検索、使用、処理、またはその他の条件としてマークできます。

  • FltIsEcpAcknowledged (または FsRtlIsEcpAcknowledged) を呼び出して、ECP コンテキスト構造が受信確認済みとしてマークされているかどうかを判断します。

起点モードの決定

FltIsEcpFromUserMode (または FsRtlIsEcpFromUserMode) を呼び出して、ECP コンテキスト構造がユーザー モードから発生したかどうかを判断します。 ファイル システム フィルター ドライバーは、ユーザー モードから発生した ECP コンテキスト構造の受け入れを拒否できます。

ルックアサイド リストを使用して ECP を割り当てる

ルックアサイド リスト から ECP を割り当て、ルックアサイド リスト と ECP を管理するには、次のルーチンを呼び出します。