Share via


FS_FILTER_CALLBACKS構造体 (ntifs.h)

FS_FILTER_CALLBACKS構造体には、呼び出し元が指定した通知コールバック ルーチンのエントリ ポイントが含まれています。

構文

typedef struct _FS_FILTER_CALLBACKS {
  ULONG                          SizeOfFsFilterCallbacks;
  ULONG                          Reserved;
  PFS_FILTER_CALLBACK            PreAcquireForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreReleaseForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreAcquireForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
  PFS_FILTER_CALLBACK            PreReleaseForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
  PFS_FILTER_CALLBACK            PreAcquireForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreReleaseForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreQueryOpen;
  PFS_FILTER_COMPLETION_CALLBACK PostQueryOpen;
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;

メンバー

SizeOfFsFilterCallbacks

この構造体のサイズ (バイト単位)。 sizeof(FS_FILTER_CALLBACKS) を設定します。 SizeOfFsFilterCallbacks を 0 に設定することはできません。

Reserved

予約済み。 使用しないでください。

PreAcquireForSectionSynchronization

FS_FILTER_CALLBACK PreAcquireForSectionSynchronization ルーチンへのポインター。

PostAcquireForSectionSynchronization

FS_FILTER_CALLBACK PostAcquireForSectionSynchronization ルーチンへのポインター。

PreReleaseForSectionSynchronization

FS_FILTER_CALLBACK PreReleaseForSectionSynchronization ルーチンへのポインター。

PostReleaseForSectionSynchronization

postReleaseForSectionSynchronization ルーチンFS_FILTER_CALLBACKへのポインター。

PreAcquireForCcFlush

FS_FILTER_CALLBACK PreAcquireForCcFlush ルーチンへのポインター。

PostAcquireForCcFlush

FS_FILTER_CALLBACK PostAcquireForCcFlush ルーチンへのポインター。

PreReleaseForCcFlush

FS_FILTER_CALLBACK PreReleaseForCcFlush ルーチンへのポインター。

PostReleaseForCcFlush

FS_FILTER_CALLBACK PostReleaseForCcFlush ルーチンへのポインター。

PreAcquireForModifiedPageWriter

FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter ルーチンへのポインター。

PostAcquireForModifiedPageWriter

FS_FILTER_CALLBACK PostAcquireForModifiedPageWriter ルーチンへのポインター。

PreReleaseForModifiedPageWriter

FS_FILTER_CALLBACK PreReleaseForModifiedPageWriter ルーチンへのポインター。

PostReleaseForModifiedPageWriter

FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter ルーチンへのポインター。

PreQueryOpen

FS_FILTER_CALLBACK PreQueryOpen ルーチンへのポインター。

PostQueryOpen

FS_FILTER_CALLBACK PostQueryOpen ルーチンへのポインター。

注釈

ファイル システム フィルター ドライバーとファイル システムは 、FsRtlRegisterFileSystemFilterCallbacks ルーチンを呼び出して、基になるファイル システムが特定の操作を実行したときに呼び出される通知コールバック ルーチンを登録します。

すべてのコールバック エントリ ポイントは省略可能であり、 NULL にすることができます。

FS_FILTER_CALLBACK フィルター コールバック ルーチンとそのパラメーターは、次のように定義されます。


typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    OUT PVOID *CompletionContext
);

パラメーター 意味
データ この操作の FS_FILTER_CALLBACK_DATA 構造体へのポインター。
CompletionContext フィルター完了コールバック ルーチンに渡されるコンテキスト情報。 コンテキスト情報を渡さない場合、または対応するフィルター完了コールバック ルーチンがない場合は NULL に 設定します。

FS_FILTER_COMPLETION_CALLBACK フィルター完了コールバック ルーチンとそのパラメーターは、次のように定義されます。


typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    IN NTSTATUS OperationStatus,
    IN PVOID CompletionContext
);

パラメーター 意味
データ この操作の FS_FILTER_CALLBACK_DATA 構造体へのポインター。
OperationStatus 操作の状態。 ファイル システムが操作を正常に実行した場合、このパラメーターは STATUS_SUCCESS に設定されます。 それ以外の場合は、適切なエラー状態値に設定されます。
CompletionContext フィルター コールバック ルーチンで設定されたコンテキスト情報。 これは、情報が渡されない場合、または対応するフィルター コールバック ルーチンがない場合は NULL に 設定されます。

コールバック ルーチンは、次の操作に対して定義されます。

操作 通知コールバック ルーチン
メモリ マネージャーは、ファイルの一部のメモリ マップされたセクションを作成する前に、ファイルを排他的に取得します。 この操作では、 SyncTypeSyncTypeCreateSection に設定されます。 PreAcquireForSectionSynchronization、PostAcquireForSectionSynchronization
メモリ マネージャーは、ファイルの一部のメモリ マップされたセクションを作成した後、ファイルを解放します。 PreReleaseForSectionSynchronization、PostReleaseForSectionSynchronization
カーネル コンポーネント (キャッシュ マネージャーなど) は、ファイルの一部のセクション作成を一時的に無効にする前に、ファイルを排他的に取得します。 この操作では、 SyncType は SyncTypeOther に設定されます。 PreAcquireForSectionSynchronization、PostAcquireForSectionSynchronization。 PreAcquireForSectionSynchronization は、この操作の成功状態コード (STATUS_SUCCESSなど) を常に返す必要があります。
カーネル コンポーネント (キャッシュ マネージャーなど) は、ファイルの一部のセクション作成を一時的に無効にした後、ファイルを解放します。 PreReleaseForSectionSynchronization、PostReleaseForSectionSynchronization
キャッシュ マネージャーは、ファイルの一部をキャッシュからフラッシュする前に、排他的にファイルを取得します。 PreAcquireForCcFlush、PostAcquireForCcFlush
キャッシュ マネージャーは、ファイルの一部をキャッシュからフラッシュした後、ファイルを解放します。 PreReleaseForCcFlush、PostReleaseForCcFlush
変更されたページ ライターは、ファイルの一部をディスクに書き込む前に、ファイルを排他的に取得します。 PreAcquireForModifiedPageWriter、PostAcquireForModifiedPageWriter
変更されたページ ライターは、ファイルの一部をディスクに書き込んだ後、ファイルを解放します。 PreReleaseForModifiedPageWriter、PostReleaseForModifiedPageWriter
コンポーネントは、ファイルを開かずにファイル情報を名前で照会します。 このクエリではリダイレクターは呼び出されないため、PreQueryOpen または PostQueryOpen コールバックを実装する必要はありません。 PreQueryOpen、PostQueryOpen

フィルター通知コールバック ルーチンは、操作要求が下位レベルのフィルター ドライバーと基になるファイル システムに渡される前に呼び出されます。 コールバック ルーチンでは、フィルター ドライバーは必要な処理を実行し、すぐにSTATUS_SUCCESSを返す必要があります。 フィルター ドライバーのコールバック ルーチンがSTATUS_SUCCESS以外の状態値を返す場合、操作要求は失敗します。 ロック要求などの特定の要求が繰り返し失敗すると、システムの進行状況が停止する可能性があります。 したがって、フィルター ドライバーは、絶対に必要な場合にのみ、このような要求を失敗させる必要があります。 これらの要求に失敗した場合、フィルター ドライバーは、エラーを可能な限り完全かつ正確に説明するエラー状態の値を返す必要があります。

注意

フィルター ドライバーの通知コールバック ルーチンは、ファイル システム リソースを解放する要求を失敗させることはできません。 フィルター ドライバーが次のいずれかの通知コールバック ルーチンからSTATUS_SUCCESS以外の状態値を返す場合、状態値は無視されます。

  • PreReleaseForSectionSynchronization
  • PreReleaseForCcFlush
  • PreReleaseForModifiedPageWriter

フィルター完了コールバック ルーチンは、操作要求が下位レベルのフィルター ドライバーと基になるファイル システムに渡された後に呼び出されます。 完了コールバック ルーチンでは、フィルター ドライバーは必要な処理を実行し、すぐに戻る必要があります。

要件

要件
Header ntifs.h

こちらもご覧ください

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks