다음을 통해 공유


WdfDeviceStopIdle 매크로(wdfdevice.h)

[KMDF 및 UMDF에 적용]

WdfDeviceStopIdle 메서드는 지정된 디바이스가 작동 중(D0) 전원 상태에 있어야 한다고 프레임워크에 알릴 수 있습니다.

구문

NTSTATUS WdfDeviceStopIdle(
   _In_ WDFDEVICE Device,
   _In_ BOOLEAN WaitForD0
);

매개 변수

[in] Device

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

[in] WaitForD0

WdfDeviceStopIdle이 반환되는 시기를 나타내는 부울 값입니다. TRUE이면 지정된 디바이스가 D0 디바이스 전원 상태를 입력한 후에만 반환됩니다. FALSE이면 메서드가 즉시 반환됩니다.

반환 값

없음

설명

이 매크로는 다음 값을 반환할 수 있습니다.

반환 값 의미
STATUS_PENDING 디바이스가 비동기적으로 전원이 공급되고 있습니다.
STATUS_INVALID_DEVICE_STATE 드라이버는 디바이스의 전원 정책 소유자가 아닙니다.
STATUS_POWER_STATE_INVALID 디바이스 오류가 발생하여 디바이스가 D0 전원 상태를 입력할 수 없습니다.

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

참고

WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE 열거형에서 SystemManagedIdleTimeout 또는 SystemManagedIdleTimeoutWithHint를 지정하는 디바이스의 경우 WaitForD0FALSE로 설정된 WdfDeviceStopIdle을 호출할 때 디바이스가 여전히 D0에 있고 유휴 시간 제한 기간이 아직 경과하지 않은 경우 WDF 버전 1.33/2.33부터 WdfDeviceStopIdle은 STATUS_SUCCESS 반환합니다(이전 버전에서는 반환 값이 STATUS_PENDING).

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

디바이스가 유휴 상태가 될 때 저전력 상태로 전환할 수 있는 경우 드라이버가 WdfDeviceStopIdle 을 호출하여 디바이스를 작동(D0) 상태로 되돌리거나 저전력 상태로 전환하지 못하도록 해야 할 수 있습니다.

WdfDeviceStopIdle 은 시스템이 Sx 절전 상태로 변경되는 경우 프레임워크가 디바이스를 절전 상태로 전환하는 것을 방지하지 않습니다. 유일한 효과는 시스템이 S0 작업 상태에 있는 동안 Dx 절전 상태로의 전환을 방지하는 것입니다. 마찬가지로 디바이스에서 지시된 전원 관리를 지원하는 경우 WdfDeviceStopIdle 은 디바이스가 전원이 완전히 낮아지는 것을 방지하지 않습니다.

경고

전원이 다운되는 동안 직접 또는 간접적으로 WaitForD0 = TRUE를 사용하여 WdfDeviceStopIdle을 호출하지 마세요. 예를 들어 EvtDeviceArmWakeFromS0 콜백이 를 호출 WdfDeviceStopIdle(TRUE)하는 다른 스레드에서 대기하는 경우 전원 전환이 차단되고 시스템이 충돌합니다.

디바이스가 유휴 상태이고 프레임워크가 디바이스의 전원 관리 I/O 큐에 I/O 요청을 배치할 때 드라이버는 WdfDeviceStopIdle을 호출할 필요가 없습니다. 또한 디바이스가 유휴 상태이고 절전 모드 해제 신호를 감지할 때 드라이버는 WdfDeviceStopIdle을 호출할 필요가 없습니다. 두 경우 모두 프레임워크는 버스 드라이버에 디바이스의 전원 상태를 D0으로 복원하도록 요청합니다.

일반적으로 드라이버는 전원 관리 I/O 큐에서 가져오는 I/O 요청을 처리할 때 WdfDeviceStopIdle 을 호출할 필요가 없지만 호출이 허용됩니다. 그러나 전원 관리형 I/O 큐에서 I/O 요청을 처리할 때 드라이버는 WaitForD0 매개 변수를 TRUE 로 설정해서는 안 됩니다.

드라이버가 전원 관리 I/O 큐 외부에서 받은 요청으로 인해 디바이스에 액세스해야 하는 경우 드라이버가 WdfDeviceStopIdle을 호출해야 합니다. 예를 들어 드라이버는 디바이스에 액세스해야 하는 드라이버 정의 인터페이스 또는 WMI 요청을 지원할 수 있습니다. 이 경우 드라이버가 디바이스에 액세스하기 전에 디바이스가 작동 상태이고 드라이버가 디바이스에 대한 액세스를 완료할 때까지 디바이스가 작동 상태로 유지되는지 확인해야 합니다.

WdfDeviceStopIdle을 호출하면 시스템이 작동 중(S0) 상태인 경우 디바이스가 작동(D0) 상태로 강제 적용됩니다. 드라이버가 WdfDeviceResumeIdle을 호출할 때까지 디바이스는 작동 상태로 유지되며, 이 시점에서 프레임워크는 유휴 상태로 유지되는 경우 디바이스를 저전력 상태로 배치할 수 있습니다.

프레임워크가 처음으로 드라이버의 EvtDeviceD0Entry 콜백 함수를 호출하기 전에 WdfDeviceStopIdle을 호출하지 마세요.

WdfDeviceStopIdle에 대한 호출은 시스템이 S0(작동) 상태인 경우에만 유휴 디바이스를 작동 상태로 복원할 수 있습니다. 드라이버가 WaitForD0 매개 변수가 TRUE로 설정된 WdfDeviceStopIdle을 호출할 때 Sx(여기서 x > 0)에 대한 응답으로 시스템이 저전력 상태로 전환 중이거나 디바이스의 전원이 이미 다운된 경우 시스템이 S0 상태로 돌아갈 때까지 함수가 반환되지 않습니다.

WdfDeviceStopIdle에 대한 모든 성공적인 호출은 결국 WdfDeviceResumeIdle을 호출해야 합니다. 그렇지 않으면 디바이스가 다시 유휴 상태가 되면 저전력 상태로 돌아가지 않습니다. WdfDeviceStopIdle에 대한 호출은 중첩될 수 있으므로 WdfDeviceResumeIdle에 대한 호출 수는 WdfDeviceStopIdle에 대한 호출 수와 같아야 합니다. WdfDeviceStopIdle에 대한 호출이 실패하는 경우 WdfDeviceResumeIdle을 호출하지 마세요.

WdfDeviceStopIdle이 반환된 후 시스템이 저전력 상태로 전환되면 디바이스도 저전력 상태로 전환됩니다. 시스템이 작동(S0) 상태로 돌아오면 디바이스도 작동(D0) 상태로 돌아갑니다. WdfDeviceStopIdle 호출의 전원 참조는 활성 상태로 유지되며 WdfDeviceResumeIdle에 일치하는 호출이 있을 때까지 디바이스가 저전력 상태로 전환되지 않도록 합니다.

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

WaitForD0TRUE이면 IRQL = PASSIVE_LEVEL WdfDeviceStopIdle을 호출해야 합니다. WaitForD0FALSE이면 IRQL <= DISPATCH_LEVEL 이 메서드를 호출해야 합니다.

WdfDeviceStopIdle 대신 WdfDeviceStopIdleWithTag를 호출하면 Microsoft 디버거에서 볼 수 있는 추가 정보(태그 값, 줄 번호 및 파일 이름)가 제공됩니다.

예제

다음 코드 예제에서 WdfDeviceStopIdle 은 지정된 디바이스가 D0 디바이스 전원 상태를 입력한 후 를 반환합니다.

NTSTATUS  status;

status = WdfDeviceStopIdle(Device, TRUE);

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfdevice.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL 설명 섹션을 참조하십시오.
DDI 규정 준수 규칙 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

추가 정보