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
FS_FILTER_CALLBACK PostReleaseForSectionSynchronization ルーチンへのポインター。
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
フィルター完了コールバック ルーチンは、操作要求が下位レベルのフィルター ドライバーと基になるファイル システムに渡された後に呼び出されます。 完了コールバック ルーチンでは、フィルター ドライバーが必要な処理を実行し、すぐに戻る必要があります。
必要条件
要件 | 価値 |
---|---|
ヘッダー | ntifs.h |