다음을 통해 공유


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 값을 반환할 수 있습니다.

비고

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

드라이버에서 잘못된 개체 핸들을 제공하면 버그 검사가 수행됩니다.

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

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

경고

전원이 켜지는 동안 WaitForD0 = TRUEWdfDeviceStopIdle 직접 또는 간접적으로 호출하지 마세요. 예를 들어 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 상태로 돌아갈 때까지 함수가 반환되지 않습니다. 마찬가지로, 디바이스가 지시된 전원 관리지원하고 전원 하위 시스템이 전원이 닫히기 시작한 경우 WaitForD0 매개 변수가 TRUE설정된 WdfDeviceStopIdle 호출은 전원 하위 시스템이 디바이스에 전원을 백업하도록 지시할 때까지 반환되지 않습니다.

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

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

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

WaitForD0 TRUE 경우 WdfDeviceStopIdle IRQL = PASSIVE_LEVEL 호출해야 합니다. WaitForD0 FALSE 경우 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)

참고하십시오