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:

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

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)

Consulte también

EvtIoInternalDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForIoctl

WdfIoTargetSendIoctlSynchronously