FltNotifyFilterChangeDirectory 関数 (fltkernel.h)
FltNotifyFilterChangeDirectory ルーチンは、IRP_MN_NOTIFY_CHANGE_DIRECTORY操作の通知構造体を作成し、指定された通知リストに追加します。
構文
VOID FLTAPI FltNotifyFilterChangeDirectory(
[in, out] PNOTIFY_SYNC NotifySync,
[in, out] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in] PFLT_CALLBACK_DATA NotifyCallbackData,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext,
[in, optional] PFILTER_REPORT_CHANGE FilterCallback
);
パラメーター
[in, out] NotifySync
NotifyList パラメーターが指す変更ディレクトリ通知リストの不透明な同期オブジェクトへのポインター。
[in, out] NotifyList
現在のボリュームの変更ディレクトリ通知リストの先頭へのポインター。 リスト内の各要素は、不透明な通知構造体です。
[in] FsContext
作成する通知構造を識別するために呼び出し元によって割り当てられた一意の値へのポインター。 コールバック ルーチンが TraverseCallback パラメーターで指定された場合、 FsContext はそのルーチンに NotifyContext パラメーターとして渡されます。
[in] FullDirectoryName
この通知構造体に関連付けられているディレクトリの完全な名前を含む ANSI または Unicode 文字列へのポインター。
[in] WatchTree
FullDirectoryName パラメーターで指定されたディレクトリのすべてのサブディレクトリも監視する必要がある場合は、TRUE に設定します。 ディレクトリ自体のみを監視する場合は FALSE に設定します。
[in] IgnoreBuffer
ユーザー バッファーを無視し、ディレクトリを強制的に再び再開するには、 TRUE に設定します。 このアクションにより、操作の速度が向上します。
[in] CompletionFilter
通知リスト内のコールバック データ構造が完了する原因となるファイルまたはディレクトリに対する変更の種類を指定するフラグのビットマスク。 使用可能なフラグ値については、次の表で説明します。
フラグ | 説明 |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME | このディレクトリにファイルが追加、削除、または名前変更されました。 |
FILE_NOTIFY_CHANGE_DIR_NAME | サブディレクトリが作成、削除、または名前変更されました。 |
FILE_NOTIFY_CHANGE_NAME | このディレクトリの名前が変更されました。 |
FILE_NOTIFY_CHANGE_ATTRIBUTES | このファイルの属性の値 (最終アクセス時刻など) が変更されました。 |
FILE_NOTIFY_CHANGE_SIZE | このファイルのサイズが変更されました。 |
FILE_NOTIFY_CHANGE_LAST_WRITE | このファイルの最終変更時刻が変更されました。 |
FILE_NOTIFY_CHANGE_LAST_ACCESS | このファイルの最後のアクセス時刻が変更されました。 |
FILE_NOTIFY_CHANGE_CREATION | このファイルの作成時間が変更されました。 |
FILE_NOTIFY_CHANGE_EA | このファイルの拡張属性が変更されました。 |
FILE_NOTIFY_CHANGE_SECURITY | このファイルのセキュリティ情報が変更されました。 |
FILE_NOTIFY_CHANGE_STREAM_NAME | このディレクトリにファイル ストリームが追加、削除、または名前変更されました。 |
FILE_NOTIFY_CHANGE_STREAM_SIZE | このファイル ストリームのサイズが変更されました。 |
FILE_NOTIFY_CHANGE_STREAM_WRITE | このファイル ストリームのデータが変更されました。 |
[in] NotifyCallbackData
通知リストに追加する操作のコールバック データ構造へのポインター。 このパラメーターは必須であり、 NULL にすることはできません。
[in, optional] TraverseCallback
ディレクトリ ツリーで監視されているサブディレクトリで変更が発生したときに呼び出されるコールバック ルーチンへのオプションのポインター。 このポインターを使用すると、ウォッチャーがそのディレクトリへの走査アクセス権を持っているかどうかをファイル システムがチェックできます。 このような呼び出し元から提供されるルーチンは、次のように宣言されます。
NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
IN PVOID NotifyContext, // FsContext
IN PVOID TargetContext, // Context pointer
IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
);
TargetContext パラメーターの詳細については、FsRtlNotifyFullReportChange ルーチンの TargetContext パラメーターを参照してください。
[in, optional] SubjectContext
TraverseCallback に渡されるコンテキスト構造へのポインター。 FltNotifyFilterChangeDirectory は コンテキストを解放し、使用後に構造体を解放します。 TraverseCallback ルーチンが指定されている場合、SubjectContext はそのルーチンに SubjectContext パラメーターとして渡されます。
[in, optional] FilterCallback
ディレクトリに変更が発生したときに呼び出されるコールバック ルーチンへの省略可能なポインター。 このコールバック ルーチンから TRUE が返された場合、 FsRtlNotifyFilterReportChange は通知リストの保留中のIRP_MN_NOTIFY_CHANGE_DIRECTORY操作を完了します。それ以外の場合は、行われません。 このような呼び出し元から提供されるルーチンは、次のように宣言されます。
BOOLEAN
(*PFILTER_REPORT_CHANGE) (
IN PVOID NotifyContext, // FsContext
IN PVOID FilterContext // Context pointer
);
戻り値
なし
解説
ミニフィルター ドライバーは、通知の変更ディレクトリ操作を処理するために登録した事前操作コールバック ルーチン (PFLT_PRE_OPERATION_CALLBACK) から FltNotifyFilterChangeDirectory を呼び出すことができます。 これらの操作には、IRP_MJ_DIRECTORY_CONTROLの主要な関数コードと、 IRP_MN_NOTIFY_CHANGE_DIRECTORY のマイナー関数コードがあります。
ミニフィルター ドライバーは 、FltNotifyFilterChangeDirectory を呼び出して、操作のコールバック データ構造を保持し、現在のボリュームの通知リストに通知構造体を追加する通知構造体を作成します。
FltNotifyFilterChangeDirectory は次の処理を行います。
- 操作のファイル オブジェクトがクリーンアップされているかどうかを確認します。 その場合、 FltNotifyFilterChangeDirectory は状態STATUS_NOTIFY_CLEANUPで操作を完了し、通知リストに追加しません。
- 操作のファイル オブジェクトがクリーンアップされていない場合、 FltNotifyFilterChangeDirectory は、通知リストに指定された FsContext 値の通知構造体が既に含まれているかどうかを確認します。 このような通知構造体が見つかり、レポートに保留中の変更がある場合、 FltNotifyFilterChangeDirectory はNotifyCallbackData パラメーターが指すコールバック データ構造を完了します。 通知構造体が見つかったが、レポートに保留中の変更がない場合、 FltNotifyFilterChangeDirectory は 通知構造体に操作を追加します。 このような通知構造が見つからない場合、 FltNotifyFilterChangeDirectory は 操作の通知構造体を作成し、リストに挿入します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | fltkernel.h (Fltkernel.h を含む) |
Library | FltMgr.lib |
[DLL] | Fltmgr.sys |
IRQL | <= APC_LEVEL |