Bagikan melalui


Fungsi FltCbdqInsertIo (fltkernel.h)

FltCbdqInsertIo menyisipkan struktur data panggilan balik untuk operasi I/O ke dalam antrean data panggilan balik driver filter.

Sintaks

NTSTATUS FLTAPI FltCbdqInsertIo(
  [in, out]      PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]           PFLT_CALLBACK_DATA                  Cbd,
  [in, optional] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
  [in, optional] PVOID                               InsertContext
);

Parameter

[in, out] Cbdq

Arahkan ke antrean data panggilan balik batal-aman penelepon. Antrean ini harus telah diinisialisasi dengan memanggil FltCbdqInitialize.

[in] Cbd

Arahkan ke struktur data panggilan balik (FLT_CALLBACK_DATA) agar operasi I/O diantrekan. Operasi harus merupakan operasi I/O berbasis IRP.

[in, optional] Context

Variabel yang disediakan penelepon yang menerima penunjuk konteks buram untuk permintaan I/O. Driver filter dapat menggunakan pointer ini untuk mengidentifikasi item tertentu dalam antrean sehingga dapat dihapus dengan memanggil FltCbdqRemoveIo. Jika driver filter tidak diperlukan untuk menghapus permintaan I/O tertentu dari antrean, parameter ini bisa null.

[in, optional] InsertContext

Penunjuk konteks yang akan diteruskan ke rutinitas panggilan balik CbdqInsertIo driver filter.

Nilai kembali

FltCbdqInsertIo mengembalikan STATUS_SUCCESS ketika struktur data panggilan balik dimasukkan ke dalam antrean data panggilan balik, atau nilai NTSTATUS yang sesuai seperti berikut ini:

Menampilkan kode Deskripsi
STATUS_FLT_CBDQ_DISABLED Struktur data panggilan balik tidak dimasukkan ke dalam antrean data panggilan balik karena antrean saat ini dinonaktifkan. Untuk mengaktifkan kembali antrean, panggil FltCbdqEnable. Ini adalah kode kesalahan.

Catatan

Dalam kasus keberhasilan, FltCbdqInsertIo mengembalikan apa pun yang dikembalikan panggilan balik InsertIo filter; misalnya, filter mungkin mengembalikan STATUS_SUCCESS atau STATUS_PENDING untuk menunjukkan keberhasilan. Penting bahwa filter konsisten sendiri pada nilai mana pun yang digunakannya untuk menunjukkan keberhasilan.

Keterangan

FltCbdqInsertIo menyisipkan struktur data panggilan balik yang ditentukan (FLT_CALLBACK_DATA) ke dalam antrean data panggilan balik driver filter.

  • Perhatikan bahwa ada potensi kondisi balapan antara driver filter yang menyisipkan data panggilan balik, dan IRP terkait dibatalkan. Ini dapat dihindari dengan segera memanggil rutinitas pembatalan antrean jika IRP telah dibatalkan.

Driver filter dapat menggunakan rutinitas FltCbdqXxx untuk menerapkan antrean data panggilan balik untuk operasi I/O berbasis IRP. Dengan menggunakan rutinitas ini, driver filter dapat membuat antrean mereka batal aman; sistem secara transparan menangani pembatalan I/O untuk driver filter.

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 dengan memanggil FltCbdqInitialize. FltCbdqInsertIo menggunakan fungsi yang disediakan dalam tabel pengiriman antrean untuk mengunci antrean dan memasukkan struktur data panggilan balik ke dalam antrean. Operasi penyisipan itu sendiri dilakukan oleh rutinitas CbdqInsertIo antrean.

Lihat FltCbdqInitialize untuk detail tentang cara membuat antrean data panggilan balik. Gunakan FltCbdqRemoveIo untuk menghapus permintaan I/O tertentu dari antrean, atau FltCbdqRemoveNextIo untuk menghapus permintaan I/O berikutnya yang tersedia.

Jika antrean dilindungi oleh kunci spin daripada objek mutex atau variabel sumber daya, pemanggil FltCbdqInsertIo dapat berjalan di IRQL <= DISPATCH_LEVEL. Jika mutex atau sumber daya digunakan, pemanggil harus berjalan di IRQL <= APC_LEVEL.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header fltkernel.h (termasuk Fltkernel.h)
IRQL Lihat bagian Keterangan.

Lihat juga

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqRemoveIo

FltCbdqRemoveNextIo