EVT_SERCX2_SET_WAIT_MASK回调函数 (sercx.h)

EvtSerCx2SetWaitMask 事件回调函数由串行框架扩展版本 2 (SerCx2) 调用,以配置串行控制器以监视等待掩码指定的一组硬件事件。

语法

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 操作系统编写驱动程序的要求。

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