다음을 통해 공유


IWDFDevice2::AssignS0IdleSettings 메서드(wudfddi.h)

[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한되어 있습니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF를 사용하여 시작 참조하세요.]

AssignS0IdleSettings 메서드는 디바이스가 유휴 상태이고 시스템이 S0(작동 중) 상태일 때 프레임워크에서 사용하는 드라이버 제공 정보를 제공합니다.

구문

HRESULT AssignS0IdleSettings(
  [in] WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps,
  [in] DEVICE_POWER_STATE                    DxState,
  [in] ULONG                                 IdleTimeout,
  [in] WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings,
  [in] WDF_TRI_STATE                         Enabled
);

매개 변수

[in] IdleCaps

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

[in] DxState

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

[in] IdleTimeout

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

[in] UserControlOfIdleSettings

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

[in] Enabled

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

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

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

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

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

반환 값

AssignS0IdleSettings는 작업이 성공하면 S_OK 반환합니다. 그렇지 않으면 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
E_INVALIDARG
호출자가 입력 매개 변수에 대해 잘못된 값을 지정했습니다.
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
호출 드라이버는 디바이스의 전원 정책 소유자가 아닙니다.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
DxState 매개 변수는 잘못된 디바이스 전원 상태를 지정하거나 IdleCaps 매개 변수는 디바이스가 자체 절전 모드를 해제할 수 있음을 나타내지만 버스 드라이버는 디바이스 자체를 절전 모드에서 해제할 수 없음을 나타냅니다.
 

이 메서드는 Winerror.h에 포함된 다른 값 중 하나를 반환할 수 있습니다.

설명

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

  • 프레임워크는 모든 매개 변수의 값을 저장합니다.
  • UserControlOfIdleSettings 매개 변수가 IdleAllowUserControl로 설정되어 있고 Enabled 매개 변수가 WdfUseDefault로 설정된 경우 프레임워크는 레지스트리를 읽어 사용자가 유휴 상태일 때 디바이스 전원을 낮출 수 있는지 확인합니다.
AssignS0IdleSettings에 대한 후속 호출 중에 프레임워크는 DxState, IdleTimeoutEnabled 매개 변수의 값만 저장합니다. 또한 프레임워크는 다음 규칙에 따라 IdleCaps 매개 변수의 값을 저장합니다.
  • 드라이버가 AssignS0IdleSettings에 대한 이전 호출에서 IdleCaps 매개 변수 값에 대해 IdleCanWakeFromS0을 지정한 경우 이후에 해당 값을 IdleUsbSelectiveSuspend로 변경할 수 없습니다.
  • 드라이버가 AssignS0IdleSettings에 대한 이전 호출에서 IdleCaps 매개 변수 값에 대해 IdleUsbSelectiveSuspend를 지정한 경우 이후에 해당 값을 IdleCanWakeFromS0으로 변경할 수 없습니다.

다음 규칙은 DxState 매개 변수에 대해 지정한 값에 적용됩니다.

  • 값은 PowerDeviceD0일 수 없습니다.
  • USB 디바이스의 경우 값은 PowerDeviceD0 또는 PowerDeviceD3일 수 없습니다.
  • DevicePowerMaximum을 지정하는 경우 프레임워크는 해당 WDF_DEVICE_POWER_CAPABILITIES 구조의 DeviceWake 멤버에 제공된 디바이스 버스의 커널 모드 드라이버 값을 사용합니다.
  • IdleCaps 매개 변수 값이 IdleCanWakeFromS0 또는 IdleUsbSelectiveSuspend인 경우 커널 모드 버스 드라이버의 WDF_DEVICE_POWER_CAPABILITIES 구조의 DeviceWake 멤버에서 디바이스 전원 상태보다 낮은 디바이스 전원 상태를 지정할 수 없습니다. 즉, 버스 드라이버의 DeviceWake 값이 PowerDeviceD2인 경우 함수 드라이버의 DxState 값은 PowerDeviceD3일 수 없습니다.
IdleTimeout 매개 변수에 대해 IdleTimeoutDefaultValue를 지정하는 경우 시간 제한은 기본적으로 5초입니다. !wudfext.wudfdevice!wudfext.umdevstacks 디버거 확장의 출력을 검사하여 효과적인 설정 및 전원 참조를 확인할 수 있습니다.

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

디바이스의 유휴 기능 지원에 대한 자세한 내용은 UMDF 기반 드라이버에서 유휴 Power-Down 지원을 참조하세요.

예제

다음 코드 예제는 토스터 샘플의 UMDF 버전을 기반으로 합니다. 이 예제에서는 IWDFDevice2 인터페이스를 가져온 다음 AssignS0IdleSettings를 호출합니다.

    IWDFDevice2 *pIWDFDevice2 = NULL;
    HRESULT hr;

    //
    // Get a pointer to the IWDFDevice2 interface.
    //
    hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
                                     (void**) &pIWDFDevice2);
    if (SUCCEEDED(hr)) 
    {
    //
    // The toaster device is virtual, so we tell the framework that the 
    // device cannot wake if it sleeps while the system is in S0. The device 
    // can return to D0 only when the driver stack receives an I/O request.
    //
    hr = pIWDFDevice2->AssignS0IdleSettings(IdleCannotWakeFromS0,
                                            PowerDeviceD3,
                                            IDLEWAKE_TIMEOUT_MSEC,
                                            IdleAllowUserControl,
                                            WdfTrue);
    }
...
    SAFE_RELEASE(pIWDFDevice2);

요구 사항

요구 사항
지원 종료 UMDF 2.0 이상에서는 사용할 수 없습니다.
대상 플랫폼 데스크톱
최소 UMDF 버전 1.9
머리글 wudfddi.h(Wudfddi.h 포함)
DLL WUDFx.dll

추가 정보

IWDFDevice2

IWDFDevice2::AssignSxWakeSettings

IWDFDevice3::AssignS0IdleSettingsEx