Fungsi IoCsqInsertIrp (wdm.h)
Rutinitas IoCsqInsertIrp menyisipkan IRP dalam antrean IRP yang aman untuk pembatalan pengemudi.
Sintaks
void IoCsqInsertIrp(
[in, out] PIO_CSQ Csq,
[in, out] PIRP Irp,
[out, optional] PIO_CSQ_IRP_CONTEXT Context
);
Parameter
[in, out] Csq
Arahkan ke struktur IO_CSQ untuk antrean IRP pembatalan aman driver. Struktur ini harus diinisialisasi oleh IoCsqInitialize atau IoCsqInitializeEx.
[in, out] Irp
Arahkan ke IRP yang akan diantrekan.
[out, optional] Context
Arahkan ke struktur IO_CSQ_IRP_CONTEXT . IoCsqInsertIrp menginisialisasi struktur ini dengan informasi konteks untuk IRP yang disisipkan. Driver meneruskan nilai ini ke IoCsqRemoveIrp untuk menghapus IRP dari antrean. Konteks dapat berupa NULL jika driver tidak akan menggunakan IoCsqRemoveIrp untuk menghapus IRP ini dari antrean.
Nilai kembali
Tidak ada
Keterangan
IoCsqInsertIrp menggunakan rutinitas pengiriman antrean untuk menyisipkan IRP. Rutinitas IoCsqInsertIrp :
- Memanggil rutinitas CsqAcquireLock antrean untuk mengunci antrean.
- Memanggil rutinitas CsqInsertIrp antrean untuk menyisipkan IRP.
- Menandai IRP sebagai tertunda.
- Memanggil rutinitas CsqReleaseLock antrean untuk membuka kunci antrean.
Driver juga dapat menggunakan IoCsqInsertIrpEx untuk memasukkan IRP ke dalam antrean. Untuk antrean yang ditentukan oleh IoCsqInitializeEx, IoCsqInsertIrpEx menyediakan kemampuan tambahan. Untuk informasi selengkapnya, lihat Antrean IRP Batal-Aman.
Perhatikan bahwa rutinitas IoCsqXxx menggunakan anggota DriverContext[3] dari IRP untuk menyimpan informasi konteks IRP. Driver yang menggunakan rutinitas ini untuk mengantre runtime integrasi harus membiarkan anggota tersebut tidak digunakan.
Penelepon IoCsqInsertIrp harus berjalan di IRQL <= DISPATCH_LEVEL. Rutinitas panggilan balik driver harus bekerja dengan benar di IRQL tersebut.