다음을 통해 공유


대기/절전 모드 해제 IRP 완료 개요

절전 모드 해제 신호가 도착하면 대기/절전 모드 해제 IRP가 완료됩니다. 절전 모드 해제 신호는 디바이스별이지만 일반적으로 디바이스에 대한 일반 서비스 이벤트입니다. 예를 들어 들어오는 링으로 인해 절전 모드가 깨어날 수 있습니다.

다음 그림에서는 대기/절전 모드 해제 IRP를 완료하는 단계를 보여줍니다.

대기/절전 모드 해제 irp를 완료하기 위한 단계입니다.

신호가 발생하면 제어는 버스가 장치가 깨어났음을 감지하는 지점에서 버스 드라이버에 다시 진입합니다. 버스 드라이버는 필요에 따라 이벤트를 서비스하고 IoCompleteRequest 를 호출하여 해당 PDO에 대한 IRP_MN_WAIT_WAKE IRP를 완료합니다.

그런 다음 I/O 관리자는 디바이스 스택의 다음 상위 드라이버에서 설정한 IoCompletion 루틴을 호출합니다. IoCompletion 루틴에서 해당 드라이버는 필요에 따라 절전 모드 해제 신호를 서비스하고 IoCompleteRequest를 호출하여 IRP를 완료합니다. I/O 관리자는 모든 드라이버가 IRP를 완료할 때까지 디바이스 스택을 백업하는 IoCompletion 루틴을 계속 호출합니다.

IoCompletion 루틴에서 둘 이상의 자식 디바이스를 열거하고(둘 이상의 PDO를 만들고) 두 개 이상의 디바이스에서 대기/절전 모드 해제 요청을 받은 모든 드라이버는 대기/절전 모드 해제 IRP를 보내 다른 자식의 대기/절전 모드 해제를 위해 자체적으로 다시 무장해야 합니다. 자세한 내용은 디바이스 트리를 통한 대기/절전 모드 해제 IRP의 경로 이해를 참조하세요.

드라이버가 IRP를 스택 아래로 전달할 때 설정한 IoCompletion 루틴을 호출한 후 I/O 관리자는 대기/절전 모드 해제 IRP를 요청할 때 전원 정책 소유자가 설정한 콜백 루틴을 호출합니다. 콜백 루틴에서 정책 소유자는 디바이스를 작업 상태로 반환하고 자녀의 PDO에 대해 보류 중인 대기/절전 모드 해제 IRP(있는 경우)를 완료해야 합니다.

자녀의 IRP를 완료하면 I/O 관리자가 자녀의 디바이스 스택에 있는 드라이버가 설정한 IoCompletion 루틴을 호출합니다. 결국 devnode에서 원래 대기/절전 모드 해제 IRP를 시작한 정책 소유자는 디바이스가 절전 모드 해제 신호를 어설션하고 보류 중인 모든 대기/절전 모드 해제 IRP가 완료됨을 결정합니다.