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