디바이스 전원 IRP에 대한 IoCompletion 루틴
버스 드라이버가 IRP를 완료한 후 I/O 관리자는 IRP를 스택 아래로 전달할 때 상위 수준 드라이버가 등록한 IoCompletion 루틴을 호출합니다.
디바이스가 D0 상태가 될 때마다 각 드라이버는 작업 상태로 되돌리는 데 필요한 대부분의 작업을 수행하는 IoCompletion 루틴을 설정해야 합니다. 드라이버는 디바이스가 절전 모드 상태에서 돌아오든 시스템 시작 시 D0를 입력하든 관계없이 D0 상태로 전환하기 위한 IoCompletion 루틴을 설정해야 합니다. 다음 그림에서는 이러한 IoCompletion 루틴이 수행해야 하는 작업을 보여 줍니다.
필수 구성 요소 작업을 완료해야 합니다.
필요에 따라 디바이스 전원 상태를 복원하거나 디바이스를 다시 초기화하고 디바이스가 작동 상태가 아닌 동안 드라이버가 대기하는 I/O를 처리할 준비를 합니다.
PoSetPowerState를 호출하여 디바이스가 D0 전원 상태임을 전원 관리자에게 알립니다.
드라이버가 원래 현재 전원 IRP를 보내지 않은 경우 PoStartNextPowerIrp 을 호출하여 다음 전원 IRP를 수신합니다. (Windows Server 2003, Windows XP 및 Windows 2000만 해당).
디바이스 컨텍스트에 할당된 메모리를 해제합니다.
IoReleaseRemoveLock을 호출하여 드라이버가 IRP를 받았을 때 DispatchPower 루틴에서 얻은 잠금을 해제합니다.
STATUS_SUCCESS 반환합니다.
버스 드라이버는 디바이스 이상 드라이버가 디바이스와 통신해야 할 때까지 디바이스의 전원을 켜지 않습니다.
디바이스가 절전 모드 상태가 되면 드라이버는 PoStartNextPowerIrp(Windows Server 2003, Windows XP 및 Windows 2000만 해당)을 호출하고 제거 잠금을 해제하는 IoCompletion 루틴을 설정해야 합니다. 디바이스가 절전 모드 상태인 동안에는 드라이버가 디바이스에 액세스할 수 없습니다.