Partilhar via


Chamando IoCallDriver versus Chamando PoCallDriver

A partir do Windows Vista, um driver deve chamar IoCallDriver em vez de PoCallDriver para passar IRPs de energia para o driver inferior. No Windows Server 2003, Windows XP e Windows 2000, um driver deve chamar PoCallDriver, não IoCallDriver, para passar IRPs de energia para o driver mais baixo. No entanto, observe que os drivers que usam o mesmo código para serem executados no Windows Vista e em versões anteriores do Windows devem chamar PoCallDriver, não IoCallDriver.

A partir do Windows Vista, PoRequestPowerIrp e IoCallDriver garantem que o power manager sincronize corretamente os IRPs de energia em todo o sistema. No Windows Server 2003, Windows XP e Windows 2000, PoRequestPowerIrp, PoCallDriver e PoStartNextPowerIrp, verifique se o power manager sincroniza corretamente os IRPs de energia em todo o sistema.

O sistema limita o número de IRPs de energia ativa da seguinte maneira:

  • Não mais de um IRP de energia do sistema (IRP_MN_SET_POWER, IRP_MN_QUERY_POWER) pode estar ativo para cada PDO (objeto de dispositivo físico) a qualquer momento.

  • Não mais do que um IRP (IRP_MN_SET_POWER) de set-power do dispositivo pode estar ativo para cada PDO a qualquer momento.

  • Não mais do que um IRP de energia de dispositivo que requer um inrush de energia pode estar ativo em qualquer lugar do sistema a qualquer momento.

Para garantir que dois dispositivos inrush não tentem ligar simultaneamente, o power manager controla os IRPs de energia inrush ativos em todo o sistema e permite que apenas um esteja ativo por vez. Um IRP inrush adicional não pode ser iniciado até que o IRP inrush ativo seja concluído.

Devido a essas restrições em IRPs inrush, um IRP de energia do dispositivo pode ser bloqueado enquanto um IRP inrush para outro dispositivo é concluído. Os gravadores de driver devem estar cientes desse comportamento durante a depuração.