Pengantar Sumber Daya Perangkat Keras
Sumber daya perangkat keras sistem adalah port I/O, vektor interupsi, saluran akses memori langsung (DMA), dan jalur komunikasi lainnya yang harus ditetapkan ke setiap perangkat yang terhubung ke sistem. Topik di bagian ini menjelaskan bagaimana driver Kernel-Mode Driver Framework (KMDF) menegosiasikan persyaratan sumber daya perangkat keras untuk perangkat, meninjau daftar sumber daya yang diusulkan, lalu menerima sumber daya yang ditetapkan. Bagian ini juga membahas bagaimana driver KMDF dan User-Mode Driver Framework (UMDF) mengakses dan memetakan sumber daya yang ditetapkan.
Setelah pengguna menyambungkan perangkat PnP, driver yang menghitung perangkat biasanya membuat satu atau beberapa konfigurasi logis, yang merupakan kombinasi sumber daya perangkat keras yang dapat digunakan perangkat. Konfigurasi ini mencakup hal-hal berikut:
Konfigurasi boot yang mencantumkan sumber daya perangkat keras yang diperlukan perangkat saat sistem dimulai. (Untuk perangkat PnP, informasi ini disediakan oleh BIOS.)
Konfigurasi tambahan tempat perangkat dapat beroperasi. Driver mengelompokkan konfigurasi tambahan ini dalam daftar persyaratan sumber daya. Manajer PnP pada akhirnya akan memilih sumber daya dari daftar ini untuk ditetapkan ke perangkat.
Setelah driver membuat konfigurasi logis, driver mengirimkannya ke kerangka kerja, dan kerangka kerja mengirimkannya ke manajer PnP.
Selanjutnya, manajer PnP menentukan driver mana yang diperlukan perangkat dan memuatnya jika belum dimuat. Manajer PnP mengirimkan daftar persyaratan perangkat keras perangkat ke driver perangkat untuk ditinjau. Driver fungsi dan filter dapat mengubah daftar ini dan mengirimkannya kembali ke manajer PnP.
Manajer PnP memeriksa daftar persyaratan perangkat keras yang dimodifikasi dan menentukan sumber daya mana yang ditentukan yang benar-benar tersedia pada sistem. Jika perangkat memerlukan sumber daya yang sebelumnya ditetapkan manajer PnP ke perangkat lain, manajer PnP mungkin mencoba mendistribusikan ulang sumber daya di antara perangkat sistem.
Selanjutnya, manajer PnP membuat daftar sumber daya, yang merupakan daftar sumber daya yang ingin ditetapkan manajer PnP ke perangkat. Manajer PnP mengirimkan daftar ini ke driver perangkat untuk ditinjau. Pada titik ini, fungsi dan driver filter dapat menghapus sumber daya dari daftar tetapi tidak dapat menambahkan sumber daya ke dalamnya.
Akhirnya, manajer PnP menetapkan sumber daya ke perangkat. Kerangka kerja meneruskan daftar sumber daya ke fungsi perangkat dan driver filter, dan driver fungsi perangkat melakukan inisialisasi apa pun yang diperlukan sehingga perangkat dan driver dapat mengakses sumber daya.
Langkah-langkah berikut menjelaskan proses secara lebih rinci:
Driver bus mendeteksi perangkat dan menghitungnya .
Kerangka kerja memanggil fungsi panggilan balik EvtDeviceResourcesQuery driver bus, yang membuat daftar sumber daya yang menjelaskan konfigurasi boot perangkat.
Kerangka kerja memanggil fungsi panggilan balik EvtDeviceResourceRequirementsQuery driver bus, yang membuat daftar persyaratan sumber daya untuk perangkat.
Manajer PnP menentukan driver mana yang diperlukan perangkat dan memuatnya, jika belum dimuat, untuk membuat tumpukan driver untuk perangkat.
Manajer PnP mengirimkan daftar persyaratan sumber daya perangkat ke tumpukan driver untuk ditinjau. Saat daftar turun ke tumpukan driver, kerangka kerja memanggil setiap fungsi dan memfilter fungsi panggilan balik EvtDeviceFilterRemoveResourceRequirements driver. Saat daftar mencadangkan tumpukan, kerangka kerja memanggil setiap fungsi dan memfilter fungsi panggilan balik EvtDeviceFilterAddResourceRequirements driver. Kedua fungsi panggilan balik ini dapat memodifikasi daftar persyaratan sumber daya.
Manajer PnP membuat daftar sumber daya untuk perangkat dan mengirimkannya ke tumpukan driver untuk ditinjau. Kerangka kerja memanggil setiap fungsi dan memfilter fungsi panggilan balik EvtDeviceRemoveAddedResources driver, yang menghapus sumber daya yang ditambahkan oleh fungsi panggilan balik EvtDeviceFilterAddResourceRequirements driver sehingga driver bus tidak akan mencoba menggunakannya.
Kerangka kerja menerima daftar sumber daya akhir dari manajer PnP dan menyimpannya.
Jika driver memanggil WdfInterruptCreate untuk membuat objek interupsi, kerangka kerja menemukan sumber daya yang mengganggu dalam daftar sumber daya dan menetapkannya ke objek interupsi.
Setelah perangkat memasuki status D0 yang tidak diinisialisasi, kerangka kerja memanggil fungsi panggilan balik EvtDevicePrepareHardware setiap driver, meneruskan versi mentah dan diterjemahkan dari daftar sumber daya perangkat sebagai argumen input. Driver dapat menyimpan daftar sumber daya, yang valid hingga kerangka kerja memanggil fungsi panggilan balik EvtDeviceReleaseHardware driver.