Gestion des demandes d’alimentation vers les périphériques de stockage
Un pilote de classe de stockage est responsable de l’émission de commandes spécifiques à l’appareil pour gérer les demandes d’alimentation. Le plus souvent, un pilote de classe de stockage :
Bloque les E/S sur son appareil en réponse à une demande d’alimentation de requête (IRP_MJ_POWER avec IRP_MN_QUERY_POWER) si la gestion de ces E/S peut empêcher le pilote de réussir une demande d’alimentation définie dans un délai raisonnable
Définit l’état d’alimentation de son appareil en réponse à une demande de puissance définie (IRP_MJ_POWER avec IRP_MN_SET_POWER)
Redémarre les E/S sur son appareil en réponse à une demande de mise sous tension de l’appareil
Transfère les demandes d’alimentation au pilote inférieur suivant.
Notez qu’un pilote doit appeler PoStartNextPowerIrp et PoCallDriver, et non IoCallDriver, pour envoyer des demandes d’alimentation.
À moins que le pilote de classe de stockage n’ait une routine StartIo , il doit verrouiller la file d’attente propre au pilote de port de stockage (IRP_MJ_SCSI avec SRB_FUNCTION_LOCK_QUEUE) avant de définir l’état d’alimentation de l’appareil, afin de bloquer les opérations non synchronisées jusqu’à ce que l’opération d’alimentation (qui peut impliquer plusieurs étapes) soit terminée. Tous les SSB émis pour gérer l’opération d’alimentation doivent définir SRB_FLAGS_BYPASS_LOCKED_QUEUE pour s’assurer qu’ils atteignent le pilote de port. Une fois que le pilote a terminé de définir l’état d’alimentation, il doit déverrouiller la file d’attente (IRP_MJ_SCSI avec SRB_FUNCTION_UNLOCK_QUEUE et SRB_FLAGS_BYPASS_LOCKED_QUEUE) afin que le pilote de port puisse reprendre l’envoi des IRP en file d’attente à l’appareil une fois qu’il a été mis sous tension.
Si un pilote de classe de stockage a une routine StartIo , cette routine gère la synchronisation afin que le pilote de classe n’ait pas à verrouiller et déverrouiller explicitement la file d’attente spécifique à l’unité lu du pilote de port.
Un pilote de classe ne doit pas tenter de contourner une file d’attente verrouillée par un autre pilote.