Bagikan melalui


Menangani Permintaan Daya ke Periferal Penyimpanan

Driver kelas penyimpanan bertanggung jawab untuk mengeluarkan perintah khusus perangkat untuk menangani permintaan daya. Paling umum, driver kelas penyimpanan:

  • Memblokir I/O ke perangkatnya sebagai respons terhadap permintaan daya kueri (IRP_MJ_POWER dengan IRP_MN_QUERY_POWER) jika menangani I/O tersebut dapat mencegah driver berhasil dalam permintaan set-power dalam waktu yang wajar

  • Mengatur status daya perangkatnya sebagai respons terhadap permintaan set-power (IRP_MJ_POWER dengan IRP_MN_SET_POWER)

  • Menghidupkan ulang I/O ke perangkatnya sebagai respons terhadap permintaan set-power untuk menghidupkan perangkat

  • Meneruskan permintaan daya ke driver berikutnya yang lebih rendah.

Perhatikan bahwa driver harus memanggil PoStartNextPowerIrp dan PoCallDriver, bukan IoCallDriver, untuk mengirim permintaan daya.

Kecuali driver kelas penyimpanan memiliki rutinitas StartIo , driver harus mengunci antrean khusus LU driver port penyimpanan (IRP_MJ_SCSI dengan SRB_FUNCTION_LOCK_QUEUE) sebelum mengatur status daya perangkat, untuk memblokir operasi yang tidak disinkronkan sampai operasi daya (yang mungkin melibatkan beberapa langkah) selesai. Setiap SRB yang dikeluarkan untuk menangani operasi daya harus diatur SRB_FLAGS_BYPASS_LOCKED_QUEUE untuk memastikan SRB tersebut mencapai driver port. Setelah driver selesai mengatur status daya, driver harus membuka kunci antrean (IRP_MJ_SCSI dengan SRB_FUNCTION_UNLOCK_QUEUE dan SRB_FLAGS_BYPASS_LOCKED_QUEUE) sehingga driver port dapat melanjutkan pengiriman IRP yang diantrekan ke perangkat setelah dinyalakan.

Jika driver kelas penyimpanan memiliki rutinitas StartIo , rutinitas tersebut menangani sinkronisasi sehingga driver kelas tidak harus secara eksplisit mengunci dan membuka kunci antrean khusus LU driver port.

Driver kelas tidak boleh mencoba melewati antrean yang dikunci oleh driver lain.