IWDFIoTargetStateManagement::Start 메서드(wudfddi.h)

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

Start 메서드는 큐에 대기된 요청을 로컬 I/O 대상으로 보내기 시작합니다.

구문

HRESULT Start();

반환 값

작업이 성공하면 start가 S_OK 반환합니다. 그렇지 않으면 이 메서드는 오류 코드 중 하나를 반환할 수 있습니다.

반환 코드 설명
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_STATE)
디바이스가 제거되었습니다.
 

이 메서드는 Winerror.h에서 정의하는 다른 오류 코드 중 하나를 반환할 수 있습니다.

설명

드라이버가 복구 가능한 디바이스 오류를 검색할 수 있는 경우 드라이버가 IWDFIoTargetStateManagement::Stop 을 호출하여 로컬 I/O 대상에 대한 요청 전송을 일시적으로 중지한 다음, 나중에 Start 를 호출하여 요청 보내기를 다시 시작하도록 할 수 있습니다.

또한 드라이버가 IWDFUsbTargetPipe2::ConfigureContinuousReader 를 호출하여 USB 파이프에 대한 연속 판독기를 구성하는 경우 드라이버의 IPnpCallback::OnD0Entry 콜백 함수가 Start 를 호출하여 판독기를 시작해야 합니다.

드라이버는 StartIWDFIoTargetStateManagement::Stop 을 동기적으로 호출해야 합니다. 드라이버가 이러한 함수 중 하나를 호출한 후에는 첫 번째 함수가 반환되기 전에 다른 함수를 호출하면 안 됩니다.

시작에 대한 자세한 내용은 UMDF에서 일반 I/O 대상의 상태 제어를 참조하세요.

I/O 대상에 대한 자세한 내용은 UMDF에서 I/O 대상 사용을 참조하세요.

예제

다음 코드 예제에서는 먼저 드라이버가 USB 파이프 개체에 대한 IWDFIoTargetStateManagement 인터페이스를 가져오는 방법을 보여 줍니다. 그런 다음, 코드 예제에서는 드라이버가 USB 파이프에 연속 판독기를 사용하는 경우 IPnpCallback::OnD0Entry 콜백 함수가 Start를 호출하는 방법을 보여 줍니다.


    IWDFIoTargetStateManagement * m_pIoTargetInterruptPipeStateMgmt = NULL;

    IWDFUsbTargetFactory *  pIUsbTargetFactory = NULL;
    IWDFUsbTargetDevice *   pIUsbTargetDevice = NULL;
    IWDFUsbInterface *      pIUsbInterface = NULL;
    IWDFUsbTargetPipe *     pIUsbPipe = NULL;

    hr = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pIUsbTargetFactory));
    if (FAILED(hr))
    {...}
    hr = pIUsbTargetFactory->CreateUsbTargetDevice(&pIUsbTargetDevice);
    if (FAILED(hr))
    {...}
    hr = pIUsbTargetDevice->RetrieveUsbInterface(0, &pIUsbInterface);
    if (FAILED(hr))
    {...}
    NumEndPoints = pIUsbInterface->GetNumEndPoints();
    for (UCHAR PipeIndex = 0; PipeIndex < NumEndPoints; PipeIndex++)
    {
        hr = pIUsbInterface->RetrieveUsbPipeObject(PipeIndex, &pIUsbPipe);
        if (FAILED(hr))
        {...}
        else
        {
            if (pIUsbPipe->IsInEndPoint())
            {
                if (UsbdPipeTypeInterrupt == pIUsbPipe->GetType())
                {
                    m_pIUsbInterruptPipe = pIUsbPipe;
                    hr = m_pIUsbInterruptPipe->QueryInterface(IID_PPV_ARGS(&m_pIoTargetInterruptPipeStateMgmt));
                    if (FAILED(hr))
                    {...}
                }
            }
        }
    } 

HRESULT
CMyDevice::OnD0Entry(
    __in IWDFDevice*  pWdfDevice,
    __in WDF_POWER_DEVICE_STATE  previousState
    )
{
...
    m_pIoTargetInterruptPipeStateMgmt->Start();
...
    return S_OK;
}

요구 사항

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

추가 정보

IWDFIoTargetStateManagement

IWDFRemoteTarget::Stop