ID Koneksi untuk Perangkat Periferal SPB-Connected

Sebelum pengemudi dapat mengirim permintaan I/O ke perangkat periferal pada bus periferal sederhana (SPB), driver harus membuka koneksi logis ke perangkat. Melalui koneksi ini, driver dapat mengirim permintaan baca dan tulis untuk mentransfer data ke dan dari perangkat. Selain itu, driver dapat mengirim permintaan kontrol I/O (IOCTL) ke perangkat untuk melakukan operasi khusus SPB.

Pada permulaan sistem, manajer Plug and Play (PnP) menghitung perangkat PnP dan perangkat non-PnP. Untuk perangkat periferal non-PnP yang memiliki koneksi tetap ke SPB, manajer PnP meminta firmware ACPI platform perangkat keras untuk mendapatkan serangkaian parameter koneksi yang menjelaskan cara mengakses perangkat. Parameter koneksi ini mengidentifikasi pengontrol SPB untuk bus tempat perangkat terhubung, dan menyertakan informasi lain, seperti alamat bus dan frekuensi jam bus, yang diperlukan pengontrol untuk berkomunikasi dengan perangkat.

Manajer PnP menetapkan pengidentifikasi—yang disebut ID koneksi—ke parameter koneksi untuk perangkat periferal yang terhubung dengan SPB. Manajer PnP menyimpan ID ini dan parameter koneksi bersama-sama di datastore sistem yang disebut hub sumber daya. (Hub sumber daya adalah datastore internal tempat manajer PnP menyimpan informasi konfigurasi tentang perangkat periferal yang terhubung dengan SPB.) ID koneksi merangkum parameter ini sehingga driver tidak perlu memberikannya secara eksplisit.

Driver untuk perangkat periferal yang terhubung dengan SPB menerima ID koneksi untuk perangkat sebagai bagian dari sumber daya perangkat keras yang ditetapkan driver. Ketika driver untuk perangkat periferal memanggil fungsi sistem untuk membuka koneksi ke perangkat, driver menyediakan ID koneksi, yang digunakan fungsi untuk mengambil parameter koneksi perangkat dari hub sumber daya.

Pengembang driver dapat menggunakan User-Mode Driver Framework (UMDF) atau Kernel-Mode Driver Framework (KMDF) untuk membangun driver untuk perangkat periferal yang terhubung dengan SPB. Driver UMDF menerima sumber dayanya (yang mencakup ID koneksi) ketika kerangka kerja memanggil metode IPnpCallbackHardware2::OnPrepareHardware driver. Driver KMDF menerima sumber daya perangkat kerasnya selama panggilan balik EvtDevicePrepareHardware .

Untuk mengaktifkan driver periferal UMDF untuk menerima ID koneksi dalam daftar sumber dayanya, file INF yang menginstal driver harus menyertakan arahan berikut di bagian DDInstall khusus WDF :

UmdfDirectHardwareAccess = AllowDirectHardwareAccess Untuk informasi selengkapnya tentang arahan ini, lihat Menentukan Arahan WDF dalam File INF. Untuk contoh file INX (digunakan untuk membangun file INF yang sesuai) yang menggunakan direktif ini, lihat sampel driver SpbAccelerometer .

ID koneksi yang diterima driver sebagai sumber daya adalah bilangan bulat 64-bit, tetapi driver harus memasukkan ID ini ke dalam nama jalur perangkat yang dapat digunakan untuk mengambil parameter koneksi dari hub sumber daya. Untuk membuat nama jalur perangkat, driver memanggil fungsi RESOURCE_HUB_CREATE_PATH_FROM_ID , yang dideklarasikan dalam file header Reshub.h.

Untuk membuka koneksi logis ke perangkat periferal yang terhubung dengan SPB, driver UMDF memanggil metode IWDFRemoteTarget::OpenFileByName , dan driver KMDF memanggil metode WdfIoTargetOpen . Salah satu metode memerlukan nama jalur perangkat sebagai parameter input.

Untuk contoh kode UMDF dan KMDF yang menggunakan ID koneksi untuk membuka koneksi logis ke perangkat periferal yang terhubung dengan SPB, lihat topik berikut:

Sumber Daya Perangkat Keras untuk User-Mode Sumber Daya Perangkat Keras Driver Periferal SPB untuk Kernel-Mode aplikasi mode Pengguna Driver Periferal SPB tidak dapat membuka koneksi logis ke perangkat periferal yang terhubung dengan SPB dan tidak dapat mengirim permintaan I/O langsung ke perangkat ini.

Hanya satu driver yang dapat menahan koneksi logis terbuka ke perangkat periferal yang terhubung dengan SPB pada satu waktu. Upaya oleh driver lain untuk membuka koneksi kedua ke perangkat yang sama gagal.