다음을 통해 공유


IRP_MN_POWER_SEQUENCE

이 IRP는 디바이스의 전원 시퀀스 값을 반환합니다.

주 코드

IRP_MJ_POWER

보낸 경우

드라이버는 이 IRP를 최적화로 보내 디바이스가 실제로 특정 전원 상태에 들어갔는지 여부를 확인합니다. 이 IRP에 대한 지원은 선택 사항입니다.

이 IRP를 보내려면 드라이버가 IoAllocateIrp 를 호출하여 IRP를 할당하고 주 IRP 코드 IRP_MJ_POWER 및 부 IRP 코드 IRP_MN_POWER_SEQUENCE 지정해야 합니다. 그런 다음 드라이버는 IoCallDriver (Windows Vista) 또는 PoCallDriver (Windows Server 2003, Windows XP 및 Windows 2000)를 호출하여 IRP를 다음 하위 드라이버에 전달해야 합니다. 전원 관리자는 이 IRP를 보낼 수 없습니다.

이 IRP의 보낸 사람이 IRQL <= DISPATCH_LEVEL 실행되어야 합니다.

입력 매개 변수

없음

출력 매개 변수

Parameters.PowerSequence 는 다음 멤버가 있는 POWER_SEQUENCE 구조를 가리킵니다.

SequenceD1
디바이스가 전원 상태 D1 이하인 횟수입니다.

SequenceD2
디바이스가 전원 상태 D2 이하인 횟수입니다.

SequenceD3
디바이스가 전원 상태 D3에 있었던 횟수입니다.

시퀀스 값은 디바이스가 해당 전원 상태 또는 낮은 전원 상태에 있었던 최소 횟수를 추적합니다.

버스 드라이버는 적어도 디바이스가 해당 전원 상태 또는 낮은 전원 상태로 들어갈 때마다 SequenceD1, SequenceD2SequenceD3 의 값을 증가합니다.

I/O 상태 블록

드라이버는 Irp-IoStatus.Status>를 STATUS_SUCCESS 설정하여 요청된 정보를 반환했음을 나타내거나 이 IRP를 지원하지 않음을 나타내기 위해 STATUS_NOT_IMPLEMENTED.

작업

이 IRP는 디바이스의 전원 시퀀스 값을 반환합니다. 버스 드라이버는 필요에 따라 처리할 수 있습니다. 함수 및 필터 드라이버는 필요에 따라 보낼 수 있습니다.

상태를 변경하는 데 시간이 오래 걸리는 디바이스의 경우 이 IRP는 유용한 최적화를 제공합니다. 디바이스가 전원 상태를 변경할 때마다 해당 버스 드라이버는 해당 전원 상태에 대한 시퀀스 값을 증가합니다. 버스 드라이버는 부팅 시 시퀀스 값을 초기화하고 이후에도 지속적으로 증가합니다. 0으로 다시 설정할 필요가 없습니다.

디바이스 정책 소유자는 디바이스를 종료하기 전에 시퀀스 값을 가져오기 위해 이 IRP를 한 번 보내고 디바이스에 전원을 복원할 때 다시 한 번 새 값을 가져올 수 있습니다. 드라이버는 두 값 집합을 비교하여 디바이스가 실제로 저전력 상태로 들어갔는지 여부를 확인할 수 있습니다. 디바이스의 전원이 손실되지 않으면 디바이스가 D0 상태로 돌아올 때 드라이버가 시간이 많이 걸리는 다시 초기화를 방지할 수 있습니다.

예를 들어 디바이스가 D2 상태에 도달할 때 전원을 복원하는 데 시간이 오래 걸리는 경우 드라이버는 디바이스 상태를 D2 이하로 설정하기 전에 SequenceD2 값을 저장할 수 있습니다. 나중에 전원이 디바이스로 복원될 때 드라이버는 새 SequenceD2 값을 저장된 값과 비교하여 디바이스 상태가 실제로 D2 아래로 떨어졌는지 여부를 확인할 수 있습니다. 값이 일치하면 디바이스가 실제로 전원 상태 D2 또는 더 낮은 상태로 들어가지 않았으며 드라이버는 디바이스를 다시 초기화하지 않을 수 있습니다.

요구 사항

헤더

Wdm.h(Wdm.h, Ntddk.h 또는 Ntifs.h 포함)