다음을 통해 공유


IWDFIoRequest::Send 메서드(wudfddi.h)

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

Send 메서드는 지정된 I/O 대상에 요청을 보냅니다.

통사론

HRESULT Send(
  [in] IWDFIoTarget *pIoTarget,
  [in] ULONG        Flags,
  [in] LONGLONG     Timeout
);

매개 변수

[in] pIoTarget

I/O 대상 개체에 대한 IWDFIoTarget 인터페이스에 대한 포인터로, 일반적으로 스택의 하위 드라이버를 나타냅니다.

[in] Flags

WDF_REQUEST_SEND_OPTIONS_FLAGS형식 플래그의 유효한 비트 OR입니다.

[in] Timeout

프레임워크가 I/O 요청을 자동으로 취소하기 전에 경과할 수 있는 시스템 시간 단위(100나노초 간격)의 시간입니다.

  • 값이 음수이면 만료 시간은 현재 시스템 시간을 기준으로 합니다.
  • 값이 양수이면 만료 시간이 절대 시간(1601년 1월 1일 기준)으로 지정됩니다.
  • 값이 0이면 프레임워크에서 요청 시간을 초과하지 않습니다.
상대 만료 시간은 지정된 제한 시간 내에 발생할 수 있는 시스템 시간 변경의 영향을 받지 않습니다. 절대 만료 시간은 시스템 시간 변경을 반영합니다.

반환 값

보내기 작업이 성공하면 S_OK 반환합니다. 그렇지 않으면 이 메서드는 Winerror.h에 정의된 오류 코드 중 하나를 반환합니다.

반환 값은 I/O 요청을 I/O 대상으로 보내려는 Send 메서드의 시도 상태를 나타냅니다. 반환 값은 I/O 요청의 완료 상태를 나타내지 않습니다. 드라이버는 I/O 요청의 완료 상태를 얻으려면 IWDFRequestCompletionParams 인터페이스를 사용해야 합니다.

발언

Send 오류 코드를 반환하는 경우 드라이버는 일반적으로 다음 예제 섹션의 코드와 같이 send 반환할 있는 오류 코드로 요청을 완료해야 합니다.

드라이버가 Flags 매개 변수에서 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 플래그를 설정하고 보내기 I/O 요청을 I/O 대상으로 성공적으로 보내는 경우 I/O 대상이 I/O 요청을 완료한 후 보내기 반환됩니다. 이 경우 Send S_OK 반환하고 드라이버는 IWDFIoRequest::GetCompletionParams 즉시 호출하여 IWDFRequestCompletionParams 인터페이스를 가져올 수 있습니다. IWDFIoRequest::GetCompletionParams 코드 예제에서는 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 플래그가 설정된 보내기 호출을 보여 줍니다.

드라이버가 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 플래그를 설정하지 않고 Send I/O 요청을 I/O 대상으로 성공적으로 보내는 경우 보내기 I/O 대상이 I/O 요청을 비동기적으로 처리하는 동안 S_OK 반환합니다. 이 경우 드라이버는 I/O 대상이 I/O 요청을 완료한 후 프레임워크가 호출하는 IRequestCallbackRequestCompletion::OnCompletion 콜백 함수를 제공합니다. 일반적으로 OnCompletion 콜백 함수는 IWDFIoRequest::GetCompletionParams 호출합니다. 다음 예제 섹션의 코드 예제에서는 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 플래그 없이 보내기 호출을 보여 드립니다.

드라이버가 파이프에 대한 연속 판독기 구성한 경우 드라이버는 송신 호출하여 USB 파이프에 I/O 요청을 보낼 수 없습니다.

예제

다음 코드 예제에서는 디바이스의 I/O 대상에 요청을 전달합니다.

    IWDFIoRequest* FxRequest;

    //
    // Set the completion callback.
    // When the lower request is completed, the driver is 
    // notified through the completion callback. 
    //

    IRequestCallbackRequestCompletion *completionCallback = 
        QueryIRequestCallbackRequestCompletion();
 
    FxRequest->SetCompletionCallback(
                                     completionCallback,
                                     NULL  //pContext
                                     );

    completionCallback->Release();
 
    //
    // Format the I/O request.  
 
    FxRequest->FormatUsingCurrentType( );

    //
    // Send down the request.
    //
    HRESULT hrSend = S_OK;
 
    hrSend = FxRequest->Send(
                             m_FxIoTarget,
                             0, // Asynchronous
                             0  // No time-out
                             );
 
    if (S_OK != hrSend) {
        //
        // If the send failed, the driver must complete the 
        // request with the failure.
        FxRequest->CompleteWithInformation(hrSend, 0);
    }

요구 사항

요구
지원 종료 UMDF 2.0 이상에서는 사용할 수 없습니다.
대상 플랫폼 바탕 화면
최소 UMDF 버전 1.5
헤더 wudfddi.h(Wudfddi.h 포함)
DLL WUDFx.dll

참고 항목

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

UMDF(WDF_REQUEST_SEND_OPTIONS_FLAGS)