Driver-Managed Antrean IRP

Kecuali untuk driver sistem file, manajer I/O mengaitkan objek antrean perangkat (untuk mengantre IRP) dengan setiap objek perangkat yang dibuat driver.

Sebagian besar driver perangkat memanggil rutinitas dukungan manajer I/O untuk menggunakan antrean perangkat terkait, yang menyimpan RUNPS setiap kali permintaan I/O perangkat untuk objek perangkat target masuk lebih cepat daripada driver dapat memprosesnya hingga selesai. Dengan teknik ini, IRP diantrekan ke rutinitas StartIo yang disediakan pengemudi.

Untuk performa yang baik, sebagian besar driver perantara hanya meneruskan IRP ke driver yang lebih rendah secepat mereka masuk, sehingga driver perantara hampir tidak pernah menggunakan antrean perangkat yang terkait dengan objek perangkat masing-masing.

Namun, Anda dapat merancang driver untuk mengelola antrean internal IRP dengan secara eksplisit menyiapkan satu atau beberapa antrean perangkat, antrean yang saling mengunci, atau membatalkan antrean yang aman. Pendekatan ini dapat sangat berguna jika driver mengontrol perangkat yang tumpang tindih dengan operasi I/O. Untuk perangkat seperti itu, mungkin sulit untuk mengelola pemrosesan bersamaan dari dua IRP atau lebih untuk objek perangkat target yang sama hanya menggunakan satu antrean.

Cara paling sederhana untuk membangun antrean internal adalah dengan menggunakan kerangka kerja antrean IRP yang batal aman. Anda dapat menerapkan mekanisme antrean pilihan Anda di driver Anda. Anda kemudian dapat menggunakan IoCsqInitialize untuk mendaftarkan serangkaian rutinitas panggilan balik yang menangani penyisipan dan penghapusan IRP, serta mengunci dan membuka kunci antrean Anda. Kerangka kerja antrean IRP batal-aman menyediakan rutinitas IoCsqInsertIrp, IoCsqRemoveIrp, dan IoCsqRemoveNextIrp yang secara otomatis menggunakan rutinitas panggilan balik untuk menyisipkan dan menghapus IRP dengan aman dari antrean driver. Sistem ini juga menggunakan rutinitas panggilan balik Anda untuk menghapus runtime integrasi yang dibatalkan dengan aman.

Anda juga dapat memilih untuk mengatur antrean tambahan untuk IRP di driver pengontrol perangkat untuk satu set perangkat fisik heterogen. Misalnya, driver port SCSI menggunakan objek antrean perangkat untuk antrean internal. Driver ini keduanya memiliki rutinitas StartIo dan mengatur objek antrean perangkat sebagai antrean tambahan, selain antrean perangkat yang terkait dengan objek perangkat yang dibuatnya untuk mewakili HBA. Driver port SCSI menggunakan antrean perangkat tambahannya untuk menahan RUNPS yang terikat untuk unit logis tertentu pada bus SCSI yang dikontrol HBA.

Driver pengontrol floppy sistem adalah contoh driver yang tidak memiliki rutinitas StartIo dan menggunakan antrean yang saling mengunci. Driver ini menyiapkan antrean yang saling ditautkan dua kali ke tempat dan dari mana driver dan utas khusus perangkat menyisipkan dan menghapus RUNPS.

Kernel menentukan jenis objek antrean perangkat. Komponen dukungan eksekutif menyediakan rutinitas untuk menyisipkan dan menghapus RUNPS dalam antrean yang saling diblokir. Driver untuk Windows XP dan versi Windows yang lebih baru dapat menggunakan antrean IRP batal-aman untuk menangani antrean IRP.

Bagian berikut menjelaskan cara menggunakan antrean perangkat, antrean yang saling diblokir, dan antrean batal aman:

Menyiapkan dan Menggunakan Antrean Perangkat

Mengelola Antrean Perangkat

Menyiapkan dan Menggunakan Antrean Yang Saling Diblokir

Mengelola Antrean Yang Saling Diblokir dengan Utas Driver-Created

Antrean IRP Batal Aman