Bagikan melalui


Fungsi FltNotifyFilterChangeDirectory (fltkernel.h)

Rutinitas FltNotifyFilterChangeDirectory membuat struktur pemberitahuan untuk operasi IRP_MN_NOTIFY_CHANGE_DIRECTORY dan menambahkannya ke daftar pemberitahuan yang ditentukan.

Sintaks

VOID FLTAPI FltNotifyFilterChangeDirectory(
  [in, out]      PNOTIFY_SYNC               NotifySync,
  [in, out]      PLIST_ENTRY                NotifyList,
  [in]           PVOID                      FsContext,
  [in]           PSTRING                    FullDirectoryName,
  [in]           BOOLEAN                    WatchTree,
  [in]           BOOLEAN                    IgnoreBuffer,
  [in]           ULONG                      CompletionFilter,
  [in]           PFLT_CALLBACK_DATA         NotifyCallbackData,
  [in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
  [in, optional] PSECURITY_SUBJECT_CONTEXT  SubjectContext,
  [in, optional] PFILTER_REPORT_CHANGE      FilterCallback
);

Parameter

[in, out] NotifySync

Penunjuk ke objek sinkronisasi buram untuk direktori perubahan memberi tahu daftar yang dituju parameter NotifyList .

[in, out] 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 pemanggil untuk mengidentifikasi struktur pemberitahuan yang akan dibuat. Jika rutinitas panggilan balik disediakan dalam parameter TraverseCallback , 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.

[in] WatchTree

Atur ke TRUE jika semua subdirektori direktori yang ditentukan oleh parameter FullDirectoryName juga harus diawasi. Atur ke FALSE jika hanya direktori itu sendiri yang akan diawasi.

[in] IgnoreBuffer

Atur ke TRUE untuk mengabaikan buffer pengguna apa pun dan memaksa direktori untuk dihidung ulang. Tindakan ini mempercepat operasi.

[in] CompletionFilter

Bitmask bendera yang menentukan jenis perubahan pada file atau direktori yang seharusnya menyebabkan struktur data panggilan balik dalam daftar pemberitahuan selesai. Nilai bendera yang mungkin dijelaskan dalam tabel berikut.

Bendera Makna
FILE_NOTIFY_CHANGE_FILE_NAME File telah ditambahkan, dihapus, atau diganti namanya dalam direktori ini.
FILE_NOTIFY_CHANGE_DIR_NAME Subdirektori telah dibuat, dihapus, atau diganti namanya.
FILE_NOTIFY_CHANGE_NAME Nama direktori ini telah berubah.
FILE_NOTIFY_CHANGE_ATTRIBUTES Nilai atribut file ini, seperti waktu akses terakhir, telah berubah.
FILE_NOTIFY_CHANGE_SIZE Ukuran file ini telah berubah.
FILE_NOTIFY_CHANGE_LAST_WRITE Waktu modifikasi terakhir file ini telah berubah.
FILE_NOTIFY_CHANGE_LAST_ACCESS Waktu akses terakhir file ini telah berubah.
FILE_NOTIFY_CHANGE_CREATION Waktu pembuatan file ini telah berubah.
FILE_NOTIFY_CHANGE_EA Atribut yang diperluas file ini telah dimodifikasi.
FILE_NOTIFY_CHANGE_SECURITY Informasi keamanan file ini telah berubah.
FILE_NOTIFY_CHANGE_STREAM_NAME Aliran file telah ditambahkan, dihapus, atau diganti namanya dalam direktori ini.
FILE_NOTIFY_CHANGE_STREAM_SIZE Ukuran aliran file ini telah berubah.
FILE_NOTIFY_CHANGE_STREAM_WRITE Data aliran file ini telah berubah.

[in] NotifyCallbackData

Penunjuk ke struktur data panggilan balik agar operasi ditambahkan ke daftar pemberitahuan. Parameter ini diperlukan dan tidak boleh NULL.

[in, optional] TraverseCallback

Penunjuk opsional ke rutinitas panggilan balik untuk dipanggil ketika perubahan terjadi pada subdirektori yang sedang diawasi di pohon direktori. Penunjuk 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 TargetContext dari rutinitas FsRtlNotifyFullReportChange .

[in, optional] SubjectContext

Penunjuk ke struktur konteks yang akan diteruskan ke TraverseCallback. FltNotifyFilterChangeDirectory merilis konteks dan membebaskan struktur setelah menggunakannya. 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 operasi 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

Driver minifilter dapat memanggil FltNotifyFilterChangeDirectory dari rutinitas panggilan balik praoperasi (PFLT_PRE_OPERATION_CALLBACK) yang terdaftar untuk memproses pemberitahuan perubahan operasi direktori. Operasi ini memiliki kode fungsi utama IRP_MJ_DIRECTORY_CONTROL dan kode fungsi kecil IRP_MN_NOTIFY_CHANGE_DIRECTORY.

Driver minifilter memanggil FltNotifyFilterChangeDirectory untuk membuat struktur pemberitahuan untuk menahan struktur data panggilan balik untuk operasi dan menambahkan struktur pemberitahuan ke daftar pemberitahuan untuk volume saat ini.

FltNotifyFilterChangeDirectory melakukan hal berikut:

  • Memeriksa apakah objek file operasi telah dibersihkan. Jika demikian, FltNotifyFilterChangeDirectory menyelesaikan operasi dengan status STATUS_NOTIFY_CLEANUP dan tidak menambahkannya ke daftar pemberitahuan.
  • Jika objek file operasi belum dibersihkan, FltNotifyFilterChangeDirectory 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 melaporkan, FltNotifyFilterChangeDirectory menyelesaikan struktur data panggilan balik yang ditunjukkan oleh parameter NotifyCallbackData . Jika struktur pemberitahuan ditemukan, tetapi tidak ada perubahan yang tertunda untuk dilaporkan, FltNotifyFilterChangeDirectory menambahkan operasi ke struktur pemberitahuan. Jika tidak ada struktur pemberitahuan seperti itu yang ditemukan, FltNotifyFilterChangeDirectory membuat struktur pemberitahuan untuk operasi dan menyisipkannya ke dalam daftar.
Ketika perubahan terjadi pada direktori, sistem file memanggil FsRtlNotifyFilterReportChange untuk menyelesaikan operasi IRP_MN_NOTIFY_CHANGE_DIRECTORY yang tertunda dalam daftar pemberitahuan.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header fltkernel.h (termasuk Fltkernel.h)
Pustaka FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Lihat juga

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK