struktur FLT_CALLBACK_DATA (fltkernel.h)
Struktur FLT_CALLBACK_DATA mewakili operasi I/O. Filter Manager dan minifilter menggunakan struktur ini untuk memulai dan memproses operasi I/O.
Sintaks
typedef struct _FLT_CALLBACK_DATA {
FLT_CALLBACK_DATA_FLAGS Flags;
PETHREAD Thread;
PFLT_IO_PARAMETER_BLOCK Iopb;
IO_STATUS_BLOCK IoStatus;
struct _FLT_TAG_DATA_BUFFER *TagData;
union {
struct {
LIST_ENTRY QueueLinks;
PVOID QueueContext[2];
};
PVOID FilterContext[4];
};
KPROCESSOR_MODE RequestorMode;
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;
Anggota
Flags
Bitmask bendera yang menjelaskan operasi I/O.
Minifilter dapat mengatur bendera berikut.
Bendera | Makna |
---|---|
FLTFL_CALLBACK_DATA_DIRTY | Minifilter mengatur bendera ini (dengan memanggil FltSetCallbackDataDirty) untuk menunjukkan bahwa ia telah memodifikasi konten struktur data panggilan balik. (Untuk informasi selengkapnya, lihat bagian Keterangan berikut.) |
Catatan
Hanya Manajer Filter yang dapat mengatur bendera berikut.
Saat Manajer Filter menginisialisasi struktur data panggilan balik, Manajer Filter menetapkan salah satu bendera berikut untuk menentukan jenis operasi I/O yang diwakili struktur data panggilan balik.
Bendera | Makna |
---|---|
FLTFL_CALLBACK_DATA_FAST_IO_OPERATION | Struktur data panggilan balik mewakili operasi I/O yang cepat. |
FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION | Struktur data panggilan balik mewakili operasi panggilan balik minifilter sistem file. |
FLTFL_CALLBACK_DATA_IRP_OPERATION | Struktur data panggilan balik mewakili operasi berbasis paket permintaan I/O (IRP). |
Catatan
Hanya Manajer Filter yang dapat mengatur bendera berikut.
Saat Manajer Filter menginisialisasi struktur data panggilan balik, Manajer Filter juga dapat mengatur bendera berikut.
Bendera | Makna |
---|---|
FLTFL_CALLBACK_DATA_GENERATED_IO | Struktur data panggilan balik mewakili operasi I/O yang dihasilkan oleh minifilter. Bendera ini hanya berlaku untuk operasi berbasis IRP. |
FLTFL_CALLBACK_DATA_REISSUED_IO | Struktur data panggilan balik mewakili operasi I/O yang sedang diterbitkan kembali oleh minifilter. (Untuk menghasilkan kembali operasi I/O, minifilter memanggil FltReissueSynchronousIo.) Bendera ini hanya berlaku untuk operasi berbasis IRP. |
FLTFL_CALLBACK_DATA_SYSTEM_BUFFER | Buffer untuk operasi I/O dialokasikan dari kumpulan yang tidak disebarkan. Bendera ini dapat diatur untuk semua jenis operasi I/O. Minifilter tidak boleh mengatur bendera ini. |
Catatan
Hanya Manajer Filter yang dapat mengatur bendera berikut.
Saat Manajer Filter melakukan pemrosesan penyelesaian untuk operasi I/O yang diwakili oleh struktur data panggilan balik, ia mengatur salah satu atau kedua bendera berikut.
Bendera | Makna |
---|---|
FLTFL_CALLBACK_DATA_DRAINING_IO | Manajer Filter mengatur bendera ini untuk menunjukkan bahwa saat ini sedang menguras simpul penyelesaian untuk operasi I/O. Bendera ini hanya berlaku selama penyelesaian I/O. |
FLTFL_CALLBACK_DATA_POST_OPERATION | Manajer Filter mengatur bendera ini untuk menunjukkan bahwa saat ini sedang memanggil rutinitas panggilan balik pasca-operasi terdaftar (PFLT_POST_OPERATION_CALLBACK) untuk operasi. Bendera ini hanya berlaku selama penyelesaian I/O. |
Thread
Arahkan ke utas yang memulai operasi I/O. Bidang ini mungkin NULL.
Iopb
Penunjuk ke struktur FLT_IO_PARAMETER_BLOCK yang berisi parameter untuk operasi I/O.
IoStatus
Struktur IO_STATUS_BLOCK yang berisi status dan informasi untuk operasi I/O. Minifilter dapat memodifikasi konten struktur ini hanya dalam rutinitas panggilan balik pra-operasi (PFLT_PRE_OPERATION_CALLBACK) dari mana ia akan kembali FLT_PREOP_COMPLETE atau dalam rutinitas panggilan balik pasca-operasi (PFLT_POST_OPERATION_CALLBACK) dari mana ia akan kembali FLT_POSTOP_FINISHED_PROCESSING. Jika tidak, konten struktur ini biasanya diatur oleh Manajer Filter.
TagData
Arahkan ke struktur FLT_TAG_DATA_BUFFER yang berisi data titik pemilah ulang untuk operasi I/O. Penunjuk ini hanya valid di jalur pasca-buat. Dengan demikian hanya rutinitas panggilan balik pasca-operasi minifilter yang dapat mengubah nilai anggota ini. Rutinitas panggilan balik pasca-buat minifilter dapat mengubah anggota ini untuk menunjuk ke struktur FLT_TAG_DATA_BUFFER yang berbeda. Namun, jika mengubah anggota untuk menunjuk ke struktur yang berbeda, pertama-tama harus memanggil ExFreePool untuk membebaskan struktur yang ada untuk mencegah kebocoran memori kumpulan.
QueueLinks
Tautan antrean yang dapat digunakan minifilter saat antrean data panggilan balik Manajer Filter digunakan untuk menunggu operasi I/O.
QueueContext[2]
Array penunjuk informasi konteks yang dapat digunakan minifilter saat antrean Manajer Filter digunakan untuk menunggu operasi I/O.
FilterContext[4]
Array penunjuk informasi konteks yang dapat digunakan minifilter saat antrean selain antrean Manajer Filter digunakan untuk menunggu operasi I/O.
RequestorMode
Menunjukkan mode eksekusi proses yang memulai operasi I/O, baik KernelMode atau UserMode.
Keterangan
Minifilter mendaftarkan rutinitas panggilan balik pra-operasi (PFLT_PRE_OPERATION_CALLBACK) dan pasca-operasi (PFLT_POST_OPERATION_CALLBACK) untuk satu atau beberapa jenis operasi I/O. Ketika Manajer Filter memanggil salah satu rutinitas panggilan balik ini, Manajer Filter meneruskan struktur data panggilan balik (FLT_CALLBACK_DATA) sebagai parameter pertama. Struktur ini mewakili operasi I/O.
Rutinitas panggilan balik pra-operasi atau pasca-operasi minifilter dapat memodifikasi konten struktur data panggilan balik, kecuali untuk anggota Thread dan RequestorMode . Jika ya, maka harus memanggil FltSetCallbackDataDirty, kecuali jika juga telah memodifikasi konten anggota IoStatus . Jika tidak, nilai yang dimodifikasi diabaikan.
Minifilter dapat memulai operasi I/O dengan memanggil rutinitas dukungan seperti FltReadFile atau dengan memanggil FltAllocateCallbackData untuk mengalokasikan struktur data panggilan balik; menginisialisasi parameter I/O struktur, dan meneruskan struktur ke FltPerformSynchronousIo atau FltPerformAsynchronousIo.
Operasi I/O yang dimulai minifilter hanya dikirim ke instans minifilter yang terpasang di bawah instans panggilan, dan ke sistem file. Minifilter yang terpasang di atas instans yang ditentukan tidak menerima operasi I/O.
Minifilter hanya dapat memulai operasi I/O berbasis IRP. Mereka tidak dapat memulai operasi panggilan balik I/O atau filter sistem file (FSFilter) yang cepat.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | fltkernel.h (termasuk Fltkernel.h) |