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

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

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

구문

HRESULT StopIdle(
  [in] BOOL WaitForD0
);

매개 변수

[in] WaitForD0

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

반환 값

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

반환 코드 설명
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
호출 드라이버는 디바이스의 전원 정책 소유자가 아닙니다.
HRESULT_FROM_NT(STATUS_PENDING)
디바이스가 이미 작동 상태로 돌아왔습니다.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
디바이스 오류가 발생하여 디바이스가 D0 전원 상태를 입력할 수 없습니다.
 

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

설명

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

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

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

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

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

프레임워크가 드라이버의 IPnpCallback::OnD0Entry 콜백 메서드를 처음으로 호출하기 전에 StopIdle을 호출하지 마세요.

StopIdle에 대한 호출은 시스템이 작동 중(S0) 상태인 경우에만 유휴 디바이스를 작동 상태로 복원할 수 있습니다. 드라이버가 WaitForD0 매개 변수가 TRUE로 설정된 StopIdle을 호출할 때 시스템이 저전력 상태로 전환되면 시스템이 S0 상태로 돌아갈 때까지 함수가 반환되지 않습니다.

StopIdle에 대한 모든 호출은 결국 ResumeIdle을 호출해야 합니다. 그렇지 않으면 디바이스가 다시 유휴 상태가 되면 저전력 상태로 돌아가지 않습니다. StopIdle에 대한 호출은 중첩될 수 있으므로 ResumeIdle에 대한 호출 수는 StopIdle에 대한 호출 수와 같아야 합니다.

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

예제

다음 코드 예제에서는 IWDFDevice2 인터페이스를 가져온 다음 StopIdle을 호출합니다. StopIdle 은 디바이스가 D0 디바이스 전원 상태로 전환된 후 반환됩니다.

    IWDFDevice2 *pIWDFDevice2 = NULL;
    HRESULT hr;

    //
    // Get a pointer to the IWDFDevice2 interface.
    //
    hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
                                     (void**) &pIWDFDevice2);
    if (SUCCEEDED(hr)) 
    {
        hr = pIWDFDevice2->StopIdle(TRUE);
    }
...
   SAFE_RELEASE(pIWDFDevice2);

요구 사항

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

추가 정보

IWDFDevice2

IWDFDevice2::ResumeIdle