次の方法で共有


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 操作の通知構造を作成し、一覧に挿入します。
ディレクトリが変更されると、ファイル システムは FsRtlNotifyFilterReportChange 呼び出して、通知リストの保留中のIRP_MN_NOTIFY_CHANGE_DIRECTORY操作を完了します。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

関連項目

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK