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