FsRtlNotifyFullChangeDirectory 関数 (ntifs.h)
FsRtlNotifyFullChangeDirectory ルーチンは、通知要求の通知構造を作成し、指定された通知リストに追加します。
構文
void FsRtlNotifyFullChangeDirectory(
[in] PNOTIFY_SYNC NotifySync,
[in] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in, optional] PIRP NotifyIrp,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext
);
パラメーター
[in] NotifySync
現在のボリュームの通知リストの不透明な同期オブジェクトへのポインター。
[in] NotifyList
通知リストの先頭へのポインター。 リスト内の各要素は不透明な通知構造です。
[in] FsContext
特定のファイル オブジェクトに属するように作成される通知構造を識別するためにファイル システムによって割り当てられた一意の値へのポインター。 TraverseCallback ルーチンが指定されている場合、FsContext はそのルーチンに NotifyContext パラメーターとして渡されます。
[in] FullDirectoryName
この通知構造体に関連付けられているディレクトリの完全な名前を含む ANSI または Unicode 文字列へのポインター。 NotifyIrp が NULL の場合は無視されます。
[in] WatchTree
このディレクトリのすべてのサブディレクトリも監視する必要がある場合は TRUE に設定します。 ディレクトリ自体のみを監視する場合は FALSE に設定します。 NotifyIrp が NULL の場合は無視されます。
[in] IgnoreBuffer
ユーザー バッファーを無視し、ディレクトリを強制的に再び書き込むには、TRUE に設定します。 このアクションにより、操作が高速化されます。 NotifyIrp が NULL の場合は無視されます。
[in] CompletionFilter
保留中の通知 IRP のキューが完了する原因となるファイルまたはサブディレクトリへの変更の種類を指定するフラグのビットマスク。 次の表では、使用可能なフラグ値について説明します。
旗 | 意味 |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) | このディレクトリにファイルが追加、削除、または名前変更されました。 |
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) | サブディレクトリが作成、削除、または名前変更されました。 |
FILE_NOTIFY_CHANGE_NAME (0x0003) | このディレクトリの名前が変更されました。 |
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) | このファイルの属性の値 (最終アクセス時刻など) が変更されました。 |
FILE_NOTIFY_CHANGE_SIZE (0x0008) | このファイルのサイズが変更されました。 |
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) | このファイルの最終変更時刻が変更されました。 |
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) | このファイルの最終アクセス時刻が変更されました。 |
FILE_NOTIFY_CHANGE_CREATION (0x0040) | このファイルの作成時間が変更されました。 |
FILE_NOTIFY_CHANGE_EA (0x0080) | このファイルの拡張属性が変更されました。 |
FILE_NOTIFY_CHANGE_SECURITY (0x0100) | このファイルのセキュリティ情報が変更されました。 |
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) | このディレクトリにファイル ストリームが追加、削除、または名前変更されました。 |
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) | このファイル ストリームのサイズが変更されました。 |
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) | このファイル ストリームのデータが変更されました。 |
NotifyIrp が NULL の場合、CompletionFilter は無視されます。
[in, optional] NotifyIrp
通知の変更時に完了する IRP へのポインター。 NotifyIrp が NULL の場合は、このファイル オブジェクトによって表されるファイル ストリームが削除されていることを意味します。
[in, optional] TraverseCallback
ディレクトリ ツリーで監視されているサブディレクトリで変更が発生したときに呼び出されるコールバック ルーチンへの省略可能なポインター。 これにより、ファイル システムはウォッチャーがそのディレクトリへの走査アクセス権を持っているかどうかを確認できます。 このような呼び出し元から提供されるルーチンは、次のように宣言されます。
NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
IN PVOID NotifyContext, // FsContext
IN PVOID TargetContext, // Context pointer
IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
);
[in, optional] SubjectContext
TraverseCallbackに渡される SECURITY_SUBJECT_CONTEXT 構造体へのポインター。 FsRtlNotifyFullChangeDirectory コンテキストを解放し、使用後に構造体を解放します。 NotifyIrp が NULL の場合は無視されます。 TraverseCallback ルーチンが指定されている場合、SubjectContext はそのルーチンに SubjectContext パラメーターとして渡されます。
戻り値
何一つ
備考
FsRtlNotifyFullChangeDirectory は、通知変更要求を受信したファイル システムによって呼び出されます。 この要求は、主要な関数コード IRP_MJ_DIRECTORY_CONTROL、マイナー関数コード IRP_MN_NOTIFY_CHANGE_DIRECTORYを持つ IRP として受信されます。
NotifyIrp
NotifyIrp が NULL でない場合、FsRtlNotifyFullChangeDirectory は次の処理を行います。
ファイル オブジェクトがクリーンアップを行ったかどうかを確認します。 その場合は、FsRtlNotifyFullChangeDirectory
状態STATUS_NOTIFY_CLEANUPで通知 IRP を完了します。 ファイル オブジェクトがクリーンアップを行っていない場合は、fsRtlNotifyFullChangeDirectory
、このボリュームの通知リストに、この変更の通知構造が既に含まれているかどうかを確認します。 その場合は、FsRtlNotifyFullChangeDirectory 保留中の IRP が完了します。 そうでない場合は、fsRtlNotifyFullChangeDirectory 通知 IRP を保留中としてマークし、通知構造体を作成し、一覧に挿入します。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の |
万国 |
ヘッダー | ntifs.h (Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 を |
HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |