Bagikan melalui


Jenis DPC mana yang Harus Anda Gunakan?

Tergantung pada desain driver, ia dapat memiliki salah satu hal berikut:

  • Satu DpcForIsr untuk menyelesaikan semua operasi I/O berbasis interupsi

  • Sekumpulan rutinitas CustomDpc atau lebih.

  • Baik DpcForIsr maupun serangkaian rutinitas CustomDpc khusus operasi

Apakah driver memiliki satu rutinitas DpcForIsr , serangkaian rutinitas CustomDpc , atau keduanya, tergantung pada sifat perangkat yang mendasarnya dan set permintaan I/O yang harus didukungnya.

Sebagian besar driver perangkat tingkat terendah memiliki satu rutinitas DpcForIsr untuk menyelesaikan pemrosesan I/O untuk setiap IRP yang memerlukan satu atau beberapa operasi pada perangkat masing-masing. Menggunakan satu DpcForIsr untuk menyelesaikan operasi I/O per permintaan yang berbasis interupsi pada perangkat yang melakukan satu operasi pada satu waktu relatif mudah. ISR driver seperti itu hanya perlu memanggil IoRequestDpc untuk setiap operasi I/O berbasis interupsi.

Beberapa driver tingkat terendah memiliki rutinitas CustomDpc kecuali perangkat mereka memerlukan lebih dari satu DPC untuk menyelesaikan serangkaian operasi I/O berbasis interupsi yang bervariasi.

Menggunakan sebuah DpcForIsr tunggal untuk menyelesaikan operasi I/O yang tumpang tindih dan yang dipicu oleh interupsi pada perangkat yang dapat melakukan operasi secara bersamaan adalah mungkin dengan desain yang cermat, tetapi dapat menjadi relatif sulit. Selain atau alih-alih mengantre DpcForIsr, ISR dapat mengantre sekumpulan rutinitas CustomDpc khusus pengoperasian yang disediakan driver dengan memanggil KeInsertQueueDpc.

Misalnya, pertimbangkan beberapa tantangan desain yang terlibat dalam penulisan driver serial. Sebagai pengendali perangkat dupleks penuh, penggerak serial tidak dapat mengandalkan adanya korespondensi satu-ke-satu antara urutan di mana IRP ditempatkan dalam antrean ke rutinitas StartIo dan urutan interupsi dari perangkatnya dalam sistem multitugas dan multiprosesor. Selain itu, driver seri harus menangani permintaan yang kedaluwarsa dan permintaan yang dihasilkan pengguna secara asinkron untuk membatalkan operasi yang diminta sebelumnya, untuk membersihkan data yang ter-buffer, dan sebagainya.

Akibatnya, driver serial mungkin mempertahankan antrean internal untuk operasi baca, tulis, pembersihan, dan tunggu yang dapat diminta oleh aplikasi port COM dalam mode pengguna. Ini juga dapat mempertahankan jumlah referensi atau menggunakan beberapa mekanisme pelacakan lain, seperti sekumpulan indikator, untuk IRP dalam antrean di dalamnya. ISR-nya akan memanggil KeInsertQueueDpc dengan salah satu dari sejumlah objek DPC yang dialokasikan driver dan diinisialisasi, masing-masing terkait dengan rutinitas CustomDpc yang disediakan driver.