Функция WdfUsbTargetPipeConfigContinuousReader (wdfusb.h)

[Применимо к KMDF и UMDF]

Метод WdfUsbTargetPipeConfigContinuousReader настраивает платформу для непрерывного чтения из указанного USB-канала.

Синтаксис

NTSTATUS WdfUsbTargetPipeConfigContinuousReader(
  [in] WDFUSBPIPE                        Pipe,
  [in] PWDF_USB_CONTINUOUS_READER_CONFIG Config
);

Параметры

[in] Pipe

Дескриптор объекта канала платформы, полученный путем вызова WdfUsbInterfaceGetConfiguredPipe.

[in] Config

Указатель на структуру, выделенную вызывающим объектом WDF_USB_CONTINUOUS_READER_CONFIG .

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

WdfUsbTargetPipeConfigContinuousReader возвращает STATUS_SUCCESS, если операция завершается успешно. В противном случае этот метод может вернуть одно из следующих значений:

Код возврата Описание
STATUS_INFO_LENGTH_MISMATCH
Размер структуры WDF_USB_CONTINUOUS_READER_CONFIG , указанной параметром конфигурации , был неправильным.
STATUS_INVALID_PARAMETER
Обнаружен недопустимый параметр.
STATUS_INSUFFICIENT_RESOURCES
Недостаточно памяти.
STATUS_INVALID_DEVICE_REQUEST
Недопустимый тип канала.
STATUS_INTEGER_OVERFLOW
Элемент HeaderLength, TransferLength или TrailerLength структуры WDF_USB_CONTINUOUS_READER_CONFIG , в которую параметр конфигурации указал слишком большой или недопустимый размер.
STATUS_INVALID_BUFFER_SIZE
Размер буфера чтения не был кратным максимальным размером пакета канала.
 

Список других возвращаемых значений, возвращаемых методом WdfUsbTargetPipeConfigContinuousReader , см. в разделе Об ошибках создания объектов платформы.

Этот метод также может возвращать другие значения NTSTATUS.

Проверка ошибок возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Комментарии

Вы можете настроить непрерывное средство чтения для массового канала или канала прерываний. Канал должен иметь входную конечную точку.

После вызова WdfUsbTargetPipeConfigContinuousReader для настройки непрерывного средства чтения драйвер должен вызвать WdfIoTargetStart , чтобы запустить средство чтения. Чтобы остановить средство чтения, драйвер должен вызвать WdfIoTargetStop.

Как правило, драйвер вызывает WdfUsbTargetPipeConfigContinuousReader из функции обратного вызова EvtDevicePrepareHardware . Драйвер должен вызывать WdfIoTargetStart из функции обратного вызова EvtDeviceD0Entry и вызывать WdfIoTargetStop из функции обратного вызова EvtDeviceD0Exit .

Каждый раз, когда целевой объект ввода-вывода канала успешно завершает запрос на чтение, платформа вызывает функцию обратного вызова драйвера EvtUsbTargetPipeReadComplete . Если целевой объект ввода-вывода сообщает об ошибке при обработке запроса, платформа вызывает функцию обратного вызова evtUsbTargetPipeReadersFailed драйвера после завершения всех запросов на чтение. (Таким образом, функция обратного вызова EvtUsbTargetPipeReadComplete не будет вызываться, пока выполняется функция обратного вызова EvtUsbTargetPipeReadersFailed ).

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

После вызова драйвера WdfUsbTargetPipeConfigContinuousReader драйвер не может использовать WdfUsbTargetPipeReadSynchronously или WdfRequestSend для отправки запросов ввода-вывода в канал, если только непрерывное средство чтения не было остановлено. Чтобы остановить средство чтения, драйвер может вызвать WdfIoTargetStop или вернуть значение FALSE из функции обратного вызова EvtUsbTargetPipeReadersFailed . Если драйвер вызывает WdfUsbTargetPipeReadSynchronous при остановке средства чтения, он должен задать флаг WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE в элементе Flags параметра RequestOptions . В противном случае запрос будет загружен до перезапуска целевого объекта.

Платформа задает флаг USBD_SHORT_TRANSFER_OK во внутреннем URB. Если установить этот флаг, последний пакет передачи данных будет меньше максимального размера пакета.

Дополнительные сведения о методе WdfUsbTargetPipeConfigContinuousReader и целевых объектах ввода-вывода USB см. в разделе "Чтение из канала".

Примеры

В следующем примере кода инициализируется структура WDF_USB_CONTINUOUS_READER_CONFIG и вызывается WdfUsbTargetPipeConfigContinuousReader.

WDF_USB_CONTINUOUS_READER_CONFIG  contReaderConfig;
NTSTATUS  status;

WDF_USB_CONTINUOUS_READER_CONFIG_INIT(
                                      &contReaderConfig,
                                      OsrFxEvtUsbInterruptPipeReadComplete,
                                      DeviceContext,
                                      sizeof(UCHAR)
                                      );
status = WdfUsbTargetPipeConfigContinuousReader(
                                      Pipe,
                                      &contReaderConfig
                                      );

Требования

   
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Заголовок wdfusb.h (include Wdfusb.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbContReader(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

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

EvtDeviceD0Entry

EvtDeviceD0Exit

EvtDevicePrepareHardware

EvtUsbTargetPipeReadComplete

EvtUsbTargetPipeReadersFailed

URB

WDF_USB_CONTINUOUS_READER_CONFIG

WDF_USB_CONTINUOUS_READER_CONFIG_INIT

WdfIoTargetStart

WdfIoTargetStop

WdfUsbInterfaceGetConfiguredPipe