處理存放裝置周邊的電源要求
儲存類別驅動程式負責發出裝置特定命令來處理電源要求。 最常見的是儲存體類別驅動程式:
封鎖裝置的 I/O,以回應查詢電源要求 (IRP_MJ_POWER ,IRP_MN_QUERY_POWER) 處理這類 I/O 可能會防止驅動程式在合理的時間內成功設定電源要求
使用 IRP_MN_SET_POWER) 設定裝置的電源狀態,以回應設定電源要求 (IRP_MJ_POWER
重新開機 I/O 至其裝置,以回應設定電源要求來啟動裝置
將電源要求轉送至下一個較低的驅動程式。
請注意,驅動程式必須呼叫PoStartNextPowerIrp和PoCallDriver,而不是 IoCallDriver來傳送電源要求。
除非儲存類別驅動程式有 StartIo 常式,否則它應該先鎖定存放裝置埠驅動程式的 LU 特定佇列, (IRP_MJ_SCSI搭配 SRB_FUNCTION_LOCK_QUEUE) ,再設定裝置的電源狀態,以封鎖未同步處理的作業,直到電源作業 (可能涉及數個步驟) 完成為止。 發出來處理電源作業的任何 SRB 都應該設定SRB_FLAGS_BYPASS_LOCKED_QUEUE,以確保它們連線到埠驅動程式。 驅動程式完成設定電源狀態之後,它應該使用SRB_FUNCTION_UNLOCK_QUEUE解除鎖定佇列 (IRP_MJ_SCSI,並SRB_FLAGS_BYPASS_LOCKED_QUEUE) ,讓埠驅動程式在啟動電源之後,繼續將已排入佇列的 IRP 傳送至裝置。
如果儲存體類別驅動程式有 StartIo 常式,該常式會處理同步處理,因此類別驅動程式不需要明確鎖定和解除鎖定埠驅動程式的 LU 特定佇列。
類別驅動程式不應該嘗試略過另一個驅動程式鎖定的佇列。