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


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

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

Функция обратного вызова событий драйвера EvtIoInternalDeviceControl обрабатывает запрос ввода-вывода, содержащий внутренний код управления ввода-вывода (IOCTL).

Синтаксис

EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtWdfIoQueueIoInternalDeviceControl;

void EvtWdfIoQueueIoInternalDeviceControl(
  [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, связанный с запросом.

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

Нет

Замечания

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

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

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

Драйверы получают внутренние запросы управления ввода-выводами при создании другого драйвера путем вызова WdfIoTargetSendInternalIoctlSynchronous или WdfIoTargetFormatRequestForInternalIoctl.

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

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

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

Функцию обратного вызова EvtIoInternalDeviceControl можно вызвать в IRQL <= DISPATCH_LEVEL, если только ExecutionLevel член WDF_OBJECT_ATTRIBUTES устройства или WDF_OBJECT_ATTRIBUTES драйвера имеет значение WdfExecutionLevelPassive. (Если драйвер находится в верхней части стека драйверов, функция обратного вызова вызывается в IRQL = PASSIVE_LEVEL.)

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

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

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

WdfIoQueueDrainSynchronous
WdfIoQueuePurgeSynchronous
WdfIoQueueStopSynchronously

Требования

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

См. также

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronous