Метод 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