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 函数的等待掩码永远不会包含上述列表中的任何事件标志。

如果实现, EvtSerCx2SetWaitMask 函数应支持以下事件标志:

  • SERIAL_EV_CTS
  • SERIAL_EV_BREAK
  • SERIAL_EV_ERR
此外,如果串行控制器 (DSR) 信号线的 数据集就绪则 EvtSerCx2SetWaitMask 函数应支持SERIAL_EV_DSR。 作为一个选项,驱动程序可以支持 SERIAL_EV_XXX 中所述的任何其他事件标志。 如果等待掩码指定驱动程序不支持的事件, 则 EvtSerCx2SetWaitMask 函数应使请求失败,并将请求中的状态值设置为STATUS_INVALID_PARAMETER。

示例

若要定义 EvtSerCx2SetWaitMask 回调函数,必须首先提供一个函数声明,用于标识要定义的回调函数的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,并且这是编写适用于 Windows 操作系统的驱动程序的要求。

例如,若要定义名为 MySetWaitmaskEvtSerCx2SetWaitMask 回调函数,请使用 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 调用。

另请参阅

EvtDriverDeviceAdd

IOCTL_SERIAL_SET_WAIT_MASK

SERIAL_EV_XXX

SerCx2CompleteWait

SerCx2InitializeDevice

WdfRequestComplete