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.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Header | fltkernel.h (termasuk Fltkernel.h) |
Pustaka | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |