Fungsi FltCbdqRemoveIo (fltkernel.h)
FltCbdqRemoveIo menghapus item tertentu dari antrean data panggilan balik driver minifilter.
Sintaks
PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveIo(
[in, out] PFLT_CALLBACK_DATA_QUEUE Cbdq,
[in] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);
Parameter
[in, out] Cbdq
Arahkan ke antrean data panggilan balik yang aman untuk dibatalkan. Antrean ini harus telah diinisialisasi dengan memanggil FltCbdqInitialize.
[in] Context
Penunjuk konteks untuk item yang akan dihapus. Konteks ini diinisialisasi oleh FltCbdqInsertIo ketika permintaan I/O pertama kali dimasukkan dalam antrean. Parameter ini diperlukan dan harus non-NULL.
Nilai kembali
FltCbdqRemoveIo mengembalikan pointer ke struktur data panggilan balik untuk permintaan I/O yang dihapus dari antrean. Jika tidak ada permintaan I/O yang cocok yang ditemukan atau jika antrean kosong, FltCbdqRemoveIo mengembalikan NULL.
Keterangan
FltCbdqRemoveIo menghapus struktur data panggilan balik (FLT_CALLBACK_DATA) untuk operasi I/O tertentu dari antrean data panggilan balik driver minifilter. FltCbdqRemoveIo hanya dapat digunakan untuk menghapus struktur data panggilan balik yang memiliki struktur Konteks yang terkait dengannya. Asosiasi ini dibuat ketika struktur data panggilan balik dimasukkan ke dalam antrean data panggilan balik oleh FltCbdqInsertIo.
Driver minifilter dapat menggunakan rutinitas FltCbdqXxx untuk menerapkan antrean data panggilan balik untuk operasi I/O berbasis IRP. Dengan menggunakan rutinitas ini, pengemudi minifilter dapat membuat antrean mereka batal aman; sistem secara transparan menangani pembatalan I/O untuk driver minifilter.
Rutinitas FltCbdqXxx hanya dapat digunakan untuk operasi I/O berbasis IRP. Untuk menentukan apakah struktur data panggilan balik tertentu mewakili operasi I/O berbasis IRP, gunakan makro FLT_IS_IRP_OPERATION .
Antrean data panggilan balik diinisialisasi oleh FltCbdqInitialize. FltCbdqRemoveIo menggunakan rutinitas yang disediakan dalam tabel pengiriman antrean untuk mengunci antrean dan menghapus struktur data panggilan balik dari antrean. Operasi penghapusan itu sendiri dilakukan oleh rutinitas panggilan balik CbdqRemoveIo driver minifilter.
Jika antrean dilindungi oleh kunci putaran daripada objek mutex atau variabel sumber daya, pemanggil FltCbdqRemoveIo dapat berjalan di IRQL <= DISPATCH_LEVEL. Jika mutex atau sumber daya digunakan, pemanggil harus berjalan di IRQL <= APC_LEVEL.
Ada potensi perlombaan antara manajer filter yang menghapus permintaan I/O yang dibatalkan, dan driver filter menghapusnya karena selesai. Penting untuk dicatat bahwa konteks permintaan tetap valid setelah pertama kali dihapus, yang akan menyebabkan upaya penghapusan kedua gagal.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Header | fltkernel.h (termasuk Fltkernel.h) |
IRQL | Lihat bagian Keterangan. |