EVT_SERCX2_SET_WAIT_MASK回调函数 (sercx.h)
串行框架扩展版本 2 (SerCx2) 调用 EvtSerCx2SetWaitMask 事件回调函数,以配置串行控制器以监视等待掩码指定的一组硬件事件。
语法
EVT_SERCX2_SET_WAIT_MASK EvtSercx2SetWaitMask;
void EvtSercx2SetWaitMask(
[in] WDFDEVICE Device,
[in] WDFREQUEST Request,
[in] ULONG WaitMask
)
{...}
参数
[in] Device
表示串行控制器的框架设备对象的 WDFDEVICE 句柄。 串行控制器驱动程序在其 EvtDriverDeviceAdd 回调函数中创建此对象。 有关详细信息,请参阅 SerCx2InitializeDevice。
[in] Request
表示 IOCTL_SERIAL_SET_WAIT_MASK 请求的框架请求对象的 WDFREQUEST 句柄。
[in] WaitMask
新的等待掩码。 有关详细信息,请参阅“备注”。
返回值
无
备注
串行控制器驱动程序可以选择实现此函数。 如果实现,驱动程序将在调用 SerCx2InitializeDevice 方法时注册函数,该方法完成串行控制器的框架设备对象的初始化。
当 SerCx 收到来自客户端 的IOCTL_SERIAL_SET_WAIT_MASK 请求时,SerCx2 中的请求处理程序会调用 EvtSerCx2SetWaitMask 函数(如果已实现),以通知驱动程序等待掩码已更改。 如果等待掩码为非零值,驱动程序会立即开始监视新等待掩码中的事件,并放弃以前的 EvtSerCx2SetWaitMask 调用中可能已提供的任何旧等待掩码。 如果新的等待掩码为零,驱动程序只需放弃旧的等待掩码,并停止监视任何等待掩码事件。 有关可由等待掩码指定的事件类型的详细信息,请参阅 SERIAL_EV_XXX。
如果驱动程序未实现此函数,SerCx2 将失败所有 IOCTL_SERIAL_SET_WAIT_MASK 请求,并STATUS_NOT_SUPPORTED错误状态代码。
为了监视等待掩码中的事件, EvtSerCx2SetWaitMask 函数通常会为这些事件启用中断。 稍后,当检测到等待掩码中的事件时,串行控制器驱动程序会调用 SerCx2CompleteWait 方法来通知 SerCx2 该事件。
EvtSerCx2SetWaitMask 函数负责完成 Request 参数指向的IOCTL_SERIAL_SET_WAIT_MASK请求。 串行控制器驱动程序启用必要的中断后,它将调用 WdfRequestComplete 方法,并提供 Request 参数值和状态值作为输入参数,以指示请求是否成功。
在串行控制器驱动程序调用 WdfRequestComplete 以完成请求之前,驱动程序必须完成对 SerCx2CompleteWait 的任何调用,这些调用可能因旧等待掩码中的事件而挂起。
最初,在客户端打开到串行端口的逻辑连接之后,在第一个 EvtSerCx2SetWaitMask 调用之前,等待掩码实际上是零,并且串行控制器驱动程序不监视任何 SERIAL_EV_XXX 事件。
SerCx2 失败 IOCTL_SERIAL_SET_WAIT_MASK请求, 该请求具有包含以下任何 SERIAL_EV_XXX 事件标志的等待掩码:
- SERIAL_EV_PERR
- SERIAL_EV_RING
- SERIAL_EV_RXFLAG
如果实现, EvtSerCx2SetWaitMask 函数应支持以下事件标志:
- SERIAL_EV_CTS
- SERIAL_EV_BREAK
- SERIAL_EV_ERR
示例
若要定义 EvtSerCx2SetWaitMask 回调函数,必须首先提供一个函数声明,用于标识要定义的回调函数的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析、 静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,并且这是编写适用于 Windows 操作系统的驱动程序的要求。
例如,若要定义名为 MySetWaitmask
的 EvtSerCx2SetWaitMask 回调函数,请使用 EVT_SERCX2_SET_WAIT_MASK 函数类型,如以下代码示例所示:
EVT_SERCX2_SET_WAIT_MASK MySetWaitmask;
然后,按如下所示实现回调函数:
_Use_decl_annotations_
VOID
MySetWaitmask(
WDFDEVICE Device,
WDFREQUEST Request,
ULONG WaitMask
)
{...}
EVT_SERCX2_SET_WAIT_MASK函数类型在 Sercx.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations批注可确保使用应用于头文件中EVT_SERCX2_SET_WAIT_MASK函数类型的注释。 有关函数声明要求的详细信息,请参阅 使用 KMDF 驱动程序的函数角色类型声明函数。 有关 Use_decl_annotations的详细信息,请参阅 批注函数行为。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8.1开始可用。 |
目标平台 | 桌面 |
标头 | sercx.h |
IRQL | 在 IRQL <= DISPATCH_LEVEL 调用。 |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈