Fungsi FsRtlNotifyFilterChangeDirectory (ntifs.h)
FsRtlNotifyFilterChangeDirectory membuat struktur pemberitahuan untuk permintaan IRP_MN_NOTIFY_CHANGE_DIRECTORY dan menambahkannya ke daftar pemberitahuan yang ditentukan.
Sintaks
void FsRtlNotifyFilterChangeDirectory(
[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, optional] PFILTER_REPORT_CHANGE FilterCallback
);
Parameter
[in] NotifySync
Penunjuk ke objek sinkronisasi buram untuk daftar pemberitahuan direktori perubahan yang diarahkan oleh parameter NotifyList .
[in] NotifyList
Penunjuk ke kepala direktori perubahan memberi tahu daftar untuk volume saat ini. Setiap elemen dalam daftar adalah struktur pemberitahuan buram.
[in] FsContext
Arahkan 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 dihidung ulang. Tindakan ini mempercepat operasi. Diabaikan jika NotifyIrp adalah NULL.
[in] CompletionFilter
Bitmask bendera yang menentukan jenis perubahan pada file atau direktori yang harus menyebabkan RUNPS dalam daftar pemberitahuan 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 ditambahkan ke daftar pemberitahuan. Jika NotifyIrp adalah NULL, ini berarti bahwa aliran file yang diwakili oleh objek file (diidentifikasi oleh parameter FsContext ) 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. FsRtlNotifyFilterChangeDirectory merilis konteks dan membebaskan struktur setelah menggunakannya. Parameter ini diabaikan jika NotifyIrp adalah NULL. Jika rutinitas TraverseCallback disediakan, SubjectContext diteruskan sebagai parameter SubjectContext ke rutinitas tersebut.
[in, optional] FilterCallback
Penunjuk opsional ke rutinitas panggilan balik untuk dipanggil ketika perubahan terjadi pada direktori. Jika rutinitas panggilan balik ini mengembalikan TRUE, FsRtlNotifyFilterReportChange menyelesaikan permintaan IRP_MN_NOTIFY_CHANGE_DIRECTORY yang tertunda dalam daftar pemberitahuan; jika tidak, itu tidak. Rutinitas yang disediakan penelepon seperti itu dinyatakan sebagai berikut:
BOOLEAN
(*PFILTER_REPORT_CHANGE) (
IN PVOID NotifyContext, // FsContext
IN PVOID FilterContext // Context pointer
);
Mengembalikan nilai
Tidak ada
Keterangan
FsRtlNotifyFilterChangeDirectory dipanggil oleh sistem file yang telah menerima IRP dengan kode fungsi utama IRP_MJ_DIRECTORY_CONTROL, kode fungsi minor IRP_MN_NOTIFY_CHANGE_DIRECTORY.
Sistem file memanggil FsRtlNotifyFilterChangeDirectory untuk membuat struktur pemberitahuan untuk menahan IRP dan menambahkan struktur pemberitahuan ke daftar pemberitahuan untuk volume saat ini.
Jika NotifyIrp adalah NULL, FsRtlNotifyFilterChangeDirectory memeriksa apakah daftar pemberitahuan sudah berisi RUNP yang tertunda yang objek filenya cocok dengan nilai FsContext yang diberikan dan, jika demikian, menyelesaikan RUNPS dengan STATUS_DELETE_PENDING.
Jika NotifyIrp bukan NULL, FsRtlNotifyFilterChangeDirectory melakukan hal berikut:
Memeriksa apakah objek file IRP telah menjalani pembersihan. Jika demikian, FsRtlNotifyFilterChangeDirectory menyelesaikan IRP dengan status STATUS_NOTIFY_CLEANUP dan tidak menambahkannya ke daftar pemberitahuan.
Jika objek file IRP belum menjalani pembersihan, FsRtlNotifyFilterChangeDirectory memeriksa apakah daftar pemberitahuan sudah berisi struktur pemberitahuan untuk nilai FsContext yang diberikan. Jika struktur pemberitahuan seperti itu ditemukan, dan ada perubahan yang tertunda untuk dilaporkan, FsRtlNotifyFilterChangeDirectory menyelesaikan NotifyIrp. Jika struktur pemberitahuan ditemukan, tetapi tidak ada perubahan yang tertunda untuk dilaporkan, FsRtlNotifyFilterChangeDirectory menandai IRP yang diarahkan oleh NotifyIrp sebagai tertunda dan menyisipkannya ke dalam daftar IRP pemberitahuan dalam struktur pemberitahuan. Jika tidak ada struktur pemberitahuan seperti itu yang ditemukan, FsRtlNotifyFilterChangeDirectory menandai IRP yang ditunjukkan oleh NotifyIrp sebagai tertunda, membuat struktur pemberitahuan, dan menyisipkannya ke dalam daftar pemberitahuan.
Ketika perubahan terjadi pada direktori, sistem file memanggil FsRtlNotifyFilterReportChange untuk menyelesaikan permintaan IRP_MN_NOTIFY_CHANGE_DIRECTORY yang tertunda dalam daftar pemberitahuan.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Rollup Pembaruan Windows 2000 SP4; Windows XP |
Target Platform | Universal |
Header | ntifs.h (termasuk Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < APC_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk