EVT_SERCX_CONTROL回调函数 (sercx.h)
EvtSerCxControl 事件回调函数处理 I/O 控制请求,该请求具有串行框架扩展 (SerCx) 支持的 I/O 控制代码(IOCTL)。
语法
EVT_SERCX_CONTROL EvtSercxControl;
NTSTATUS EvtSercxControl(
[in] WDFDEVICE Device,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
参数
[in] Device
表示串行控制器的框架设备对象的 WDFDEVICE 句柄。
[in] Request
表示 I/O 控件请求的框架请求对象的 WDFREQUEST 句柄。
[in] OutputBufferLength
指定由 Request 参数指定的 I/O 控制请求的输出缓冲区的长度(以字节为单位)。
[in] InputBufferLength
指定由 Request 参数指定的 I/O 控制请求的输入缓冲区的长度(以字节为单位)。
[in] IoControlCode
从 Request 参数指定的 I/O 控件请求中指定 IOCTL。
返回值
如果调用成功,则 EvtSerCxControl 函数返回STATUS_SUCCESS。 否则,它将返回适当的错误状态代码。 有关详细信息,请参阅以下“备注”部分。
言论
实现此回调函数需要串行控制器驱动程序。 SerCx 调用此函数,以便将 I/O 控制请求移交给控制器驱动程序进行处理。 在返回此函数之前,它必须通过执行请求的操作或返回错误状态来完成请求。 不实现对特定请求的支持的驱动程序应返回此请求的STATUS_NOT_IMPLEMENTED错误状态。
通常情况下,EvtSerCxControl 函数应在此函数更改串行控制器的硬件寄存器中的设置之前同步到控制器驱动程序的 ISR。
EvtSerCxControl 函数的返回值必须与此函数写入 I/O 控制请求的状态块的状态值匹配。 SerCx 使用返回值跟踪控制器驱动程序和串行控制器硬件的状态。
下面是此回调函数必须准备好处理的 IOCTL 列表:
IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTSIOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARSIOCTL_SERIAL_GET_COMMSTATUSIOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_HANDFLOWIOCTL_SERIAL_IMMEDIATE_CHARIOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_GET_MODEM_CONTROLIOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATSIOCTL_SERIAL_LSRMST_INSERTIOCTL_SERIAL_SET_BAUD_RATEIOCTL_SERIAL_SET_BREAK_OFFIOCTL_SERIAL_SET_BREAK_ONIOCTL_SERIAL_SET_CHARSIOCTL_SERIAL_SET_DTRIOCTL_SERIAL_SET_FIFO_CONTROLIOCTL_SERIAL_SET_HANDFLOWIOCTL_SERIAL_SET_LINE_CONTROLIOCTL_SERIAL_SET_MODEM_CONTROLIOCTL_SERIAL_SET_RTSIOCTL_SERIAL_SET_XOFFIOCTL_SERIAL_SET_XONIOCTL_SERIAL_XOFF_COUNTER若要注册 EvtSerCxControl 回调函数,控制器驱动程序会在 EvtDriverDeviceAdd 回调期间调用 SerCxInitialize 方法。
例子
此回调的函数类型在 Sercx.h 中声明,如下所示。
typedef NTSTATUS
EVT_SERCX_CONTROL(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
);
若要定义名为 MyEvtSerCxControl
的 EvtSerCxControl 回调函数,必须先提供 静态驱动程序验证程序(SDV)和其他验证工具所需的函数声明,如下所示。
EVT_SERCX_CONTROL MyEvtSerCxControl;
然后,按如下所示实现回调函数。
NTSTATUS
MyEvtSerCxControl(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
)
{ ... }
有关函数声明的 SDV 要求的详细信息,请参阅 使用 KMDF 驱动程序的函数角色类型声明函数。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 8 开始可用。 |
目标平台 | 桌面 |
标头 | sercx.h |
IRQL | 在 IRQL <调用 = DISPATCH_LEVEL |