IRP_MN_QUERY_POWER

이 IRP는 디바이스를 쿼리하여 시스템 전원 상태 또는 디바이스 전원 상태를 변경할 수 있는지 여부를 확인합니다.

주 코드

IRP_MJ_POWER

보낸 경우

전원 관리자 또는 디바이스 전원 정책 소유자는 일반적으로 절전 모드로 전환할 시스템 또는 디바이스 전원 상태를 변경할 수 있는지 여부를 결정하기 위해 이 IRP를 보냅니다. 드라이버는 PoRequestPowerIrp 을 호출하여 이 IRP를 할당하고 보내야 합니다.

전원 관리자는 이 IRP를 IRQL = PASSIVE_LEVEL PDO에서 DO_POWER_PAGABLE 플래그를 설정하는 디바이스 스택으로 보냅니다.

DO_POWER_INRUSH 플래그가 설정된 경우 전원 관리자는 IRQL = DISPATCH_LEVEL IRP를 보낼 수 있습니다. 이러한 드라이버는 페이징된 코드 또는 데이터에 직접 또는 간접적으로 액세스할 수 없습니다.

입력 매개 변수

Parameters.Power.TypeSystemPowerState 또는 DevicePowerState 중에서 설정할 전원 상태의 유형을 지정 합니다.

Parameters.Power.State 는 다음과 같이 전원 상태 자체를 지정합니다.

  • Parameters.Power.TypeSystemPowerState이면 값은 SYSTEM_POWER_STATE 형식의 열거자입니다.

  • Parameters.Power.TypeDevicePowerState이면 값은 DEVICE_POWER_STATE 형식의 열거자입니다.

Parameters.Power.ShutdownType 은 요청된 전환에 대한 추가 정보를 지정합니다. 가능한 값은 POWER_ACTION 형식의 열거자입니다.

출력 매개 변수

없음

I/O 상태 블록

드라이버는 Irp-IoStatus.Status>를 STATUS_SUCCESS 설정하여 디바이스가 요청된 상태를 입력할 수 있음을 나타냅니다. 드라이버는 요청된 상태를 입력할 수 없음을 나타내기 위해 적절한 오류 상태 설정합니다.

작업

IRP_MN_QUERY_POWER 매개 변수는 IRP_MN_SET_POWER 매개 변수와 동일합니다. 그러나 드라이버에게 전원 상태를 변경할 수 없음을 알리는 대신 IRP_MN_QUERY_POWER 시스템 또는 디바이스가 특정 전원 상태에 들어갈 수 있는지 여부를 쿼리합니다.

드라이버는 IRP_MN_QUERY_POWER 요청에 대한 응답으로 디바이스의 전원 상태를 변경하지 않아야 합니다.

드라이버가 Windows Server 2003, Windows XP 및 Windows 2000에서 IRP_MN_QUERY_POWER 요청을 받은 후 드라이버는 PoStartNextPowerIrp 호출에 설명된 대로 PoStartNextPowerIrp를 호출해야 합니다. Windows Vista부터 PoStartNextPowerIrp 호출은 필요하지 않으며 이러한 호출은 전원 관리 작업을 수행하지 않습니다.

시스템 전원 상태에 대한 IRP_MN_QUERY_POWER

전원 관리자는 네트워크 연결 삭제와 같은 작업을 중단하지 않고 시스템 전원 상태를 변경할 수 있도록 이 IRP를 보냅니다.

가능하면 전원 관리자는 IRP_MN_SET_POWER 보내기 전에 쿼리하여 시스템 절전 모드 상태 또는 정상적인 시스템 종료를 요청합니다. 그러나 일부 중요한 조건(예: 사용자가 전원 끄기 단추를 누르거나 배터리 만료)에서 파워 관리자는 먼저 쿼리 전원 요청을 보내지 않고 IRP_MN_SET_POWER 요청을 보낼 수 있습니다. 전원 관리자는 절전 상태만 쿼리합니다. 작업 상태로 돌아가기 전에 쿼리하지 않습니다.

드라이버가 시스템 파워 쿼리 IRP를 받으면 쿼리된 시스템 상태에 유효한 디바이스 상태를 지원할 수 없는 경우 IRP가 실패합니다. 자세한 내용은 DeviceState를 참조하세요. 그렇지 않으면 드라이버가 IRP를 다음 하위 드라이버에 전달해야 합니다. 버스 드라이버가 IRP를 완료합니다.

Windows Vista부터 시스템 절전 모드 상태로 전환은 중요한 작업으로 간주됩니다. 드라이버가 시스템 쿼리 전원 IRP에 실패할 수 있지만 전원 관리자는 여전히 시스템 전원 상태를 절전 상태로 변경할 수 있습니다. 드라이버가 시스템 쿼리 전원 IRP를 받은 후에는 항상 시스템 전원 상태의 후속 변경에 대비해야 합니다.

디바이스 전원 정책 소유자가 시스템 파워 쿼리 IRP를 수신하는 경우 이를 전달하기 전에 IRP에서 IoCompletion 루틴을 설정해야 합니다. IoCompletion 루틴에서는 쿼리된 시스템 상태에 유효한 디바이스 상태에 대한 IRP_MN_QUERY_POWER 보내야 합니다. 자세한 내용은 디바이스 전원 정책 소유자에서 시스템 Query-Power IRP 처리를 참조하세요.

IRP가 PowerSystemShutdown (S5)을 지정하는 경우 Parameters.Power.ShutdownType 의 값은 종료 이유를 제공합니다. ShutdownType은 시스템이 다시 설정 중인지(PowerActionShutdownReset) 또는 전원을 무기한 해제하여 나중에 다시 부팅하는지 여부를 드라이버에 알립니다(PowerActionShutdownOff). 대부분의 디바이스 드라이버의 경우 차이점은 중요하지 않습니다. 그러나 DMA를 수행하는 비디오 스트리밍 디바이스와 같은 특정 디바이스의 경우 시스템이 초기화될 때 드라이버가 디바이스의 전원을 끊도록 선택하여 진행 중인 I/O를 중지할 수 있습니다.

Microsoft Windows 2000 이상 시스템에서 ShutdownType 의 값은 PowerActionShutdown일 수도 있습니다. 이 경우 드라이버는 어떤 유형의 종료가 요청되었는지 알 수 없으므로 초기화를 진행해야 합니다.

드라이버가 시스템 전원 상태에 대한 IRP_MN_QUERY_POWER 요청에 실패하면 일반적으로 전원 관리자는 IRP_MN_SET_POWER IRP를 실행하여 응답합니다. 일반적으로 이 IRP는 현재 시스템 상태를 재확인합니다. 그러나 드라이버가 쿼리된 상태 또는 다른 중간 상태에 대한 IRP_MN_SET_POWER 받을 수 있습니다. 드라이버는 이러한 상황을 처리할 준비가 되어 있어야 합니다.

디바이스 전원 상태에 대한 IRP_MN_QUERY_POWER

디바이스 전원 정책 소유자는 시스템 IRP_MN_QUERY_POWER 요청에 대한 응답으로 이 IRP를 스택으로 보냅니다.

드라이버가 요청된 디바이스 상태에 디바이스를 배치할 수 있는 경우 IoStatus.Status 를 STATUS_SUCCESS 설정하고 IRP를 다음 하위 드라이버로 전달하는 등 IRP가 버스 드라이버에 도달할 때까지 전달합니다. 스택의 드라이버가 IRP에 실패해야 하는 경우 해당 드라이버는 IoCompleteRequest를 호출하고 오류 상태 반환하여 IRP를 즉시 완료해야 합니다. IRP에 실패한 드라이버는 스택 아래로 더 이상 전달하지 않습니다.

STATUS_SUCCESS 반환하면 드라이버는 요청된 전원 상태를 설정하는 기능을 변경하는 작업을 시작하지 않도록 보장합니다. 드라이버는 디바이스를 허용 가능한 전원 상태로 반환하는 설정 전원 IRP를 완료할 때까지 이러한 작업이 필요한 모든 IRP를 큐에 대기해야 합니다.

Windows 2000 이상 시스템에서 IRP가 PowerDeviceD1, PowerDeviceD2 또는 PowerDeviceD3을 지정하는 경우 Parameters.Power.ShutdownType의 값은 시스템 전원 IRP가 활성 상태인 경우 현재 시스템 전원 IRP에 대한 정보를 제공합니다. 이 경우 ShutdownType 의 값은 현재 요청된 시스템 전원 상태를 나타내고 시스템 요청이 미해결 상태인 경우 PowerActionNone 을 나타냅니다. Windows 98/Me에서 IRP가 디바이스 전원 상태를 요청할 때 이 필드에는 항상 PowerActionNone 이 포함됩니다.

요구 사항

헤더

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

추가 정보

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

PoRequestPowerIrp

PoStartNextPowerIrp