Функция 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, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:
Код возврата | Описание |
---|---|
|
Недопустимый входной параметр. |
|
Неправильный размер структуры WDF_IO_QUEUE_CONFIG . |
|
Платформа выполняет операцию управления питанием. |
|
Объем доступной памяти слишком мал. |
|
В структуре WDF_IO_QUEUE_CONFIG не указаны обработчики запросов, а метод диспетчеризации не является WdfIoQueueDispatchManual. |
|
Драйвер пытается создать очередь по умолчанию, в то время как очередь по умолчанию для устройства уже существует, или произошла внутренняя ошибка. |
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Каждый вызов WdfIoQueueCreate создает очередь ввода-вывода для устройства. Драйвер может создать несколько очередей ввода-вывода для каждого устройства.
Параметры Config и QueueAttributes указывают атрибуты конфигурации и объекта очереди.
По умолчанию объект устройства платформы, указываемый параметром Device , становится родительским объектом для нового объекта очереди платформы. Если драйвер указывает родительский объект в элементе ParentObjectструктуры WDF_OBJECT_ATTRIBUTES, родительским объектом может быть объект устройства платформы или любой объект, цепочка родителей которого приводит к объекту устройства платформы. Платформа удалит объект очереди при удалении родительского объекта.
Если драйвер предоставляет функции обратного вызова EvtCleanupCallback или EvtDegradCallback для объекта очереди платформы, платформа вызывает эти функции обратного вызова в 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 (включая 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_INIT_DEFAULT_QUEUE