Gestion d’un IRP Set-Power système dans un pilote de filtre
Tous les pilotes de filtre et tout pilote de fonction qui ne possède pas de stratégie d’alimentation pour sa pile de périphériques doivent simplement passer l’IRP set-power système au pilote inférieur suivant, en procédant comme suit :
Appelez IoAcquireRemoveLock, en passant l’IRP actuel, pour vous assurer que le pilote ne reçoit pas de demande de IRP_MN_REMOVE_DEVICE PnP lors de la gestion de l’IRP d’alimentation.
Si IoAcquireRemoveLock retourne un échec status, le pilote ne doit pas continuer à traiter l’IRP. Au lieu de cela, à compter de Windows Vista, le pilote doit appeler IoCompleteRequest pour terminer l’IRP et retourner l’échec status. Dans Windows Server 2003, Windows XP et Windows 2000, le pilote doit d’abord appeler PoStartNextPowerIrp, appeler IoCompleteRequest pour terminer l’IRP, puis retourner l’échec status.
Appelez PoStartNextPowerIrp pour démarrer le IRP d’alimentation suivant. (Windows Server 2003, Windows XP et Windows 2000 uniquement.)
Définissez l’emplacement de la pile IRP (IoSkipCurrentIrpStackLocation ou IoCopyCurrentIrpStackLocationToNext). Le pilote peut définir une routine IoCompletion dans l’IRP, mais cela est rarement nécessaire.
Appelez IoCallDriver (dans Windows 7 et Windows Vista) ou PoCallDriver (dans Windows Server 2003, Windows XP et Windows 2000) pour passer l’IRP au pilote inférieur suivant.
Appelez IoReleaseRemoveLock. Toutefois, si le pilote a défini une routine IoCompletion pour l’IRP, effectuez cet appel à partir de la routine IoCompletion à la place.
Retourne STATUS_PENDING de sa routine DispatchPower .