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:

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 (incluya Wdf.h)
IRQL <= DISPATCH_LEVEL (consulte la sección Comentarios)

Consulte también

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronously