EVT_SERCX2_CONTROL función de devolución de llamada (sercx.h)
La EvtSerCx2Control función de devolución de llamada de eventos se llama mediante la versión 2 de la extensión del marco serie (SerCx2) para controlar una solicitud de control de E/S serie.
Sintaxis
EVT_SERCX2_CONTROL EvtSercx2Control;
NTSTATUS EvtSercx2Control(
[in] WDFDEVICE Device,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
Parámetros
[in] Device
Un identificador WDFDEVICE para el objeto de dispositivo de marco que representa el controlador serie. El controlador de controlador serie creó este objeto en su función de devolución de llamada EvtDriverDeviceAdd. Para obtener más información, vea SerCx2InitializeDevice.
[in] Request
Un identificador WDFREQUEST para el objeto de solicitud de marco que representa la solicitud de control de E/S serie.
[in] OutputBufferLength
Longitud, en bytes, del búfer de salida de la solicitud de control de E/S serie especificada por el parámetro Request
[in] InputBufferLength
Longitud, en bytes, del búfer de entrada para la solicitud de control de E/S serie especificada por el parámetro request
[in] IoControlCode
Especifica el código de control de E/S (IOCTL) de la solicitud de control de E/S serie especificada por el parámetro Request. Las ICTLs para las solicitudes de control de E/S serie se definen en el archivo de encabezado Ntddser.h. Para obtener más información, vea Comentarios.
Valor devuelto
La función
Observaciones
El controlador de controlador serie debe implementar esta función. El controlador registra la función en la llamada al método SerCx2InitializeDevice que finaliza la inicialización del objeto de dispositivo de marco para el controlador serie.
La función evtSerCx2Control permite al controlador controlar determinadas solicitudes de control de E/S serie que SerCx2 no puede controlar. SerCx2 controla todo el procesamiento de un subconjunto de las ICTLs serie definidas en el archivo de encabezado Ntddser.h. Sin embargo, SerCx2 se basa en el controlador para controlar las solicitudes de control de E/S serie para realizar operaciones dependientes del hardware.
Cuando SerCx2 recibe una solicitud de control de E/S serie que solo puede controlar el controlador de controlador serie, SerCx2 llama a la función EvtSerCx2Control para entregar la solicitud de control de E/S al controlador. El controlador es responsable de completar esta solicitud. Un controlador que no implementa la compatibilidad con una solicitud de control de E/S determinada debe completar esta solicitud de control de E/S con el código de estado de error STATUS_NOT_SUPPORTED.
Para completar la solicitud de control de E/S, el controlador normalmente llama al método WdfRequestComplete y proporciona, como parámetros de entrada, el valor de parámetro Request y un valor de estado para indicar si la solicitud se realizó correctamente. Este valor de estado se escribe en el bloque de estado de la solicitud.
El EvtSerCx2Control valor devuelto de la función debe coincidir siempre con el valor de estado que esta función escribe en el bloque de estado de la solicitud de control de E/S. La implementación actual de SerCx2 omite este valor devuelto.
SerCx2 llama a la función
Nombre de la solicitud de control de E/S | Obligatorio o opcional |
---|---|
IOCTL_SERIAL_CLR_DTR | Opcional |
IOCTL_SERIAL_CLR_RTS | Obligatorio |
IOCTL_SERIAL_GET_BAUD_RATE | Obligatorio |
IOCTL_SERIAL_GET_COMMSTATUS | Obligatorio |
IOCTL_SERIAL_GET_DTRRTS | Obligatorio |
IOCTL_SERIAL_GET_HANDFLOW | Obligatorio |
IOCTL_SERIAL_GET_LINE_CONTROL | Obligatorio |
IOCTL_SERIAL_GET_MODEM_CONTROL | Obligatorio |
IOCTL_SERIAL_GET_MODEMSTATUS | Obligatorio |
IOCTL_SERIAL_GET_PROPERTIES | Obligatorio |
IOCTL_SERIAL_SET_BAUD_RATE | Obligatorio |
IOCTL_SERIAL_SET_BREAK_OFF | Obligatorio |
IOCTL_SERIAL_SET_BREAK_ON | Obligatorio |
IOCTL_SERIAL_SET_DTR | Opcional |
IOCTL_SERIAL_SET_FIFO_CONTROL | Opcional |
IOCTL_SERIAL_SET_HANDFLOW | Obligatorio |
IOCTL_SERIAL_SET_LINE_CONTROL | Obligatorio |
IOCTL_SERIAL_SET_MODEM_CONTROL | Obligatorio |
IOCTL_SERIAL_SET_RTS | Obligatorio |
En la tabla anterior se enumeran todas las ICTLs serie que SerCx2 presenta a la función evtSerCx2Control
IOCTL_SERIAL_CLR_DTR y IOCTL_SERIAL_SET_DTR
Si la función EvtSerCx2Control del controlador serie admite la solicitud de IOCTL_SERIAL_SET_DTR, esta función también debe admitir la solicitud IOCTL_SERIAL_CLR_DTR y viceversa. Si el controlador no admite estas dos solicitudes, el controlador del controlador para la solicitud IOCTL_SERIAL_GET_DTRRTS debe establecer el bit de marca SERIAL_DTR_STATE en el valor de salida de esta solicitud en cero.
IOCTL_SERIAL_GET_DTRRTS
La función
IOCTL_SERIAL_GET_COMMSTATUS
La función
- errores
- HoldReasons
IOCTL_SERIAL_GET_PROPERTIES
La función
IOCTL_SERIAL_GET_MODEMSTATUS
La función
IOCTL_SERIAL_GET_HANDFLOW y IOCTL_SERIAL_SET_HANDFLOW
La función
El controlador debe admitir el siguiente bit de marca en el miembro de ControlHandshake:
- SERIAL_CTS_HANDSHAKE
El controlador debe admitir los siguientes bits de marca en el miembro FlowReplace:
- SERIAL_RTS_CONTROL
- SERIAL_RTS_HANDSHAKE
Un controlador que no admite un bit de marca determinado en el controlHandShake de
Como opción, un controlador puede admitir los XonLimit de
Ejemplos
Para definir un EvtSerCx2Control función de devolución de llamada, primero debe proporcionar una declaración de función que identifique el tipo de función de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.
Por ejemplo, para definir un EvtSerCx2Control función de devolución de llamada denominada MyControl
, use el tipo de función EVT_SERCX2_CONTROL, como se muestra en este ejemplo de código:
EVT_SERCX2_CONTROL MyControl;
A continuación, implemente la función de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
NTSTATUS
MyControl(
WDFDEVICE Device,
WDFREQUEST Request,
size_t OutputBufferLength,
size_t InputBufferLength,
ULONG IoControlCode
)
{...}
El tipo de función EVT_SERCX2_CONTROL se define en el archivo de encabezado Sercx.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función EVT_SERCX2_CONTROL en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, consulte Declaración de funciones mediante tipos de rol de función para controladores kmDF. Para obtener más información sobre Use_decl_annotations, vea Anotación del comportamiento de la función.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Disponible a partir de Windows 8.1. |
de la plataforma de destino de |
Escritorio |
encabezado de |
sercx.h |
irQL | Se llama a irQL <= DISPATCH_LEVEL. |