다음을 통해 공유


유휴 Power-Down 지원하기

일부 디바이스는 시스템이 작동 중(S0) 상태로 유지되는 동안 저전력(Dx) 상태로 들어갈 수 있습니다. Windows 8부터 디바이스는 Dx 상태로 전환하기 전에 저전력 기능 전원 상태(Fx)로 전환할 수 있습니다. 이러한 디바이스의 경우 프레임워크는 디바이스가 미리 결정된(및 설정 가능한) 시간 동안 유휴 상태(사용되지 않음)된 후 디바이스 또는 구성 요소의 전원을 낮추기 시작합니다.

이러한 디바이스 중 일부는 외부 이벤트를 감지할 때 버스에서 기상 신호를 트리거할 수도 있습니다. 버스 드라이버는 이 신호에 응답하고 드라이버 스택은 디바이스를 작동 상태로 복원합니다. (외부 이벤트를 감지하지 않는 디바이스는 프레임워크가 버스 드라이버에 디바이스를 작동 상태로 복원하도록 요청할 때까지 저전력 상태로 유지됩니다.)

디바이스 또는 구성 요소가 유휴 상태일 때 전원을 끌 수 있는 경우 전원 정책 소유자EvtDriverDeviceAdd 콜백 함수는 다음 두 단계를 수행해야 합니다.

  1. WdfDeviceAssignS0IdleSettings 호출하여 다음을 지정합니다.

    • 디바이스가 입력할 저전력 상태
    • 전원 상태를 낮추기 전에 디바이스 유휴 상태로 유지해야 하는 시간입니다.
    • 디바이스가 외부 이벤트를 감지하고 버스에서 절전 모드 해제 신호를 트리거할 수 있는지 여부
    • 사용자가 디바이스의 유휴 설정을 제어할 수 있는지 여부
    • 디바이스의 유휴 전원 절전 기능을 사용할 수 있는지 또는 사용하지 않도록 설정되었는지 여부
    • 시스템이 작동 중(S0) 상태로 돌아갈 때 디바이스가 작동(D0) 상태로 돌아갈지 여부
    • 디바이스의 유휴 시간 제한 값이 PoFx(전원 관리 프레임워크)에 의해 결정되는지 여부
    • 유휴 시간 제한 기간이 만료될 때 프레임워크에서 디바이스를 D3cold 전원 상태에 넣을 수 있는지 여부

    이러한 설정에 대한 자세한 내용은 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조뿐만 아니라 기능 전원 상태 지원 참조하세요.

  2. WdfDeviceInitSetPowerPolicyEventCallbacks 호출하여 디바이스에 필요한 경우 다음 이벤트 콜백 함수를 등록합니다.

    • EvtDeviceArmWakeFromS0- 디바이스 하드웨어(버스 아님)가 외부 깨우기 이벤트에 응답할 수 있도록 합니다.
    • EvtDeviceDisarmWakeFromS0, 장치의 능력을 (버스의 능력이 아님) 외부 웨이크업 이벤트에 반응하지 못하게 비활성화하는 기능입니다.
    • EvtDeviceWakeFromS0Triggered는 버스가 절전 모드 해제 신호를 감지했음을 드라이버에게 알립니다.

유휴 상태

프레임워크는 디바이스를 유휴 상태로 간주하고 다음 조건이 모두 충족되면 유휴 시간 계산을 시작합니다.

  • 이 장치 인스턴스에 대해 생성된 전원 관리 큐 중 어느 것도 큐에서 대기하거나 드라이버에 전달된 요청이 없습니다. 요청이 드라이버에 디스패치된 후 그 드라이버가 요청을 I/O 대상으로 보낸 경우에도 요청은 여전히 큐와 관련이 있습니다. 드라이버가 요청을 보내기 위해 보내기 및 잊기 옵션 사용하지 않는 한 디바이스는 유휴 상태로 간주되지 않습니다. 비전력 관리 큐의 요청은 디바이스 유휴 상태로 계산되지 않습니다.
  • 이전에 WdfDeviceStopIdle호출한 드라이버가 이후에 WdfDeviceResumeIdle호출했습니다.
  • 전원 정책 소유자가 버스 드라이버인 경우 버스 드라이버의 자식 디바이스는 D0에 없습니다.

드라이버(또는 사용자)가 디바이스의 유휴 전원 차단을 활성화한 경우, WdfDeviceStopIdle 메서드를 사용해야 할 수 있습니다. 디바이스가 작동 중(D0) 상태인 경우 이 메서드는 드라이버가 WdfDeviceResumeIdle호출할 때까지 디바이스가 유휴 상태가 되지 않도록 합니다. 드라이버가 WdfDeviceStopIdle호출할 때 디바이스가 저전력 상태이고 시스템이 작동 중(S0) 상태인 경우 프레임워크는 버스 드라이버에 디바이스를 작동(D0) 상태로 복원하도록 요청합니다. WdfDeviceStopIdle 대한 모든 성공적인 호출은 WdfDeviceResumeIdle대한 호출과 일치해야 합니다. 디버거에서 전원 참조 수를 확인하는 방법에 대한 정보는 WDF 전원 참조 누수 디버깅 을(를) 참조하세요.

드라이버가 WdfDeviceStopIdle호출해야 하는 경우에 대한 자세한 내용은 메서드의 참조 페이지를 참조하세요.

디바이스가 저전력 상태에서 절전 모드를 해제할 수 있는 경우 디바이스 버스용 드라이버가 디바이스를 깨우는 데 참여합니다. 버스 드라이버는 일반적으로 EvtDeviceEnableWakeAtBusEvtDeviceDisableWakeAtBus 콜백 함수를 제공합니다. 이러한 함수는 저전력 상태에서 깨어나는 장치의 기능을 활성화하고 비활성화하기 위해 버스 어댑터에서 필요한 모든 작업을 수행합니다.

디바이스의 유휴 기능을 제어하는 레지스트리 항목에 대한 자세한 내용은 디바이스 유휴 및 절전 모드 해제 동작 사용자 제어를 참조하세요.