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


функция обратного вызова 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, связанный с запросом.

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

None

Remarks

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

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

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

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

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

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

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

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

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

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

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

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfio.h (включая Wdf.h)
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")

См. также раздел

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronously