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

FsRtlNotifyFilterReportChange

FsRtlNotifyFullChangeDirectory

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT