WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조체(wdfdevice.h)

[KMDF 및 UMDF에 적용]

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조에는 디바이스가 유휴 상태이고 시스템이 S0(시스템 작업 상태)에 있을 때 프레임워크에서 사용하는 드라이버 제공 정보가 포함됩니다.

구문

typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS {
  ULONG                                 Size;
  WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps;
  DEVICE_POWER_STATE                    DxState;
  ULONG                                 IdleTimeout;
  WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings;
  WDF_TRI_STATE                         Enabled;
  WDF_TRI_STATE                         PowerUpIdleDeviceOnSystemWake;
  WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE    IdleTimeoutType;
  WDF_TRI_STATE                         ExcludeD3Cold;
} WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS;

멤버

Size

이 구조체의 크기(바이트)입니다.

IdleCaps

시스템이 작동 중(S0) 상태로 유지되는 동안 저전력 상태로 설정된 후 디바이스의 절전 모드 해제 기능을 식별하는 WDF_POWER_POLICY_S0_IDLE_CAPABILITIES 형식의 열거자입니다.

DxState

유휴 시간 제한 기간이 종료된 후 디바이스가 입력할 낮은 디바이스 전원 상태를 식별하는 DEVICE_POWER_STATE 형식의 열거자입니다. DEVICE_POWER_STATE 값은 wdm.h에 정의됩니다.

IdleTimeout

프레임워크가 DxState에서 제공하는 저전력 상태로 배치하기 전에 디바이스가 유휴 상태로 유지되는 시간(밀리초)입니다. 프레임워크의 기본 유휴 시간 제한 값을 사용하려면 IdleTimeoutDefaultValue를 지정합니다. 프레임워크가 디바이스를 유휴 상태로 간주하는 경우에 대한 자세한 내용은 유휴 전원 다운 지원을 참조하세요.

UserControlOfIdleSettings

사용자가 디바이스의 유휴 설정을 수정할 수 있는지 여부를 나타내는 WDF_POWER_POLICY_S0_IDLE_USER_CONTROL 형식의 열거자입니다.

Enabled

디바이스가 유휴 상태로 유지되고 시스템 전원이 S0에 있는 동안 디바이스의 전원이 다운되는지 여부를 나타내는 WDF_TRI_STATE 형식의 열거자입니다. 이 멤버는 다음 값 중 하나를 가질 수 있습니다.

WdfTrue - 전원을 낮출 수 있습니다.

WdfFalse - 전원을 닫을 수 없습니다.

WdfUseDefault - 처음에 전원을 낮추면 기본적으로 사용하도록 설정됩니다. 그러나 UserControlOfIdleSettings 멤버가 IdleAllowUserControl로 설정된 경우 사용자의 설정 또는 드라이버의 INF 파일이 초기 값을 재정의합니다.

전원을 끕니다. 디바이스에 절전 모드 해제 기능이 있고 유휴 시간 제한 값이 만료되면 프레임워크는 디바이스가 저전력 상태가 되기 전에 드라이버의 EvtDeviceArmWakeFromS0 콜백 함수를 호출합니다.

PowerUpIdleDeviceOnSystemWake

시스템이 작동 중(S0) 상태로 돌아갈 때 디바이스가 작동(D0) 상태로 돌아갈지 여부를 나타내는 WDF_TRI_STATE 형식의 열거자입니다. 이 멤버는 드라이버가 IdleCaps 멤버를 IdleCannotWakeFromS0으로 설정하는 경우에만 유효합니다. PowerUpIdleDeviceOnSystemWake 멤버는 다음 값 중 하나를 가질 수 있습니다.

WdfTrue - 디바이스와 시스템이 모두 저전력 상태인 경우 시스템이 작동 상태로 돌아오면 디바이스가 작동 상태로 돌아갑니다.

WdfFalse - 디바이스와 시스템이 모두 저전력 상태인 경우 시스템이 작동 상태로 돌아올 때 디바이스는 저전력 상태로 유지됩니다.

WdfUseDefault - 드라이버가 다른 값을 설정하지 않은 경우 프레임워크에서 사용하는 기본값입니다. 이 값은 WdfFalse와 동일한 의미를 줍니다.

PowerUpIdleDeviceOnSystemWake 멤버가 WdfFalse 또는 WdfUseDefault로 설정된 경우 애플리케이션이 디바이스에 I/O 요청을 보내는 경우와 같이 소프트웨어가 디바이스에 액세스할 때만 디바이스가 작동 상태로 돌아갑니다. 자세한 내용은 디바이스가 작동 상태로 돌아옵니다를 참조하세요.

PowerUpIdleDeviceOnSystemWake 멤버는 버전 1.9 이상 KMDF에서 사용할 수 있으며 UMDF 버전 2.0부터 사용할 수 있습니다.

IdleTimeoutType

IdleTimeout 멤버가 사용되는 방법을 나타내는 WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE 형식의 열거자입니다.

IdleTimeoutType 멤버는 1.11 이상 버전의 KMDF에서 사용할 수 있으며 UMDF 버전 2.0부터 사용할 수 있습니다. 주의에서 추가 정보를 참조하세요.

ExcludeD3Cold

유휴 시간 제한 기간이 만료될 때 디바이스가 입력할 저전력 상태에 대해 D3cold 전원 상태가 허용 가능한 선택인지 여부를 나타내는 WDF_TRI_STATE 형식의 열거자입니다. ExcludeD3Cold 멤버는 다음 값 중 하나를 가질 수 있습니다.

WdfTrue - 유휴 시간 제한 기간이 만료되면 프레임워크는 디바이스를 저전력 D 상태로 이동합니다. D-상태가 D3이면 디바이스가 D3hot으로 이동됩니다. ExcludeD3ColdWdfTrue로 설정된 경우 D3hot에서 D3cold로의 추가 전환이 허용되지 않습니다.

WdfFalse - 다음 조건을 모두 충족하는 경우 유휴 시간 제한 기간이 만료되면 디바이스가 D3cold 전원 상태를 입력할 수 있습니다.

  • 이 구조체의 DxState 멤버는 PowerDeviceD3 또는 PowerDeviceMaximum을 지정합니다.
  • ACPI 펌웨어는 디바이스가 D3cold 전원 상태를 지원한다는 것을 나타냅니다.
  • 드라이버가 이 구조체의 IdleCaps 멤버에 IdleCanWakeFromS0 또는 IdleUsbSelectiveSuspend를 지정한 경우 디바이스는 D3cold 전원 상태에 있는 동안 외부 절전 모드 해제 이벤트에 응답할 수 있습니다. 그렇지 않으면 이 요구 사항이 적용되지 않습니다.
WdfUseDefault - 프레임워크는 DDInstall을 검사합니다. 드라이버의 INF 파일의 HW 섹션입니다. 다음 줄이 있는 경우 이 값은 WdfFalse와 동일한 의미를 줍니다.
Include = machine.inf
Needs = PciD3ColdSupported
그렇지 않으면 이 값은 WdfTrue와 동일한 의미를 가짐

ExcludeD3Cold 멤버는 KMDF 버전 1.11부터 사용할 수 있으며 UMDF 버전 2.0부터 사용할 수 있으며 Windows 8 이전 운영 체제에서는 무시됩니다. 주의에서 추가 정보를 참조하세요.

설명

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조체는 WdfDeviceAssignS0IdleSettings에 대한 입력으로 사용됩니다.

드라이버가 WdfDeviceAssignS0IdleSettings를 처음 호출할 때 다음 작업이 발생합니다.

  • 프레임워크는 모든 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조체 멤버의 값을 저장합니다.
  • UserControlOfIdleSettings 멤버가 IdleAllowUserControl로 설정되어 있고 Enabled 멤버가 WdfUseDefault로 설정된 경우 프레임워크는 레지스트리를 읽어 사용자가 유휴 상태일 때 디바이스 전원을 낮출 수 있는지 확인합니다.
WdfDeviceAssignS0IdleSettings에 대한 후속 호출 중에 프레임워크는 DxState, IdleTimeoutEnabled 멤버의 값만 저장합니다. 또한 KMDF 1.9 이하에서는 값이 IdleUsbSelectiveSuspend아니면 프레임워크에서 IdleCaps 멤버의 값을 저장합니다. 따라서 드라이버는 다음 규칙을 사용해야 합니다.
  • 드라이버가 IdleCaps 멤버의 값에 대해 IdleUsbSelectiveSuspend를 지정하는 경우 WdfDeviceAssignS0IdleSettings를 처음 호출할 때 이 작업을 수행해야 하며 이후에는 해당 값을 변경할 수 없습니다.
  • 드라이버가 WdfDeviceAssignS0IdleSettings를 처음 호출할 때 IdleCanWakeFromS0 또는 IdleCannotWakeFromS0을 지정하는 경우 이후에 WdfDeviceAssignS0IdleSettings를 다시 호출하여 해당 값을 변경할 수 있지만 값을 IdleUsbSelectiveSuspend로 변경할 수는 없습니다.

KMDF 1.11 및 UMDF 2.0부터 KMDF 드라이버는 언제든지 IdleUsbSelectiveSuspendIdleCannotWakeFromS0 간에 전환할 수 있습니다.

Windows 8 시작하여 IdleTimeoutType 멤버를 SystemManagedIdleTimeout 또는 SystemManagedIdleTimeoutWithHint로 설정하면 프레임워크가 PoFx(전원 관리 프레임워크)에 등록됩니다.

드라이버가 다중 구성 요소 디바이스에 대한 기능 전원 상태 지원을 구현하는 경우 드라이버는 IdleTimeoutTypeDriverManagedIdleTimeout 으로 설정하거나 WdfDeviceAssignS0IdleSettings를 전혀 호출하지 않아야 합니다.

자세한 내용은 기능 전원 상태 지원전원 관리 프레임워크 개요를 참조하세요.

다음 규칙은 DxState 멤버에 대해 지정한 값에 적용됩니다.

  • 값은 PowerDeviceD0일 수 없습니다.
  • USB 디바이스의 경우 값은 PowerDeviceD0 또는 PowerDeviceD3일 수 없습니다.
  • PowerDeviceMaximum을 지정하는 경우 프레임워크는 해당 WDF_DEVICE_POWER_CAPABILITIES 구조의 DeviceWake 멤버에 제공된 디바이스 버스의 드라이버 값을 사용합니다.
  • IdleCaps 멤버의 값이 IdleCanWakeFromS0인 경우 버스 드라이버의 WDF_DEVICE_POWER_CAPABILITIES 구조의 DeviceWake 멤버에서 디바이스 전원 상태보다 낮은 디바이스 전원 상태를 지정할 수 없습니다. 즉, 버스 드라이버의 DeviceWake 값이 PowerDeviceD2인 경우 함수 드라이버의 DxState 값은 PowerDeviceD3일 수 없습니다.
Windows 8 이전의 운영 체제에서 D3 전원 상태는 디바이스가 저전력 상태이지만 버스에 대한 일부 전원이 여전히 유지됨을 나타냅니다. Windows 8 시작하여 이전 D3 전원 상태를 D3hot라고 하며 새 전원 상태(D3cold)를 사용할 수 있습니다. 시스템이 S0(작동 중) 상태이거나 저전력 상태인 동안 디바이스가 D3cold 상태로 들어갈 수 있습니다. 디바이스가 D3cold 전원 상태에 있는 경우 버스가 비활성 상태이며 외부 작업(예: 네트워크 케이블 연결)이 하드웨어 이벤트를 일으킬 때 디바이스가 자체 절전 모드 해제 신호를 트리거해야 합니다.

KMDF 1.11 및 UMDF 2.0부터 유휴 전원 다운을 지원하는 디바이스는 이 구조의 ExcludeD3Cold 멤버를 사용하여 D3cold 전원 상태가 유휴 시간 제한 기간이 종료된 후 디바이스가 입력할 낮은 디바이스 전원 상태에 대해 허용되는 선택인지 여부를 지정할 수 있습니다.

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

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조를 초기화하려면 드라이버가 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT 호출해야 합니다.

요구 사항

요구 사항
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfdevice.h(Wdf.h 포함)