Bagikan melalui


Perbedaan Antara WDM dan WDF

Model WDM terkait erat dengan sistem operasi. Driver berinteraksi langsung dengan sistem operasi dengan memanggil rutinitas layanan sistem dan memanipulasi struktur sistem operasi. Karena driver WDM adalah komponen mode kernel tepercaya, sistem memberikan pemeriksaan terbatas pada input driver.

Sebagai perbandingan, model Windows Driver Frameworks (WDF) berfokus pada persyaratan driver, dan pustaka kerangka kerja menangani sebagian besar interaksi dengan sistem.

Kerangka kerja mencegat permintaan I/O, mengambil tindakan default jika sesuai, dan memanggil panggilan balik driver sesuai kebutuhan. Model WDF berbasis objek dan digerakkan oleh peristiwa. Objek mewakili elemen driver umum, seperti perangkat, kunci, atau antrean. Driver Framework Kernel-Mode (KMDF) atau User-Mode (UMDF) berisi titik masuk (DriverEntry), fungsi panggilan balik terkait peristiwa yang diperlukan untuk melayani perangkat dan mendukung I/O, dan fungsi utilitas internal tambahan yang diperlukan untuk implementasi.

Bagian ini menjelaskan perbedaan penting antara WDM dan WDF di area berikut:

Struktur Driver

Driver WDM dan WDF berisi rutin DriverEntry, sejumlah rutin yang dipanggil untuk menangani permintaan I/O tertentu, dan berbagai rutin dukungan.

Dalam driver WDM, rutinitas pemetaan I/O terkait dengan kode IRP mayor tertentu. Rutinitas pengiriman menerima IRP dari manajer I/O, memparse-nya, dan meresponsnya.

Dalam driver WDF, framework mendaftarkan rutinitas pengirimannya sendiri, yang menerima IRP dari manajer I/O, mengurainya, dan kemudian memanggil fungsi callback peristiwa driver untuk menanganinya. Fungsi panggilan balik peristiwa biasanya melakukan tugas yang lebih spesifik daripada rutinitas pengiriman I/O umum driver WDM.

Driver WDF umum untuk perangkat Plug and Play berisi:

  • Sebuah rutinitas DriverEntry.
  • RutinitasEvtDriverDeviceAdd, yang secara fungsional mirip dengan rutinitas WDM AddDevice.
  • Satu atau beberapa antrean I/O.
  • Satu atau beberapa fungsi panggilan balik peristiwa I/O, yang mirip dengan fungsi I/O driver WDM DispatchXxx rutinitas.
  • Panggilan balik untuk menangani perubahan Plug and Play dan peristiwa daya yang didukung oleh driver.
  • Panggilan balik untuk menangani permintaan WMI yang didukung driver. (Khusus KMDF)
  • Panggilan balik tambahan yang sesuai untuk pembersihan objek, pembuatan berkas, target I/O, dan sebagainya.

Objek Perangkat dan Peran Driver

Baik driver WDM maupun WDF membuat satu atau lebih objek perangkat. Setiap objek perangkat mewakili peran driver yang merupakan target permintaan I/O. Objek perangkat fisik (PDO) mewakili driver bus, objek perangkat fungsi (FDO) mewakili driver fungsi, dan objek perangkat filter (filter DO) mewakili driver filter.

Dalam driver WDM, peran driver ini implisit, sehingga driver harus melacak peran mana yang diwakili setiap objek perangkat dan merespons IRP dengan tepat.

Namun, driver WDF menunjukkan secara eksplisit apakah objek perangkat mewakili PDO (khusus KMDF), FDO, atau filter DO dan mendaftarkan panggilan balik peristiwa yang khusus untuk peran tersebut. Misalnya, PDO adalah target kueri persyaratan sumber daya dan permintaan ejeksi perangkat , sedangkan FDO dan DO filter tidak menangani permintaan tersebut.

Driver WDF mengonfigurasi setiap objek perangkat untuk menerima jenis permintaan I/O tertentu. Kerangka kerja memanggil driver untuk hanya menangani permintaan I/O tersebut dan melakukan tindakan default untuk semua permintaan lainnya. Jika objek perangkat mewakili driver filter, kerangka kerja meneruskan semua permintaan lain ke driver yang lebih rendah berikutnya. Jika objek perangkat mewakili bus atau driver fungsi, kerangka kerja gagal semua jenis permintaan lainnya.

Untuk permintaan Plug and Play serta daya, kerangka kerja memanggil driver KMDF atau UMDF hanya untuk permintaan yang tepat bagi setiap objek perangkat, dan pada saat yang tepat. Misalnya, FDO harus menanggapi permintaan tertentu setelah PDO dasar sudah merespons. Dalam driver WDM, FDO harus mengatur rutinitas penyelesaian I/O, melewati IRP ke bawah tumpukan, dan memprosesnya setelah driver yang lebih rendah. Driver WDF hanya mengimplementasikan rutinitas panggilan balik yang sesuai, dan kerangka kerja memanggilnya setelah driver yang lebih rendah selesai diproses.

Untuk informasi tentang cara membuat objek perangkat kerangka kerja, lihat Membuat Objek Perangkat Kerangka Kerja.

Beberapa driver juga menangani permintaan I/O tertentu yang independen dari Plug and Play. Driver WDM membuat DEVICE_OBJECT sebagai target untuk permintaan tersebut, tetapi tidak melampirkannya ke tumpukan perangkat Plug and Play. Untuk mencapai hasil yang sama, driver KMDF membuat objek perangkat kontrol. Beberapa driver berbasis kerangka kerja menggunakan objek perangkat kontrol untuk menerapkan mekanisme I/O "sideband" sehingga mereka dapat menerima jenis permintaan I/O tertentu terlepas dari status perangkat.

Model Objek

WDF mendukung model objek koheren di mana objek tidak transparan bagi driver, menyediakan area konteks yang dapat dikonfigurasi driver, dan direferensikan menggunakan handle. Objek WDM adalah objek di seluruh sistem yang dapat diakses oleh driver dan dirujuk oleh pointer. Driver yang merusak objek WDM dapat merusak seluruh sistem. Merusak objek WDF tidak hanya lebih sulit—karena kerangka kerja memvalidasi data yang disediakan driver—tetapi juga menyebabkan masalah di seluruh sistem jauh lebih jarang.

Untuk informasi tentang konvensi penamaan untuk objek KMDF, lihat Arsitektur WDF.

Kerangka kerja mempertahankan jumlah referensi untuk setiap objek, yang dengan demikian memberikan beberapa kontrol atas masa pakainya. Untuk informasi lebih lanjut, lihat Siklus Hidup Objek Kerangka .

Meskipun banyak objek WDF sesuai dengan objek WDM, objek WDF mendukung fitur yang akan memerlukan kode tambahan dalam driver WDM. Semua objek WDF mendukung area konteks objek yang dapat ditentukan driver sehingga driver dapat menyimpan informasi yang terkait dengan instans objek tertentu dengan objek itu sendiri. Objek biasanya melacak status juga. Misalnya, objek WDFQUEUE lebih dari sekadar daftar permintaan I/O; mereka mendukung beberapa jenis pengiriman, sinkronisasi otomatis dengan Plug and Play, dan meminta pembatalan. Untuk objek WDFMEMORY, referensi yang dikelola oleh kerangka kerja membantu mencegah kebocoran memori dan pelepasan sumber daya yang terlalu dini.

Pembuatan Objek

Driver WDF mengikuti pola reguler untuk membuat semua jenis objek:

  1. Inisialisasi struktur konfigurasi untuk objek, jika ada.
  2. Secara opsional menginisialisasi struktur atribut untuk objek.
  3. Panggil metode untuk membuat objek.

Struktur konfigurasi dan struktur atribut menyediakan informasi dasar tentang objek dan cara driver menggunakannya. Semua jenis objek menggunakan WDF_OBJECT_ATTRIBUTES sebagai struktur atribut, tetapi struktur konfigurasi untuk setiap jenis objek berbeda dan beberapa objek tidak memilikinya. Misalnya, ada struktur WDF_DRIVER_CONFIG tetapi bukan struktur WDF_DEVICE_CONFIG.

Struktur konfigurasi menyimpan penunjuk ke informasi khusus objek, seperti fungsi panggilan balik peristiwa driver untuk objek. Driver mengisi struktur ini dan kemudian meneruskannya ke kerangka kerja ketika memanggil metode pembuatan objek. Misalnya, panggilan ke WdfDriverCreate menyertakan penunjuk ke struktur WDF_DRIVER_CONFIG yang berisi penunjuk ke fungsi panggilan balik EvtDriverDeviceAdd driver.

Kerangka kerja menentukan fungsi yang diberi nama WDF_Object_CONFIG_INIT untuk menginisialisasi struktur konfigurasi, di mana Object mewakili nama jenis objek. Fungsi WDF_OBJECT_ATTRIBUTES_INIT menginisialisasi struktur WDF_OBJECT_ATTRIBUTES dari driver.

Area Konteks dari Objek

Setiap instans objek dapat memiliki satu atau beberapa area konteks objek. Area konteks objek adalah area penyimpanan untuk data yang terkait dengan instans tertentu, seperti objek peristiwa yang dialokasikan oleh driver. Ukuran dan tata letak area konteks objek ditentukan oleh driver. Untuk objek perangkat, area konteks objek setara dengan ekstensi perangkat WDM. Untuk informasi tentang menentukan dan menginisialisasi area konteks, lihat Framework Object Context Space.

Jenis IRP yang Didukung

WDF mendukung subset IRP Windows. Untuk ringkasan jenis IRP WDM utama dan fungsi callback acara WDF yang sesuai, lihat IRP WDM dan Fungsi Callback Acara WDF.

Bahkan jika driver Anda menerima IRP selain yang tercantum dalam tabel, Anda dapat memindahkannya ke KMDF. KMDF menyediakan mekanisme yang memungkinkan driver menerima IRP WDM "mentah" tetapi juga menggunakan fitur KMDF untuk jenis IRP lainnya. Untuk informasi selengkapnya, lihat Menangani IRP WDM di luar kerangka kerja.

Antrean I/O

Para pengemudi hampir semua mengantri permintaan I/O. Driver WDM biasanya menggunakan salah satu pendekatan berikut:

  • Terapkan fungsiStartIodan panggil IoStartPacket dan IoStartNextPacket untuk menggunakan antrean perangkat sistem untuk permintaan I/O.
  • Gunakan IoCsqXxx atau fungsi manajemen daftar lainnya untuk menerapkan antrean I/O internal mereka sendiri.
  • Gunakan fungsi KeXxxDeviceQueue untuk menginisialisasi dan mengelola antrean yang dilindungi oleh spin lock.

Driver WDF membuat objek antrean WDF (WDFQUEUE) untuk mewakili antrean I/O. Objek antrean WDF mirip dengan antrean yang aman dari pembatalan tetapi menyediakan fitur tambahan.

Ketika Anda memindahkan driver WDM ke WDF, Anda dapat menggunakan mekanisme antrean WDF terlepas dari mekanisme yang digunakan driver WDM. Untuk informasi selengkapnya tentang antrean, lihat Objek Antrean dalam Kerangka Kerja .

Sinkronisasi dan Konkurensi

Driver WDF mendapat manfaat dari beberapa dukungan sinkronisasi bawaan yang tidak tersedia untuk driver WDM. Meskipun dukungan ini tidak berarti bahwa driver dapat mengabaikan konkurensi dan akses sinkron ke data, driver WDF tetap memerlukan kunci yang jauh lebih sedikit dan kode sinkronisasi yang lebih sedikit daripada driver WDM.

Untuk informasi selengkapnya tentang fitur sinkronisasi yang disediakan kerangka kerja, lihat Teknik Sinkronisasi .

Penginstalan Driver

Seperti driver WDM, driver KMDF dan UMDF diinstal dengan menggunakan file INF. Namun, penginstalan driver WDF terkadang memerlukan pendamping penginstalan framework yang disediakan dengan Windows Driver Kit (WDK). Penginstal bersama memastikan bahwa versi pustaka kerangka kerja yang kompatibel ada pada sistem target. Untuk informasi tentang penginstalan, lihat Menyusun dan Memuat Driver WDF.