다음을 통해 공유


WdfDeviceAssignS0IdleSettings 함수(wdfdevice.h)

[KMDF 및 UMDF에 적용]

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

구문

NTSTATUS WdfDeviceAssignS0IdleSettings(
  [in] WDFDEVICE                              Device,
  [in] PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
);

매개 변수

[in] Device

프레임워크 디바이스 개체에 대한 핸들입니다.

[in] Settings

호출자가 제공한 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조체에 대한 포인터입니다.

반환 값

작업이 성공하면 WdfDeviceAssignS0IdleSettings 는 STATUS_SUCCESS 반환합니다. 추가 반환 값은 다음과 같습니다.

반환 코드 설명
STATUS_INVALID_DEVICE_REQUEST
호출 드라이버는 디바이스의 전원 정책 소유자가 아닙니다.
STATUS_INVALID_PARAMETER
잘못된 설정 값이 검색되었습니다.
STATUS_INFO_LENGTH_MISMATCH
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조체의 크기가 잘못되었습니다.
STATUS_POWER_STATE_INVALID
다음 중 하나가 발생하면 이 값이 반환됩니다.
  • WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조에 잘못된 디바이스 전원 상태가 포함되어 있습니다.
  • WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조의 IdleCaps 멤버는 디바이스가 자체 절전 모드를 해제할 수 있음을 나타내지만 버스 드라이버는 디바이스가 자체 절전 모드를 해제할 수 없음을 나타냅니다.
  • Windows 8 실행되는 KMDF 버전 1.11부터 프레임워크는 시스템이 완전히 켜진(S0) 전원 상태에 있는 동안 시스템의 펌웨어가 절전 모드 해제 신호를 처리할 수 있는지 확인합니다. 컴퓨터가 이 검사 실패하면 WdfDeviceAssignS0IdleSettingsSTATUS_POWER_STATE_INVALID 반환하고 시스템이 S0에 남아 있는 한 디바이스가 완전히 켜진(D0) 전원 상태를 유지합니다.

    이 경우 드라이버는 EvtDriverDeviceAdd 또는 다른 런타임 콜백에서 오류 상태 값을 반환해서는 안 됩니다. 드라이버는 디바이스가 평소보다 더 많은 전력을 소비한다는 오류를 기록할 수 있습니다.

 

메서드는 다른 NTSTATUS 값을 반환할 수 있습니다.

드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.

설명

드라이버가 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGSIdleTimeoutType 멤버를 SystemManagedIdleTimeout 또는 SystemManagedIdleTimeoutWithHint로 설정하는 경우 EvtDeviceD0Entry에서 반환하기 전에 WdfDeviceAssignS0IdleSettings를 호출해야 합니다. 일반적으로 드라이버는 먼저 EvtDriverDeviceAdd에서 WdfDeviceAssignS0IdleSettings를 호출합니다.

WdfDeviceAssignS0IdleSettings에 대한 추가 호출은 언제든지 수행할 수 있습니다. 그러나 드라이버가 WdfDeviceAssignS0IdleSettings에 대한 첫 번째 호출에서 IdleTimeoutType 멤버의 값을 설정한 후에는 이 메서드에 대한 이후 호출에서 이 값을 변경하지 않아야 합니다.

드라이버가 EvtDriverDeviceAdd 에서 비동기 알림을 등록하는 경우(예: PoRegisterPowerSettingCallback 또는 IoRegisterPlugPlayNotification 호출) 드라이버가 등록한 드라이버 콜백 루틴 내에서 WdfDeviceAssignS0IdleSettings 를 호출하면 안 됩니다.

자세한 내용은 유휴 전원 다운 지원을 참조하세요.

예제

다음 코드 예제에서는 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조를 초기화하고 유휴 시간 제한 값을 10초로 설정하고 WdfDeviceAssignS0IdleSettings를 호출합니다.

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS  idleSettings;
NTSTATUS  status = STATUS_SUCCESS;

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
                                           &idleSettings,
                                           IdleCanWakeFromS0
                                           );
idleSettings.IdleTimeout = 10000;

status = WdfDeviceAssignS0IdleSettings(
                                       device,
                                       &idleSettings
                                       );
if (!NT_SUCCESS(status)) {
    return status;
}

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfdevice.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), FDOPowerPolicyOwnerAPI(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NonFDONotPowerPolicyOwnerAPI(kmdf)

추가 정보

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS

WdfDeviceAssignSxWakeSettings