Поделиться через


Метод IWDFIoRequest::Send (wudfddi.h)

[ предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе Начало работы с UMDF.]

Метод отправки отправляет запрос указанному целевому объекту ввода-вывода.

Синтаксис

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

Параметры

[in] pIoTarget

Указатель на интерфейс IWDFIoTarget для целевого объекта ввода-вывода, который обычно представляет более низкий драйвер в стеке.

[in] Flags

Допустимый битовый ИЛИ WDF_REQUEST_SEND_OPTIONS_FLAGS-типизированные флаги.

[in] Timeout

Время в системных единицах времени (100-наносекундных интервалов), которое может пройти до автоматического отмены запроса ввода-вывода платформы.

  • Если значение отрицательное, срок действия относительно текущего системного времени.
  • Если значение положительное, срок действия указывается в качестве абсолютного времени (что относительно 1 января 1601 г.).
  • Если значение равно нулю, платформа не истекает время ожидания запроса.
Относительное время истечения срока действия не влияет на системное время, которое может произойти в течение указанного периода ожидания. Абсолютное время истечения срока действия отражает изменения системного времени.

Возвращаемое значение

отправка возвращает S_OK, если операция выполнена успешно. В противном случае этот метод возвращает один из кодов ошибок, определенных в Winerror.h.

Обратите внимание, что возвращаемое значение представляет состояние попытки метода отправки отправить запрос ввода-вывода в целевой объект ввода-вывода. Возвращаемое значение не представляет состояние завершения запроса ввода-вывода. Драйвер должен использовать интерфейс IWDFRequestCompletionParams для получения состояния завершения запроса ввода-вывода.

Замечания

Если отправить возвращает код ошибки, драйвер обычно должен завершить запрос с кодом ошибки, который возвращен отправки, как показано в следующем разделе примера.

Если драйвер задает флаг WDF_REQUEST_SEND_OPTION_SYNCHRONOUS в параметре Flags и если Отправить успешно отправляет запрос ввода-вывода в целевой объект ввода-вывода, отправить после завершения запроса ввода-вывода. В этом случае send возвращает S_OK, и драйвер может немедленно вызывать интерфейс IWDFIoRequest::GetCompletionParams для получения интерфейса IWDFRequestCompletionParams. В примере кода IWDFIoRequest::GetCompletionParams показан вызов отправки с набором флагов WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

Если драйвер не задает флаг WDF_REQUEST_SEND_OPTION_SYNCHRONOUS и если отправить успешно отправляет запрос ввода-вывода в целевой объект ввода-вывода, отправить возвращает S_OK, пока целевой объект ввода-вывода по-прежнему обрабатывает запрос ввода-вывода асинхронно. В этом случае драйвер предоставляет функцию обратного вызова IRequestCallbackRequestCompletion::OnCompletion обратного вызова, которую платформа вызывает после завершения запроса ввода-вывода. Как правило, функция обратного вызова OnCompletion вызывает IWDFIoRequest::GetCompletionParams. В примере кода в следующем разделе примера показан вызов отправки без флага WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

Драйвер не может вызывать отправить отправку запроса ввода-вывода на USB-канал, если драйвер настроил непрерывного чтения для канала.

Примеры

Следующий пример кода перенаправит запрос на целевой объект ввода-вывода устройства.

    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 (include Wudfddi.h)
DLL WUDFx.dll

См. также

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)