Konsep WDM untuk Driver WDF

Windows Driver Frameworks (WDF) adalah pembungkus di sekitar antarmuka Microsoft Windows Driver Model (WDM). Meskipun kerangka kerja menyederhanakan banyak konsep WDM dan menyembunyikan orang lain sepenuhnya sehingga Anda tidak perlu bekerja dengan mereka, Anda masih harus memahami beberapa konsep dasar driver WDM. Secara khusus, Anda harus memahami jenis driver, tumpukan driver, tumpukan perangkat, dan paket permintaan I/O.

Jenis driver

Driver berbasis Windows dibagi menjadi tiga jenis: driver bus, driver fungsi, dan driver filter. Pengemudi bus mendukung bus I/O dengan mendeteksi perangkat anak yang dicolokkan ke bus induk dan melaporkan karakteristiknya. (Aktivitas ini disebut enumerasi bus.) Driver fungsi mengontrol operasi I/O untuk perangkat dan bus. Driver filter menerima, meninjau, dan mungkin memodifikasi data yang mengalir antara aplikasi pengguna dan driver, atau antara driver individual.

Pengemudi untuk bus pada dasarnya adalah pengemudi fungsi yang juga menghitung anak-anak. Pengemudi bertindak sebagai "sopir bus" ketika menghitung perangkat anak di bus. Jika tidak, driver yang sama bertindak sebagai "driver fungsi" untuk bus ketika menangani operasi I/O yang mengakses perangkat keras adaptor bus.

Pengemudi User-Mode Driver Framework (UMDF) tidak boleh menjadi sopir bus.

Tumpukan driver

Dalam sistem operasi Windows, driver WDM berlapis dalam urutan panggilan vertikal yang disebut tumpukan driver. Driver paling atas di tumpukan biasanya menerima permintaan I/O dari aplikasi pengguna, setelah permintaan melewati manajer I/O sistem operasi. Lapisan driver yang lebih rendah biasanya berkomunikasi dengan perangkat keras komputer.

Tumpukan driver sederhana mencakup sopir bus di bagian bawah tumpukan, yang menangani operasi I/O khusus bus dan menghitung perangkat anak yang terhubung ke sana. Biasanya, satu atau beberapa driver fungsi khusus perangkat berada di atas sopir bus. Driver fungsi ini menangani operasi I/O ke perangkat yang terhubung ke bus. Driver filter dapat berada di atas driver fungsi, atau mereka dapat berada di antara pengemudi bus dan driver fungsi. Sistem yang sedang berjalan memiliki beberapa tumpukan driver yang mendukung berbagai jenis perangkat.

Tumpukan perangkat

Setiap tumpukan driver mendukung satu atau beberapa tumpukan perangkat. Tumpukan perangkat adalah sekumpulan objek perangkat yang dibuat dari struktur DEVICE_OBJECT yang ditentukan WDM. Setiap tumpukan perangkat mewakili satu perangkat. Setiap driver membuat objek perangkat untuk setiap perangkatnya dan melampirkan setiap objek perangkat ke tumpukan perangkat. Tumpukan perangkat dibuat dan dihapus saat perangkat dicolokkan dan dicabut, dan setiap kali sistem di-boot ulang.

Ketika driver bus mendeteksi bahwa perangkat anak telah dicolokkan atau dilepas, itu menginformasikan manajer Plug and Play (PnP). Sebagai tanggapan, manajer PnP meminta pengemudi bus untuk membuat objek perangkat fisik (PDO) untuk setiap perangkat anak yang terhubung ke perangkat induk (yaitu, bus). PDO menjadi bagian bawah tumpukan perangkat.

Selanjutnya, manajer PnP memuat fungsi dan driver filter untuk mendukung setiap perangkat (jika belum dimuat), dan kemudian manajer PnP memanggil driver ini sehingga masing-masing dapat membuat objek perangkat dan menambahkannya ke bagian atas tumpukan perangkat. Driver fungsi membuat objek perangkat fungsian (FDO), dan driver filter membuat objek perangkat filter (filter DO).

Ketika manajer I/O mengirim permintaan I/O ke driver perangkat, ia meneruskan permintaan ke driver yang membuat objek perangkat paling atas di tumpukan perangkat. Jika driver tersebut meminta manajer I/O untuk meneruskan permintaan ke driver yang lebih rendah berikutnya, manajer I/O menggunakan tumpukan perangkat untuk menentukan driver berikutnya yang lebih rendah. (Driver berikutnya yang lebih rendah adalah driver yang membuat objek perangkat berikutnya yang lebih rendah.)

WDF membuat objek perangkat kerangka kerja untuk setiap objek perangkat WDM. Driver berbasis kerangka kerja mengakses objek perangkat kerangka kerja ini alih-alih objek perangkat WDM.

Paket permintaan I/O

Manajer I/O mengirimkan permintaan I/O aplikasi ke driver dengan membuat paket permintaan I/O (IRP). IRP dapat berisi permintaan untuk melakukan operasi I/O (seperti operasi baca/tulis) atau permintaan untuk melakukan tindakan kontrol I/O (IOCTL) (seperti mengembalikan status). Selain itu, manajer PnP membuat runtime integrasi yang mewakili PnP dan operasi manajemen daya yang harus dilakukan driver, dan mengirimkan RUNP ini ke driver.

Biasanya, manajer I/O membuat IRP baca atau tulis saat aplikasi pengguna meminta operasi baca atau tulis. Manajer I/O meneruskan IRP ke driver di bagian atas tumpukan driver, dan driver tersebut melayani permintaan atau meneruskan permintaan ke driver berikutnya yang lebih rendah. Beberapa permintaan berjalan ke bagian bawah tumpukan, dan beberapa sepenuhnya diproses oleh driver tingkat yang lebih tinggi.

Setiap kali driver menerima IRP, driver juga menerima pointer ke objek perangkat yang mewakili perangkat yang harus menangani operasi. Oleh karena itu, driver dalam tumpukan driver menggunakan objek perangkat untuk menentukan perangkat mana yang dicolokkan ke permintaan tertentu.

Driver WDF biasanya tidak langsung mengakses IRP. Kerangka kerja mengonversi RUN WDM yang mewakili operasi kontrol I/O baca, tulis, dan perangkat menjadi objek permintaan kerangka kerja yang Kernel-Mode Driver Framework (KMDF) dan driver UMDF yang diterima dalam antrean I/O. Kerangka kerja menangani PnP dan runtime integrasi manajemen daya secara internal dan menggunakan fungsi panggilan balik peristiwa untuk memberi tahu driver peristiwa PnP dan daya.