EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL función de devolución de llamada (wdfio.h)
[Se aplica a KMDF y UMDF]
La función de devolución de llamada de eventos EvtIoDeviceControl de un controlador procesa una solicitud de control de E/S de dispositivo especificada.
Sintaxis
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
)
{...}
Parámetros
[in] Queue
Identificador del objeto de cola de marco asociado a la solicitud de E/S.
[in] Request
Identificador de un objeto de solicitud de marco.
[in] OutputBufferLength
Longitud, en bytes, del búfer de salida de la solicitud, si hay disponible un búfer de salida.
[in] InputBufferLength
Longitud, en bytes, del búfer de entrada de la solicitud, si hay disponible un búfer de entrada.
[in] IoControlCode
Código de control de E/S definido por el controlador o definido por el sistema (IOCTL) asociado a la solicitud.
Valor devuelto
None
Observaciones
Un controlador registra una función de devolución de llamada EvtIoDeviceControl cuando llama a WdfIoQueueCreate. Para obtener más información sobre cómo llamar a WdfIoQueueCreate, vea Creating I/O Queues.
Si un controlador ha registrado una función de devolución de llamada EvtIoDeviceControl para la cola de E/S de un dispositivo, la función de devolución de llamada recibe cada solicitud de control de E/S (IRP_MJ_DEVICE_CONTROL) de la cola. Para obtener más información, vea Controladores de solicitudes.
La función de devolución de llamada EvtIoDeviceControl debe procesar cada solicitud de E/S recibida de alguna manera. Para obtener más información, consulte Procesamiento de solicitudes de E/S.
Los controladores reciben solicitudes de control de E/S cuando una aplicación de usuario llama a DeviceIoControl (que se describe en Microsoft Windows SDK documentación) o cuando otro controlador crea una solicitud llamando a WdfIoTargetSendIoctlSynchronously o WdfIoTargetFormatRequestForIoctl.
El tipo de operación que se va a realizar depende del valor del parámetro IoControlCode . Debe determinar el conjunto de valores de IoControlCode que las aplicaciones y otros controladores pueden enviar al controlador. Para obtener más información sobre las E/S, consulte Uso de códigos de control de E/S.
La mayoría de las operaciones de control de E/S del dispositivo requieren un búfer de entrada, un búfer de salida o ambos. Para obtener información sobre cómo el controlador puede acceder a los búferes de una solicitud, consulte Acceso a los búferes de datos en Framework-Based controladores.
Las técnicas que el controlador puede usar para acceder a los búferes de entrada y salida de la solicitud (si existen) dependen del campo TransferType del IOCTL. El valor del campo TransferType del IOCTL puede ser METHOD_BUFFERED, METHOD_DIRECT_IN, METHOD_DIRECT_OUT o METHOD_NEITHER. Para obtener más información sobre el campo TransferType , vea Definición de códigos de control de E/S.
Se puede llamar a la función de devolución de llamada EvtIoDeviceControl en IRQL <= DISPATCH_LEVEL, a menos que el miembro ExecutionLevel de la estructura de WDF_OBJECT_ATTRIBUTES del dispositivo o controlador esté establecido en WdfExecutionLevelPassive.
Si irQL está PASSIVE_LEVEL, el marco llama a la función de devolución de llamada dentro de una región crítica.
Para obtener más información sobre los niveles de IRQL para los controladores de solicitudes, consulte Uso de la sincronización automática.
La función de devolución de llamada EvtIoDeviceControl de un controlador no debe llamar a los siguientes métodos de objeto de cola:
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | wdfio.h (incluir Wdf.h) |
IRQL | <= DISPATCH_LEVEL (consulte la sección Comentarios) |