EVT_WDF_IO_QUEUE_IO_INTERNAL_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 EvtIoInternalDeviceControl de un controlador procesa una solicitud de E/S que contiene un código de control de E/S de dispositivo interno (IOCTL).
Sintaxis
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
)
{...}
Parámetros
[in] Queue
Identificador del objeto de cola del 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
IOCTL definido por el controlador o definido por el sistema que está asociado a la solicitud.
Valor devuelto
None
Observaciones
Un controlador registra una función de devolución de llamada EvtIoInternalDeviceControl cuando llama al método WdfIoQueueCreate . Para obtener más información sobre cómo llamar a WdfIoQueueCreate, vea Crear colas de E/S.
Si un controlador ha registrado una función de devolución de llamada EvtIoInternalDeviceControl 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 interna (IRP_MJ_INTERNAL_DEVICE_CONTROL) de la cola. Para obtener más información, consulte Controladores de solicitudes.
La función de devolución de llamada EvtIoInternalDeviceControl 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 internas cuando otro controlador crea una solicitud llamando a WdfIoTargetSendInternalIoctlSynchronously o WdfIoTargetFormatRequestForInternalIoctl.
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 internas 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 de 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 EvtIoInternalDeviceControl en IRQL <= DISPATCH_LEVEL, a menos que el miembro ExecutionLevel de la estructura de WDF_OBJECT_ATTRIBUTES del dispositivo o del controlador esté establecido en WdfExecutionLevelPassive. (Si el controlador está en la parte superior de su pila de controladores, se llama a la función de devolución de llamada en IRQL = PASSIVE_LEVEL).
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 irQL para los controladores de solicitudes, consulte Uso de la sincronización automática.
La función de devolución de llamada EvtIoInternalDeviceControl 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 (incluya Wdf.h) |
IRQL | <= DISPATCH_LEVEL (consulte la sección Comentarios) |