Instans Driver

Windows memungkinkan beberapa instans driver yang dapat diinstal. Sistem membuat instans driver setiap kali driver dibuka dan menghancurkan instans ketika driver ditutup. Instans driver sangat berguna untuk driver yang dapat diinstal yang mendukung beberapa perangkat atau yang dibuka oleh beberapa aplikasi atau oleh aplikasi yang sama beberapa kali.

Untuk membantu driver melacak instans, sistem mengirim handel instans driver dengan setiap pesan driver setelah instans dibuat. Karena handel ini secara unik mengidentifikasi instans, driver yang dapat diinstal sering mengaitkan handel dengan memori dan sumber daya lain yang telah dialokasikan secara khusus untuk instans.

Ketika instans pertama dibuka, sistem mengirimkan pesan DRV_LOAD, DRV_ENABLE, dan DRV_OPEN ke driver dalam urutan tersebut. Pesan DRV_LOAD dan DRV_ENABLE memberi tahu driver bahwa sekarang dalam memori dan diaktifkan untuk operasi. Pesan DRV_OPEN mengidentifikasi handel instans dan dapat menyertakan informasi konfigurasi untuk instans. Pada setiap pembukaan instans berikutnya dari driver yang sama, sistem hanya mengirim pesan DRV_OPEN.

Saat memproses pesan DRV_LOAD, driver biasanya membaca pengaturan konfigurasi dari registri, mengonfigurasi driver dan perangkat keras terkait, dan mengalokasikan memori untuk digunakan oleh semua instans driver. Jika driver tidak dapat menyelesaikan konfigurasi atau mengalokasikan memori, ia mengembalikan nol untuk mengarahkan sistem untuk segera menghapus driver dari memori dan mencegah pesan berikutnya dikirim. Saat memproses pesan DRV_ENABLE, driver menyiapkan perangkat keras untuk menerima dan memproses permintaan input dan output (I/O). Persiapan mungkin termasuk menginstal handler interupsi.

Saat memproses pesan DRV_OPEN, driver mengalokasikan memori atau sumber daya yang diperlukan oleh instans driver tertentu dan kemudian mengembalikan nilai bukan nol. Sistem menggunakan nilai bukan nol ini sebagai pengidentifikasi driver dalam pesan driver berikutnya untuk instans. Driver dapat menggunakan pengidentifikasi ini untuk tujuan apa pun. Misalnya, beberapa driver menggunakan handel memori untuk pengidentifikasi untuk mendapatkan akses cepat ke memori yang berisi informasi tentang instans yang diberikan.

Banyak driver yang dapat diinstal memproses parameter kedua dari pesan DRV_OPEN, memberikan sistem dan aplikasi sarana untuk mengirim informasi tambahan ke driver saat membuka instans. Parameter dapat berupa nilai tunggal atau alamat struktur yang berisi sekumpulan nilai. Saat memproses DRV_OPEN, driver memeriksa parameter untuk menentukan apakah itu nilai dan menggunakan nilai yang diberikan, jika ada, untuk menyelesaikan pembuatan instans.

Sistem mengirim pesan DRV_CLOSE setiap kali instans ditutup. Handel instans yang dikirim dengan pesan mengidentifikasi instans mana yang akan ditutup. Ketika instans terakhir yang tersisa ditutup, sistem mengirimkan pesan DRV_CLOSE, DRV_DISABLE, dan DRV_FREE dalam urutan tersebut. Pesan DRV_CLOSE mengarahkan driver untuk menutup instans, dan pesan DRV_DISABLE dan DRV_FREE memberi tahu driver bahwa sekarang dinonaktifkan dan akan segera dibebaskan dari memori.

Saat memproses pesan DRV_CLOSE, driver biasanya membebaskan memori atau sumber daya apa pun yang dialokasikan untuk instans. Saat memproses pesan DRV_DISABLE, driver menempatkan perangkat keras apa pun dalam keadaan tidak aktif, yang mungkin mencakup penghapusan handler interupsi. Saat memproses pesan DRV_FREE, driver membebaskan memori atau sumber daya apa pun yang masih dialokasikan.

Driver yang dapat diinstal tidak diperlukan untuk mendukung beberapa instans. Driver dapat mencegah instans dibuat dengan mengembalikan nol untuk pesan DRV_OPEN .