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


Функция WdfIoQueueCreate (wdfio.h)

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

Метод WdfIoQueueCreate создает и настраивает очередь ввода-вывода для указанного устройства.

Синтаксис

NTSTATUS WdfIoQueueCreate(
  [in]            WDFDEVICE              Device,
  [in]            PWDF_IO_QUEUE_CONFIG   Config,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES QueueAttributes,
  [out, optional] WDFQUEUE               *Queue
);

Параметры

[in] Device

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

[in] Config

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

[in, optional] QueueAttributes

Указатель на структуру, выделенную вызывающим объектом, WDF_OBJECT_ATTRIBUTES, которая задает атрибуты объекта для нового объекта. Этот параметр является необязательным и может быть WDF_NO_OBJECT_ATTRIBUTES.

[out, optional] Queue

Указатель на расположение, которое получает дескриптор к объекту очереди платформы.

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

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

Код возврата Описание
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР
Недопустимый входной параметр.
STATUS_INFO_LENGTH_MISMATCH
Неправильный размер структуры WDF_IO_QUEUE_CONFIG.
STATUS_POWER_STATE_INVALID
Платформа выполняет операцию управления питанием.
СТАТУС_НЕДОСТАТОЧНЫЕ_РЕСУРСЫ
Объем доступной памяти слишком мал.
STATUS_WDF_NO_CALLBACK
Структура WDF_IO_QUEUE_CONFIG не указывает обработчиков запросов, а метод отправки не WdfIoQueueDispatchManual.
STATUS_UNSUCCESSFUL
Драйвер пытается создать очередь по умолчанию, пока для устройства уже существует очередь по умолчанию или произошла внутренняя ошибка.
 

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

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

Замечания

Каждый вызов WdfIoQueueCreate создает очередь ввода-вывода для устройства. Драйвер может создавать несколько очередей ввода-вывода для каждого устройства.

Параметры конфигурации и QueueAttributes указывают конфигурацию и атрибуты объекта очереди.

По умолчанию объект устройства платформы, заданный параметром устройства, становится родительским объектом для нового объекта очереди платформы. Если драйвер указывает родительский объект в элементе WDF_OBJECT_ATTRIBUTES структуры ParentObject, родительский объект может быть объектом устройства платформы или любым объектом, цепочка родителей которого приводит к объекту устройства платформы. Платформа удаляет объект очереди при удалении родительского объекта.

Если драйвер предоставляет функции обратного вызова EvtCleanupCallback или EvtDesisCallback для объекта очереди платформы, платформа вызывает эти функции обратного вызова в IRQL = PASSIVE_LEVEL.

Дополнительные сведения о WdfIoQueueCreateсм. в создании очередей ввода-вывода.

Примеры

В следующем примере кода представлен раздел функции обратного вызова EvtDriverDeviceAdd, создающей очередь ввода-вывода устройства по умолчанию. В примере инициализируется структура WDF_IO_QUEUE_CONFIG, а затем вызывается WdfIoQueueCreate.

NTSTATUS
MyEvtDriverDeviceAdd(
    IN WDFDRIVER  Driver,
    IN PWDFDEVICE_INIT  DeviceInit
    )
{
    WDF_IO_QUEUE_CONFIG  ioQueueConfig;
    WDFQUEUE  hQueue;
...
    WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(
                                           &ioQueueConfig,
                                           WdfIoQueueDispatchSequential
                                           );

    ioQueueConfig.EvtIoDefault = MyEvtIoDefault;

    status = WdfIoQueueCreate(
                              device,
                              &ioQueueConfig,
                              WDF_NO_OBJECT_ATTRIBUTES,
                              &hQueue
                              );
    if (!NT_SUCCESS (status)) {
        return status;
    }
...
}

Требования

Требование Ценность
целевая платформа универсальный
минимальная версия KMDF 1.0
минимальная версия UMDF 2.0
Заголовок wdfio.h (include Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
правил соответствия DDI ChangeQueueState(kmdf), DriverCreate(kmdf), DrvAckIoStop(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также

WDF_IO_QUEUE_CONFIG

WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE

WDF_OBJECT_ATTRIBUTES

WdfDeviceConfigureRequestDispatching

WdfRequestForwardToIoQueue