Fungsi FsRtlNotifyFullChangeDirectory (ntifs.h)
Rutinitas FsRtlNotifyFullChangeDirectory membuat struktur pemberitahuan untuk permintaan pemberitahuan dan menambahkannya ke daftar pemberitahuan yang ditentukan.
Sintaks
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
);
Parameter
[in] NotifySync
Penunjuk ke objek sinkronisasi buram untuk daftar pemberitahuan untuk volume saat ini.
[in] NotifyList
Penunjuk ke kepala daftar notifikasi. Setiap elemen dalam daftar adalah struktur pemberitahuan buram.
[in] FsContext
Penunjuk ke nilai unik yang ditetapkan oleh sistem file untuk mengidentifikasi struktur pemberitahuan yang akan dibuat sebagai milik objek file tertentu. Jika rutinitas TraverseCallback disediakan, FsContext diteruskan sebagai parameter NotifyContext ke rutinitas tersebut.
[in] FullDirectoryName
Penunjuk ke string ANSI atau Unicode yang berisi nama lengkap untuk direktori yang terkait dengan struktur pemberitahuan ini. Diabaikan jika NotifyIrp ADALAH NULL.
[in] WatchTree
Atur ke TRUE jika semua subdirektori direktori ini juga harus diawasi. Atur ke FALSE jika hanya direktori itu sendiri yang akan diawasi. Diabaikan jika NotifyIrp ADALAH NULL.
[in] IgnoreBuffer
Atur ke TRUE untuk mengabaikan buffer pengguna apa pun dan memaksa direktori untuk dihitung ulang. Tindakan ini mempercepat operasi. Diabaikan jika NotifyIrp ADALAH NULL.
[in] CompletionFilter
Bitmask bendera yang menentukan jenis perubahan pada file atau subdirektori yang harus menyebabkan antrean runtime integrasi yang tertunda selesai. Tabel berikut ini menjelaskan kemungkinan nilai bendera.
Bendera | Makna |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) | File telah ditambahkan, dihapus, atau diganti namanya dalam direktori ini. |
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) | Subdirektori telah dibuat, dihapus, atau diganti namanya. |
FILE_NOTIFY_CHANGE_NAME (0x0003) | Nama direktori ini telah berubah. |
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) | Nilai atribut file ini, seperti waktu akses terakhir, telah berubah. |
FILE_NOTIFY_CHANGE_SIZE (0x0008) | Ukuran file ini telah berubah. |
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) | Waktu modifikasi terakhir file ini telah berubah. |
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) | Waktu akses terakhir file ini telah berubah. |
FILE_NOTIFY_CHANGE_CREATION (0x0040) | Waktu pembuatan file ini telah berubah. |
FILE_NOTIFY_CHANGE_EA (0x0080) | Atribut yang diperluas file ini telah dimodifikasi. |
FILE_NOTIFY_CHANGE_SECURITY (0x0100) | Informasi keamanan file ini telah berubah. |
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) | Aliran file telah ditambahkan, dihapus, atau diganti namanya dalam direktori ini. |
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) | Ukuran aliran file ini telah berubah. |
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) | Data aliran file ini telah berubah. |
CompletionFilter diabaikan jika NotifyIrp adalah NULL.
[in, optional] NotifyIrp
Penunjuk ke IRP untuk diselesaikan saat memberi tahu perubahan. Jika NotifyIrp ADALAH NULL, ini berarti bahwa aliran file yang diwakili oleh objek file ini sedang dihapus.
[in, optional] TraverseCallback
Penunjuk opsional ke rutinitas panggilan balik untuk dipanggil ketika perubahan terjadi pada subdirektori yang sedang diawasi di pohon direktori. Ini memungkinkan sistem file memeriksa apakah pengamat memiliki akses melintasi ke direktori tersebut. Rutinitas yang disediakan penelepon seperti itu dinyatakan sebagai berikut:
NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
IN PVOID NotifyContext, // FsContext
IN PVOID TargetContext, // Context pointer
IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
);
Untuk informasi selengkapnya tentang parameter TargetContext , lihat parameter TargetContextFsRtlNotifyFullReportChange. TraverseCallback diabaikan jika NotifyIrp ADALAH NULL.
[in, optional] SubjectContext
Penunjuk ke struktur SECURITY_SUBJECT_CONTEXT untuk diteruskan ke TraverseCallback. FsRtlNotifyFullChangeDirectory merilis konteks dan membebaskan struktur setelah menggunakannya. Diabaikan jika NotifyIrp ADALAH NULL. Jika rutinitas TraverseCallback disediakan, SubjectContext diteruskan sebagai parameter SubjectContext ke rutinitas tersebut.
Mengembalikan nilai
Tidak ada
Keterangan
FsRtlNotifyFullChangeDirectory dipanggil oleh sistem file yang telah menerima permintaan perubahan pemberitahuan. Permintaan ini diterima sebagai IRP dengan kode fungsi utama IRP_MJ_DIRECTORY_CONTROL, kode fungsi kecil IRP_MN_NOTIFY_CHANGE_DIRECTORY.
Jika NotifyIrp NULL, FsRtlNotifyFullChangeDirectory memeriksa apakah daftar pemberitahuan berisi IRP tertunda yang mengacu pada objek file ini dan, jika demikian, menyelesaikannya dengan STATUS_DELETE_PENDING.
Jika NotifyIrp bukan NULL, FsRtlNotifyFullChangeDirectory melakukan hal berikut:
Memeriksa apakah objek file telah menjalani pembersihan. Jika demikian, FsRtlNotifyFullChangeDirectory menyelesaikan pemberitahuan IRP dengan status STATUS_NOTIFY_CLEANUP.
Jika objek file belum menjalani pembersihan, FsRtlNotifyFullChangeDirectory memeriksa apakah daftar pemberitahuan untuk volume ini sudah berisi struktur pemberitahuan untuk perubahan ini. Jika demikian, FsRtlNotifyFullChangeDirectory menyelesaikan runtime integrasi yang tertunda. Jika tidak, FsRtlNotifyFullChangeDirectory menandai IRP sebagai tertunda, membuat struktur pemberitahuan, dan menyisipkannya ke dalam daftar.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Header | ntifs.h (termasuk Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |