Compartilhar via


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:

  1. 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.

  2. Chame PoStartNextPowerIrp para iniciar o próximo IRP de energia. (Somente Windows Server 2003, Windows XP e Windows 2000.)

  3. Defina o local da pilha IRP (IoSkipCurrentIrpStackLocation ou IoCopyCurrentIrpStackLocationToNext). O driver pode definir uma rotina IoCompletion no IRP, mas isso raramente é necessário.

  4. 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.

  5. Chame IoReleaseRemoveLock. No entanto, se o driver definir uma rotina IoCompletion para o IRP, faça essa chamada da rotina IoCompletion .

  6. Retorne STATUS_PENDING de sua rotina DispatchPower .