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


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

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

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

Синтаксис

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 г.).
  • Если значение равно нулю, время ожидания запроса не истекает.
На относительные сроки действия не влияют изменения системного времени, которые могут произойти в течение указанного периода времени ожидания. Абсолютное время окончания срока действия отражает изменения системного времени.

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

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

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

Комментарии

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

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

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

Драйвер не может вызвать send для отправки запроса ввода-вывода в 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 (включая Wudfddi.h)
DLL WUDFx.dll

См. также раздел

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)