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


функция обратного вызова EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL (wdfio.h)

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

Функция обратного вызова событий драйвера EvtIoDeviceControl обрабатывает указанный запрос управления устройствами ввода-вывода.

Синтаксис

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;

void EvtWdfIoQueueIoDeviceControl(
  [in] WDFQUEUE Queue,
  [in] WDFREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Параметры

[in] Queue

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

[in] Request

Дескриптор объекта запроса платформы.

[in] OutputBufferLength

Длина в байтах выходного буфера запроса, если выходной буфер доступен.

[in] InputBufferLength

Длина входного буфера запроса в байтах, если входной буфер доступен.

[in] IoControlCode

Определяемый драйвером или системный код управления ввода-вывода (IOCTL), связанный с запросом.

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

Нет

Замечания

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

Если драйвер зарегистрировал функцию обратного вызова EvtIoDeviceControl для очереди ввода-вывода устройства, функция обратного вызова получает каждый запрос управления ввода-вывода (IRP_MJ_DEVICE_CONTROL) из очереди. Дополнительные сведения см. в разделе Обработчики запросов.

Функция обратного вызова EvtIoDeviceControl должна обрабатывать каждый полученный запрос ввода-вывода каким-то образом. Дополнительные сведения см. в запросов ввода-вывода.

Драйверы получают запросы управления ввода-выводами, когда пользовательское приложение вызывает DeviceIoControl (описано в документации по пакету SDK Для Microsoft Windows) или когда другой драйвер создает запрос, вызывая WdfIoTargetSendIoctlSynchronous или WdfIoTargetFormatRequestForIoctl.

Тип выполняемой операции зависит от значения параметра IoControlCode. Необходимо определить набор значений IoControlCode, которые приложения и другие драйверы могут отправлять в драйвер. Дополнительные сведения о ioCTLs см. в разделе Использование кодов управления ввода-вывода.

Большинство операций управления ввода-вывода устройства требуют входного буфера, выходного буфера или обоих операций. Сведения о том, как драйвер может получить доступ к буферам запроса, см. в доступ к буферам данных в Framework-Based драйверах.

Методы, которые драйвер может использовать для доступа к входным и выходным буферам запроса (если они существуют), зависят от поля TransferType IOCTL. Значение поля Transfer Type iOCTL может быть METHOD_BUFFERED, METHOD_DIRECT_IN, METHOD_DIRECT_OUT или METHOD_NEITHER. Дополнительные сведения о поле TransferType см. в определении кодов управления ввода-вывода.

Функция обратного вызова EvtIoDeviceControl может вызываться в IRQL <= DISPATCH_LEVEL, если только ExecutionLevel член WDF_OBJECT_ATTRIBUTES устройства или структуры драйвера имеет значение WdfExecutionLevelPassive.

Если irQL PASSIVE_LEVEL, платформа вызывает функцию обратного вызова в критическом регионе.

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

Функция обратного вызова драйвера EvtIoDeviceControl не должна вызывать следующие методы объекта очереди:

WdfIoQueueDrainSynchronous
WdfIoQueuePurgeSynchronous
WdfIoQueueStopSynchronously

Требования

Требование Ценность
целевая платформа универсальный
минимальная версия KMDF 1.0
минимальная версия UMDF 2.0
Заголовок wdfio.h (include Wdf.h)
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")

См. также

EvtIoInternalDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForIoctl

WdfIoTargetSendIoctlSynchronously