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

[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새로운 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한됩니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. For more info, see Getting Started with 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 요청의 완료 상태를 나타내지 않습니다. 드라이버는 I/O 요청의 완료 상태를 얻으려면 IWDFRequestCompletionParams 인터페이스를 사용해야 합니다.

설명

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

드라이버가 Flags 매개 변수에서 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 플래그를 설정하고 Send 가 I/O 요청을 I/O 대상으로 성공적으로 보내면 I/O 대상이 I/O 요청을 완료한 후 Send 가 반환됩니다. 이 경우 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 요청을 비동기적으로 처리하는 동안 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)