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 に 設定されます。 |
コールバック ルーチンは、次の操作に対して定義されます。
操作 | 通知コールバック ルーチン |
---|---|
メモリ マネージャーは、ファイルの一部のメモリ マップされたセクションを作成する前に、ファイルを排他的に取得します。 この操作では、 SyncType は SyncTypeCreateSection に設定されます。 | 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 |