Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Peringatan
UMDF 2 adalah versi terbaru dari UMDF dan supersedes UMDF 1. Semua driver UMDF baru harus ditulis menggunakan UMDF 2. Tidak ada fitur baru yang ditambahkan ke UMDF 1 dan ada dukungan terbatas untuk UMDF 1 pada versi Windows 10 yang lebih baru. Driver Universal Windows harus menggunakan UMDF 2.
Sampel UMDF 1 yang diarsipkan dapat ditemukan di Windows 11, versi 22H2 - Pembaruan Sampel Driver Mei 2022.
Untuk informasi selengkapnya, lihat Mulai menggunakan UMDF.
Semua kode driver yang mengakses buffer data interupsi harus disinkronkan sehingga hanya satu rutin mengakses data pada satu waktu.
Anda dapat menyinkronkan kode interupsi dengan menggunakan penguncian interupsi manual atau serialisasi panggilan balik otomatis.
Penguncian Interupsi Manual
UMDF memperoleh kunci interupsi sebelum memanggil panggilan balik OnInterruptIsr, OnInterruptDisable, atau OnInterruptEnable .
Jika driver perlu menyinkronkan kode apa pun menggunakan kunci interupsi, driver memanggil IWDFInterrupt::AcquireInterruptLock dan IWDFInterrupt::ReleaseInterruptLock. Misalnya, driver memperoleh dan merilis kunci interupsi dalam rutinitas panggilan balik OnInterruptWorkItem dengan menggunakan metode ini. Namun, dalam panggilan balik pengiriman I/O (seperti OnRead dan OnWrite), driver pertama-tama memanggil IWDFInterrupt::TryToAcquireInterruptLock untuk memutuskan apakah akan mengantre item kerja atau melakukan pekerjaan di utas yang sama untuk menghindari potensi kebuntuan. Untuk contoh skenario kebuntuan yang dapat disebabkan oleh panggilan IWDFInterrupt::AcquireInterruptLock dari konteks thread sembarang, lihat bagian Keterangan IWDFInterrupt::AcquireInterruptLock.
Jika IWDFInterrupt::TryToAcquireInterruptLock mengembalikan TRUE, driver telah memperoleh kunci interupsi di utas yang sama. Dalam hal ini, driver melakukan pekerjaan yang memerlukan kunci tersebut, lalu memanggil ReleaseInterruptLock. Jika IWDFInterrupt::TryToAcquireInterruptLock mengembalikan FALSE, sebuah driver mengantrekan item kerja dan melakukan tugas dalam panggilan balik OnWorkItem-nya. Dalam hal ini, item kerja tidak boleh menggunakan serialisasi otomatis.
Menggunakan Serialisasi Otomatis
Driver UMDF dapat meminta sinkronisasi panggilan balik otomatis dengan memanggil IWDFDeviceInitialize::SetLockingConstraint dengan parameter LockType yang diatur ke WdfDeviceLevel.
Driver kemudian mengatur anggota AutomaticSerialization dari struktur WUDF_INTERRUPT_CONFIG ke TRUE sebelum memanggil CreateInterrupt.
Akibatnya, UMDF menserialisasikan panggilan balik OnInterruptWorkItem driver dengan antrean I/O, pembatalan permintaan, dan rutinitas panggilan balik objek file. Dalam skenario ini, UMDF menggunakan kunci panggilan balik alih-alih kunci objek per-interupsi.