Mengontrol Akses Perangkat di Driver KMDF

Driver harus membantu mencegah pengguna mengakses perangkat dan file komputer secara tidak tepat. Untuk mencegah akses tidak sah ke perangkat dan file, Anda harus:

  • Beri nama objek perangkat hanya jika perlu.

  • Berikan deskriptor keamanan untuk objek dan antarmuka perangkat.

Penamaan Objek Perangkat Hanya Jika Perlu

Seperti kebanyakan driver Windows Driver Model (WDM), driver berbasis kerangka kerja biasanya tidak memberi nama objek perangkat mereka. Aplikasi dapat mengakses perangkat dengan menentukan nama objek perangkat, sehingga setiap nama objek perangkat tambahan mewakili jalur tambahan yang dapat digunakan aplikasi untuk mengakses perangkat.

Untuk mencegah akses tidak sah ke perangkat, setiap driver dapat menentukan pendeskripsi keamanan saat menamai objek perangkat. Namun, nama file yang disediakan sistem operasi untuk driver (lihat WdfFileObjectGetFileName) tidak menyertakan nama objek perangkat yang digunakan aplikasi. Oleh karena itu, jika beberapa driver dalam tumpukan driver Anda memberikan nama untuk objek perangkat mereka, driver Anda tidak dapat menentukan nama objek mana yang digunakan aplikasi untuk membuka perangkat. Akibatnya, aplikasi mungkin membuka perangkat dengan pendeskripsi keamanan yang kurang ketat dari yang diharapkan driver Anda.

Objek perangkat fisik (PDO) harus memiliki nama. Biasanya, driver bus berbasis kerangka kerja tidak menentukan nama untuk PDO, karena kerangka kerja (secara default) menginstruksikan sistem operasi untuk menghasilkan nama.

Di sisi lain, driver berbasis kerangka kerja dapat menetapkan nama perangkat ke objek perangkat dengan memanggil WdfDeviceInitAssignName. Driver harus memberi nama objek perangkat fungsi (FDO), memfilter objek perangkat (filter DO), atau PDO hanya jika driver harus mendukung aplikasi lama yang mengharapkan nama perangkat tertentu, atau jika driver milik tumpukan driver yang lebih lama yang arsitekturnya memerlukan nama objek.

Alih-alih menamai FDO dan filter DO, driver WDM dan driver berbasis kerangka kerja harus menyediakan antarmuka perangkat yang dapat diakses aplikasi. Sistem operasi mendapatkan deskriptor keamanan antarmuka perangkat dari PDO perangkat dan dari entri registri yang ditentukan file INF paket driver. Driver bus dapat menyediakan antarmuka perangkat untuk PDO jika perangkat driver beroperasi dalam mode mentah, tanpa driver fungsi.

Beberapa driver harus memanggil WdfDeviceCreateSymbolicLink untuk membuat nama tautan simbolis untuk perangkat mereka. Misalnya, driver dapat membuat nama perangkat MS-DOS jika aplikasi mengharapkan untuk melihat nama MS-DOS untuk perangkat. Jika driver Anda membuat nama tautan simbolis untuk FDO yang tidak bernama atau filter DO, kerangka kerja mengaitkan nama tautan simbolis dengan nama PDO. (Perangkat kontrol tidak terkait dengan PDO, sehingga driver Anda tidak dapat membuat nama tautan simbolis untuk perangkat kontrol yang tidak disebutkan namanya.)

Menyediakan Deskriptor Keamanan untuk Objek dan Antarmuka Perangkat

Setiap objek perangkat bernama harus memiliki pendeskripsi keamanan. Sistem operasi menggunakan deskriptor keamanan objek perangkat untuk menentukan jenis pengguna yang diizinkan untuk mengakses perangkat dan antarmuka perangkatnya. Deskriptor keamanan dapat ditetapkan ke objek perangkat dengan:

Secara default, sistem operasi juga menggunakan pendeskripsi keamanan PDO perangkat untuk menentukan hak akses ke antarmuka perangkat yang disediakan driver.

Paket driver dapat menyediakan file INF yang menentukan deskriptor keamanan perangkat dengan direktif INF AddReg dalam bagian INF DDInstall.HW.

Untuk informasi selengkapnya tentang menentukan deskriptor keamanan dalam file INF, lihat Membuat Penginstalan Perangkat Aman.

Jika driver Anda membuat PDO untuk perangkat yang beroperasi dalam mode mentah, driver harus menentukan kelas penyiapan perangkat saat memanggil WdfPdoInitAssignRawDevice. Selain itu, jika driver Anda membuat perangkat kontrol, driver dapat memanggil WdfDeviceInitSetDeviceClass untuk menentukan kelas penyiapan perangkat. Dalam kedua kasus ini, administrator sistem dapat menggunakan kunci registri dari kelas penyiapan yang ditentukan untuk menyimpan deskriptor keamanan untuk perangkat.

Untuk informasi tentang bagaimana sistem operasi menentukan deskriptor keamanan mana yang akan digunakan untuk perangkat, lihat Mengontrol Akses Perangkat.

Ketika kerangka kerja membuat objek perangkat, kerangka kerja selalu mengatur bendera FILE_DEVICE_SECURE_OPEN sehingga sistem operasi akan memeriksa pendeskripsi keamanan perangkat sebelum mengizinkan aplikasi mengakses nama apa pun dalam namespace perangkat. Untuk informasi selengkapnya tentang bendera FILE_DEVICE_SECURE_OPEN dan namespace perangkat, lihat Mengontrol Akses Namespace Perangkat.