FsRtlNotifyFullChangeDirectory マクロ (rxprocs.h)
FsRtlNotifyFullChangeDirectory ルーチンは、通知要求の通知構造体を作成し、指定された通知リストに追加します。
構文
void FsRtlNotifyFullChangeDirectory(
A1,
A2,
A3,
A4,
A5,
A6,
A7,
A8,
A9,
A10
);
パラメーター
A1
現在のボリュームの通知リストの不透明な同期オブジェクトへのポインター。
A2
通知リストの先頭へのポインター。 リスト内の各要素は、不透明な通知構造体です。
A3
特定のファイル オブジェクトに属するように作成される通知構造を識別するためにファイル システムによって割り当てられた一意の値へのポインター。 TraverseCallback ルーチンが指定されている場合、FsContext は NotifyContext パラメーターとしてそのルーチンに渡されます。
A4
この通知構造体に関連付けられているディレクトリの完全な名前を含む ANSI または Unicode 文字列へのポインター。 NotifyIrp が NULL の場合は無視されます。
A5
このディレクトリのすべてのサブディレクトリも監視する必要がある場合は 、TRUE に 設定します。 ディレクトリ自体のみを監視する場合は FALSE に設定します。 NotifyIrp が NULL の場合は無視されます。
A6
ユーザー バッファーを無視し、ディレクトリを強制的に再び再開するには、 TRUE に設定します。 このアクションにより、操作の速度が向上します。 NotifyIrp が NULL の場合は無視されます。
A7
保留中の通知 IRP のキューが完了する原因となるファイルまたはサブディレクトリに対する変更の種類を指定するフラグのビットマスク。 使用可能なフラグ値を次に示します。
フラグ | 説明 |
---|---|
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 |
このファイル ストリームのデータが変更されました。 |
NotifyIrp が NULL の場合、CompletionFilter は無視されます。
A8
通知の変更時に完了する IRP へのポインター。 NotifyIrp が NULL の場合は、このファイル オブジェクトによって表されるファイル ストリームが削除されていることを意味します。
A9
ディレクトリ ツリーで監視されているサブディレクトリで変更が発生したときに呼び出されるコールバック ルーチンへのオプションのポインター。 これにより、ファイル システムはウォッチャーがそのディレクトリへの走査アクセス権を持っているかどうかをチェックできます。 このような呼び出し元から提供されるルーチンは、次のように宣言されます。
NTSTATUS (*PCHECK_FOR_TRAVERSE_ACCESS) ( IN PVOID NotifyContext, // FsContext IN PVOID TargetContext, // Context pointer IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext ); |
TargetContext パラメーターの詳細については、FsRtlNotifyFullReportChange の TargetContext パラメーターを参照してください。 NotifyIrp が NULL の場合、TraverseCallback は無視されます。
A10
TraverseCallback に渡されるコンテキスト構造へのポインター。 FsRtlNotifyFullChangeDirectory は コンテキストを解放し、使用後に構造体を解放します。 NotifyIrp が NULL の場合は無視されます。 TraverseCallback ルーチンが指定されている場合、SubjectContext はそのルーチンに SubjectContext パラメーターとして渡されます。
戻り値
なし
解説
FsRtlNotifyFullChangeDirectory は、通知変更要求を受信したファイル システムによって呼び出されます。 この要求は、主要な関数コード IRP_MJ_DIRECTORY_CONTROL、マイナー関数コード IRP_MN_NOTIFY_CHANGE_DIRECTORYを持つ IRP として受信されます。
NotifyIrp が NULL の場合、FsRtlNotifyFullChangeDirectory は、このファイル オブジェクトを参照する保留中の IRP が通知リストに含まれているかどうかを確認し、存在する場合はSTATUS_DELETE_PENDINGで完了します。
NotifyIrp が NULL でない場合、FsRtlNotifyFullChangeDirectory は次の処理を行います。
- ファイル オブジェクトがクリーンアップされたかどうかを確認します。 その場合、 FsRtlNotifyFullChangeDirectory は 状態がSTATUS_NOTIFY_CLEANUPで通知 IRP を完了します。
- ファイル オブジェクトがクリーンアップを行っていない場合、 FsRtlNotifyFullChangeDirectory は、このボリュームの通知リストに、この変更の通知構造が既に含まれているかどうかを確認します。 その場合、 FsRtlNotifyFullChangeDirectory は保留中の IRP を完了します。 それ以外の場合、 FsRtlNotifyFullChangeDirectory は 通知 IRP を保留中としてマークし、通知構造体を作成して一覧に挿入します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | rxprocs.h (Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |