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


Метод IWDFDevice::CreateIoQueue (wudfddi.h)

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

Метод CreateIoQueue настраивает очередь ввода-вывода по умолчанию, связанную с устройством, или создает для устройства вторичную очередь ввода-вывода.

Синтаксис

HRESULT CreateIoQueue(
  [in, optional] IUnknown                   *pCallbackInterface,
  [in]           BOOL                       bDefaultQueue,
  [in]           WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
  [in]           BOOL                       bPowerManaged,
  [in]           BOOL                       bAllowZeroLengthRequests,
  [out]          IWDFIoQueue                **ppIoQueue
);

Параметры

[in, optional] pCallbackInterface

Указатель на интерфейс IUnknown, который платформа использует для определения функций обратного вызова событий, которые драйвер подписывается на очередь. Это функции, вызываемые платформой при возникновении соответствующих событий.

Для UMDF версий 1.9 и более поздних версий этот параметр требуется для очередей ввода-вывода, использующих последовательный или параллельный метод отправки , и необязательный (можно null) для очередей ввода-вывода, использующих метод отправки вручную. Для версий UMDF до версии 1.9 этот параметр необходим для всех методов диспетчеризации.

[in] bDefaultQueue

Значение boOL, указывающее, следует ли настроить очередь ввода-вывода по умолчанию или создать вторичную очередь ввода-вывода для устройства. TRUE указывает на настройку очереди ввода-вывода по умолчанию; FALSE указывает на создание вторичной очереди ввода-вывода.

[in] DispatchType

Значение WDF_IO_QUEUE_DISPATCH_TYPEтипа, определяющее, как драйвер должен получать запросы из очереди ввода-вывода.

[in] bPowerManaged

Значение boOL, указывающее, управляет ли очередь ввода-вывода питанием. TRUE указывает, что платформа автоматически координирует отправку для очереди ввода-вывода с помощью Plug and Play (PnP) и состояния питания устройства; FALSE указывает, что автоматическая координация отправки не выполняется.

[in] bAllowZeroLengthRequests

Значение BOOL, указывающее, помещает ли платформа запросы ввода-вывода нулевой длины непосредственно в очередь ввода-вывода для обработки драйвера. TRUE указывает, что драйвер должен получать запросы на чтение и запись, имеющие буферы нулевой длины, то есть платформа автоматически помещает эти типы запросов непосредственно в очередь ввода-вывода для драйвера. FALSE указывает, что платформа завершает запросы ввода-вывода нулевой длины, а не помещает их в очередь ввода-вывода.

[out] ppIoQueue

Указатель на переменную, которая получает указатель на интерфейс IWDFIoQueue для только что созданного объекта очереди ввода-вывода или объекта очереди ввода-вывода по умолчанию.

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

CreateIoQueue возвращает одно из следующих значений:

Возвращаемый код Описание
S_OK
Очередь ввода-вывода успешно создана.
HRESULT_FROM_WIN32(ERROR_BAD_CONFIGURATION)
Очередь ввода-вывода настраивается одним из следующих способов:
  • Параметр DispatchType указывает неуправляемую очередь и ни один из интерфейсов обратного вызова очереди ввода-вывода, указанных в разделе "Примечания", поддерживается с помощью параметра pCallbackInterface.
  • Параметр DispatchType указывает очередь вручную и один или несколько интерфейсов обратного вызова очереди ввода-вывода, указанных в разделе "Примечания", поддерживаются с помощью параметра pCallbackInterface.
Дополнительные сведения об этих конфигурациях см. в разделе "Примечания".
 

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

Замечания

Интерфейс IUnknown, который драйвер предоставляет для параметра pCallbackInterface, может поддерживать несколько функций обратного вызова очереди. Платформа вызывает метод QueryInterface в предоставленном интерфейсе IUnknown несколько раз, чтобы получить методы интерфейса, поддерживаемые драйвером. Когда приложения выполняют действия, связанные с методами поддерживаемых интерфейсов (например, запрос на чтение ввода-вывода), платформа вызывает методы (например, метод IQueueCallbackRead::OnRead), чтобы уведомить драйвер. Платформа вызывает QueryInterface для следующих интерфейсов:

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackRead

IQueueCallbackWrite

Когда драйвер передает WdfIoQueueDispatchSequential или WdfIoQueueDispatchParallel для параметра DispatchTypeCreateIoQueue для создания неуправляемой очереди, CreateIoQueue может возвращать S_OK только в том случае, если объект обратного вызова очереди драйвера реализует по крайней мере один из предыдущих интерфейсов и указывает поддержку таких интерфейсов через интерфейс IUnknown, на который pCallbackInterface указывает.

Когда драйвер передает WdfIoQueueDispatchManual для DispatchType для создания очереди вручную, CreateIoQueue может возвращать S_OK только если объект обратного вызова очереди драйвера не реализует или не указывает поддержку любого из предыдущих интерфейсов обратного вызова. Дополнительные сведения об объектах обратного вызова драйвера см. в создании объектов обратного вызова.

Примечание Драйвер не может использовать тот же объект обратного вызова для очереди вручную, которую драйвер использует для последовательной или параллельной очереди. То есть, если драйвер передает определенный указатель на интерфейс IUnknown в вызове CreateIoQueue для создания очереди вручную, драйвер не может позже передать идентичный указатель на IUnknown в вызове CreateIoQueue для создания последовательной или параллельной очереди.
 
Дополнительные сведения о настройке режима отправки см. в настройке режима отправки дляочереди ввода-вывода.

Платформа также вызывает QueryInterface на предоставленном интерфейсе IUnknown, чтобы определить, поддерживает ли драйвер любой из следующих интерфейсов:

IObjectCleanup

IQueueCallbackIoResume

IQueueCallbackIoStop

Платформа также вызывает QueryInterface в предоставленном интерфейсе IUnknown, чтобы определить, поддерживает ли драйвер интерфейс IQueueCallbackStateChange. Объект обратного вызова очереди драйвера может при необходимости реализовать и указать поддержку IQueueCallbackStateChange только для очереди вручную. Объект обратного вызова очереди драйвера не должен реализовывать и указывать поддержку IQueueCallbackStateChange для последовательной или параллельной очереди.

Примеры

Пример кода использования метода createIoQueue см. в разделе IWDFDriver::CreateDevice.

Требования

Требование Ценность
завершение поддержки Недоступно в UMDF 2.0 и более поздних версиях.
целевая платформа Настольный
минимальная версия UMDF 1.5
заголовка wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

См. также

IObjectCleanup

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackIoResume

IQueueCallbackIoStop

IQueueCallbackRead

IQueueCallbackStateChange

IQueueCallbackWrite

IWDFDevice

IWDFIoQueue

WDF_IO_QUEUE_DISPATCH_TYPE