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


Метод IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion (wudfusb.h)

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

Функция обратного вызова события OnReaderCompletion драйвера сообщает драйверу, что непрерывное средство чтения успешно завершило запрос на чтение.

Синтаксис

void OnReaderCompletion(
  [in] IWDFUsbTargetPipe *pPipe,
  [in] IWDFMemory        *pMemory,
  [in] SIZE_T            NumBytesTransferred,
  [in] PVOID             Context
);

Параметры

[in] pPipe

Указатель на интерфейс IWDFUsbTargetPipe для USB-канала, в котором драйвер включил непрерывное средство чтения.

[in] pMemory

Указатель на интерфейс IWDFMemory для буфера чтения, содержащего данные, считанные из USB-канала.

[in] NumBytesTransferred

Количество байтов, содержащихся в буфере чтения.

[in] Context

Указатель на предоставленные драйвером контекстные сведения, предоставленные драйвером при вызове IWDFUsbTargetPipe2::ConfigureContinuousReader.

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

None

Remarks

Чтобы зарегистрировать функцию обратного вызова IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion , драйвер должен предоставить указатель на интерфейс IUsbTargetPipeContinuousReaderCallbackReadComplete при вызовеIWDFUsbTargetPipe2::ConfigureContinuousReader.

Если драйвер создал непрерывное средство чтения для USB-канала, платформа вызывает функцию обратного вызова OnReaderCompletion драйвера каждый раз, когда целевой объект ввода-вывода драйвера успешно завершает запрос на чтение. Если целевой объект ввода-вывода не завершает запрос, платформа вызывает функцию обратного вызова IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure драйвера.

Чтобы получить доступ к буферу, который содержит данные, считанные с устройства, драйвер может вызвать IWDFMemory::GetDataBuffer. Платформа записывает данные в буфер после заголовка, определенного параметром HeaderLengthобъекта IWDFUsbTargetPipe2::ConfigureContinuousReader. Обратите внимание, что указатель, возвращаемый IWDFMemory::GetDataBuffer, указывает на начало заголовка, но параметр NumBytesTransferred функции обратного вызова OnReaderCompletion не включает длину заголовка.

По умолчанию платформа удаляет объект памяти буфера после возврата функции обратного вызова OnReaderCompletion . Однако может потребоваться, чтобы объект памяти оставался действительным после возврата функции обратного вызова. Например, может потребоваться, чтобы драйвер сохранял указатель интерфейса объекта памяти в контекстном пространстве объекта канала платформы, чтобы драйвер мог обрабатывать содержимое объекта памяти после возврата функции обратного вызова. Чтобы продлить время существования объекта памяти, функция обратного вызова должна вызвать метод IWDFMemory::AddRef буфера. Затем драйвер должен вызвать метод IWDFMemory::Release буфера, чтобы платформа удаляла объект .

Платформа синхронизирует вызовы функций обратного вызова OnReaderCompletion и IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure в соответствии со следующими правилами:

  • Эти функции обратного вызова не выполняются одновременно для отдельного USB-канала.
  • Если драйвер создает несколько непрерывных модулей чтения для нескольких USB-каналов с несколькими функциями обратного вызова OnReaderCompletion и OnReaderFailure , то несколько функций обратного вызова могут выполняться одновременно.
  • Если драйвер указал значение NumPendingReads по умолчанию при вызове IWDFUsbTargetPipe2::ConfigureContinuousReader (или если он указывает значение NumPendingReads , которое больше 1), и если запрос на чтение завершается во время выполнения функции обратного вызова OnReaderCompletion , платформа может вызвать функцию обратного вызова OnReaderCompletion еще раз до возврата функции обратного вызова.
  • Платформа не синхронизирует эти функции обратного вызова с другими функциями обратного вызова.
Когда драйвер вызывает IWDFUsbTargetPipe2::ConfigureContinuousReader, он может указать функцию обратного вызова IObjectCleanup::OnCleanup . Платформа вызовет функцию обратного вызова при попытке удалить объект памяти после возврата функции обратного вызова OnReaderCompletion .

Дополнительные сведения о функции обратного вызова OnReaderCompletion и целевых объектах USB-ввода-вывода см. в разделе Обработка целевого объекта ввода-вывода USB.

Требования

Требование Значение
Дата окончания поддержки Недоступно в UMDF 2.0 и более поздних версиях.
Целевая платформа Персональный компьютер
Минимальная версия UMDF 1,9
Верхняя часть wudfusb.h (включая Wudfusb.h)

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

IUsbTargetPipeContinuousReaderCallbackReadComplete

IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure