다음을 통해 공유


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 요청을 보낼 수 있습니다. Power Manager는 절전 상태만 쿼리합니다. 작업 상태로 돌아가기 전에 쿼리하지 않습니다.

드라이버가 시스템 파워 쿼리 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_SET_POWER

PoRequestPowerIrp

PoStartNextPowerIrp