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이면 프레임워크는 요청 시간을 초과하지 않습니다.
상대 만료 시간은 지정된 제한 시간 내에 발생할 수 있는 시스템 시간 변경의 영향을 받지 않습니다. 절대 만료 시간은 시스템 시간 변경을 반영합니다.

반환 값

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

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

설명

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

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

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

드라이버가 파이프에 대한 연속 판독기를 구성한 경우 드라이버는 Send를 호출하여 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

WDF_REQUEST_SEND_OPTIONS_FLAGS(UMDF)