다음을 통해 공유


IoCallDriver 및 PoCallDriver 호출

Windows Vista부터 드라이버는 PoCallDriver 대신 IoCallDriver를 호출하여 전원 IRP를 다음 하위 드라이버에 전달해야 합니다. Windows Server 2003, Windows XP 및 Windows 2000에서 드라이버는 IoCallDriver가 아닌 PoCallDriver를 호출하여 전원 IRP를 다음 하위 드라이버에 전달해야 합니다. 그러나 Windows Vista 및 이전 Windows 버전에서 동일한 코드를 사용하여 실행하는 드라이버는 IoCallDriver가 아닌 PoCallDriver를 호출해야 합니다.

Windows Vista부터 PoRequestPowerIrpIoCallDriver 는 전원 관리자가 시스템 전체에서 전원 IRP를 올바르게 동기화하는지 확인합니다. Windows Server 2003, Windows XP 및 Windows 2000, PoRequestPowerIrp, PoCallDriverPoStartNextPowerIrp에서 전원 관리자가 시스템 전체에서 전원 IRP를 올바르게 동기화하는지 확인합니다.

시스템은 다음과 같이 활성 전원 IRP 수를 제한합니다.

  • 지정된 시간에 각 PDO(물리적 디바이스 개체)에 대해 둘 이상의 시스템 전원 IRP(IRP_MN_SET_POWER, IRP_MN_QUERY_POWER)를 활성화할 수 없습니다.

  • 지정된 시간에 각 PDO에 대해 두 개 이상의 디바이스 IRP_MN_SET_POWER (설정 전원 IRP)를 활성화할 수 없습니다.

  • 전원이 필요한 디바이스 전원 IRP는 지정된 시간에 시스템 어디에서나 활성화할 수 없습니다.

두 개의 인러시브 디바이스가 동시에 전원을 켜지 않도록 하기 위해 전원 관리자는 전체 시스템에서 활성 Inrush 전원 IRP를 추적하고 한 번에 하나만 활성화할 수 있습니다. 활성 inrush IRP가 완료될 때까지 추가 IRP를 시작할 수 없습니다.

이러한 비동기 IRP 제한으로 인해 다른 디바이스에 대한 비동기 IRP가 완료되는 동안 디바이스 전원 IRP가 차단될 수 있습니다. 드라이버 작성기는 디버깅하는 동안 이 동작을 알고 있어야 합니다.