Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо к 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 не должна вызывать следующие методы объекта очереди:
Требования
Требование | Ценность |
---|---|
целевая платформа | универсальный |
минимальная версия KMDF | 1.0 |
минимальная версия UMDF | 2.0 |
Заголовок | wdfio.h (include Wdf.h) |
IRQL | <= DISPATCH_LEVEL (см. раздел "Примечания") |