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 操作の通知構造を作成し、一覧に挿入します。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
ライブラリ | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |