Manipulando um IRP Set-Power sistema em um driver de filtro
Todos os drivers de filtro e qualquer driver de função que não possua a política de energia para sua pilha de dispositivos devem simplesmente passar o IRP de set-power do sistema para o driver inferior seguinte, nas seguintes etapas:
Chame IoAcquireRemoveLock, passando o IRP atual, para garantir que o driver não receba uma solicitação de IRP_MN_REMOVE_DEVICE PnP ao manipular o IRP de energia.
Se IoAcquireRemoveLock retornar uma falha status, o driver não deverá continuar processando o IRP. Em vez disso, começando com o Windows Vista, o driver deve chamar IoCompleteRequest para concluir o IRP e retornar a falha status. No Windows Server 2003, Windows XP e Windows 2000, o driver deve primeiro chamar PoStartNextPowerIrp, chamar IoCompleteRequest para concluir o IRP e, em seguida, retornar a falha status.
Chame PoStartNextPowerIrp para iniciar o próximo IRP de energia. (Somente Windows Server 2003, Windows XP e Windows 2000.)
Defina o local da pilha IRP (IoSkipCurrentIrpStackLocation ou IoCopyCurrentIrpStackLocationToNext). O driver pode definir uma rotina IoCompletion no IRP, mas isso raramente é necessário.
Chame IoCallDriver (no Windows 7 e Windows Vista) ou PoCallDriver (no Windows Server 2003, Windows XP e Windows 2000) para passar o IRP para o driver mais baixo.
Chame IoReleaseRemoveLock. No entanto, se o driver definir uma rotina IoCompletion para o IRP, faça essa chamada da rotina IoCompletion .
Retorne STATUS_PENDING de sua rotina DispatchPower .