функция обратного вызова 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), связанный с запросом.
Возвращаемое значение
None
Remarks
Драйвер регистрирует функцию обратного вызова EvtIoDeviceControl при вызове WdfIoQueueCreate. Дополнительные сведения о вызове WdfIoQueueCreate см. в разделе Создание очередей ввода-вывода.
Если драйвер зарегистрировал функцию обратного вызова EvtIoDeviceControl для очереди ввода-вывода устройства, функция обратного вызова получает каждый запрос управления вводом-выводом (IRP_MJ_DEVICE_CONTROL) из очереди. Дополнительные сведения см. в разделе Обработчики запросов.
Функция обратного вызова EvtIoDeviceControl должна обрабатывать каждый полученный запрос ввода-вывода каким-то образом. Дополнительные сведения см. в разделе Обработка запросов ввода-вывода.
Драйверы получают запросы управления вводом-выводом, когда пользовательское приложение вызывает DeviceIoControl (описано в документации Microsoft Windows SDK) или когда другой драйвер создает запрос путем вызова WdfIoTargetSendIoctlSynchronously или WdfIoTargetFormatRequestForIoctl.
Тип выполняемой операции зависит от значения параметра IoControlCode . Необходимо определить набор значений IoControlCode , которые приложения и другие драйверы могут отправлять в драйвер. Дополнительные сведения о ioCTL см. в разделе Использование кодов управления вводом-выводом.
Для большинства операций управления вводом-выводом устройств требуется входной буфер, буфер вывода или и то, и другое. Сведения о том, как драйвер может получить доступ к буферам запроса, см. в статье Доступ к буферам данных в драйверах Framework-Based.
Методы, которые драйвер может использовать для доступа к входным и выходным буферам запроса (если они существуют), зависят от поля TransferType IOCTL. Значение поля TransferType 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 драйвера не должна вызывать следующие методы объекта очереди:
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfio.h (включая Wdf.h) |
IRQL | <= DISPATCH_LEVEL (см. раздел "Примечания") |