Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En drivrutins DispatchPower-rutin stöder energisparfunktioner genom att hantera IRP:er för IRP_MJ_POWER I/O-funktionskod. Associerad med IRP_MJ_POWER funktionskod är flera mindre I/O-funktionskoder för strömhantering. Power Manager använder dessa mindre funktionskoder för att dirigera drivrutiner för att ändra energitillstånd, för att vänta på och svara på systemuppvakningshändelser och för att fråga drivrutiner om sina enheter.
Varje drivrutins DispatchPower-rutin utför följande uppgifter:
Hantera IRP om möjligt.
Skicka vidare IRP till nästa lägre drivrutin i enhetsstacken, genom att använda PoCallDriver.
Om en busschaufför utför du den begärda strömåtgärden på enheten och slutför IRP.
Alla drivrutiner för en enhet måste ha möjlighet att hantera kraft IRP:er för enheten, förutom i vissa fall då en funktionsdrivrutin eller filterdrivrutin tillåts neka IRP:en. De flesta funktions- och filterdrivrutiner utför antingen viss bearbetning eller anger en IoCompletion-rutin för varje power IRP och skickar sedan IRP till nästa lägre drivrutin utan att slutföra den. Så småningom når IRP busschauffören, vilket fysiskt ändrar enhetens energitillstånd om det behövs och slutför IRP.
När IRP har slutförts anropar I/O-chefen alla IoCompletion-rutiner som angetts av drivrutiner när IRP kördes ned i enhetsstacken. Om en drivrutin behöver ange en slutföranderutin beror på typen av IRP och förarens individuella krav.
Power-IRP:er som aktiverar en enhet måste först hanteras av den lägsta drivrutinen i enhetsstacken (den underliggande bussdrivrutinen) och sedan av varje efterföljande drivrutin uppför stacken. Power-IP-adresser som stänger av en enhet måste först hanteras av drivrutinen överst i enhetsstacken och sedan av varje efterföljande drivrutin som går ner i stacken.
Särskild hantering för flyttbara enheter
I sina DispatchPower-rutiner bör drivrutiner för flyttbara enheter kontrollera om enheten fortfarande finns. Om enheten har tagits bort ska drivrutinen inte skicka ned IRP till nästa lägre drivrutin. Föraren bör i stället göra följande:
Anropa PoStartNextPowerIrp för att börja bearbeta nästa kraft-IRP.
Ange Irp-IoStatus.Status> till STATUS_DELETE_PENDING.
Anropa IoCompleteRequest och ange IO_NO_INCREMENT för att slutföra IRP.
Återgå med STATUS_DELETE_PENDING.