Appel d’IoCallDriver par rapport à l’appel de PoCallDriver
À compter de Windows Vista, un pilote doit appeler IoCallDriver au lieu de PoCallDriver pour passer les irps d’alimentation au pilote inférieur suivant. Dans Windows Server 2003, Windows XP et Windows 2000, un pilote doit appeler PoCallDriver, et non IoCallDriver, pour passer les IIP d’alimentation au pilote inférieur suivant. Notez toutefois que les pilotes qui utilisent le même code pour s’exécuter à la fois dans Windows Vista et dans les versions antérieures de Windows, doivent appeler PoCallDriver, et non IoCallDriver.
À compter de Windows Vista, PoRequestPowerIrp et IoCallDriver garantissent que le gestionnaire d’alimentation synchronise correctement les IRPs d’alimentation dans tout le système. Dans Windows Server 2003, Windows XP et Windows 2000, PoRequestPowerIrp, PoCallDriver et PoStartNextPowerIrp, assurez-vous que le gestionnaire d’alimentation synchronise correctement les IRP d’alimentation sur l’ensemble du système.
Le système limite le nombre d’IRP d’alimentation active comme suit :
Pas plus d’un IRP d’alimentation système (IRP_MN_SET_POWER, IRP_MN_QUERY_POWER) ne peut être actif pour chaque objet d’appareil physique (PDO) à un moment donné.
Il n’est pas possible d’activer plusieurs IRP (IRP_MN_SET_POWER) pour chaque PDO à un moment donné.
Pas plus d’un appareil d’alimentation IRP qui nécessite un appel d’alimentation peut être actif n’importe où dans le système à un moment donné.
Pour s’assurer que deux appareils inrush ne tentent pas de s’allumer simultanément, le gestionnaire d’alimentation effectue le suivi des IRP d’alimentation d’inrush actifs dans l’ensemble du système et n’autorise qu’un seul d’être actif à la fois. Un IRP d’inrush supplémentaire ne peut pas démarrer tant que l’IRP d’inrush actif n’est pas terminé.
En raison de ces restrictions sur les IRP d’inrush, un IRP d’alimentation d’appareil peut se bloquer pendant qu’un IRP d’appel d’un autre appareil se termine. Les rédacteurs de pilotes doivent être conscients de ce comportement lors du débogage.