EVT_SERCX_PURGE回调函数 (sercx.h)
EvtSerCxPurge 事件回调函数由串行框架扩展 (SerCx) 调用,以清除串行控制器的硬件缓冲区。
语法
EVT_SERCX_PURGE EvtSercxPurge;
NTSTATUS EvtSercxPurge(
[in] WDFDEVICE Device,
[in] ULONG PurgeMask
)
{...}
参数
[in] Device
表示串行控制器的框架设备对象的 WDFDEVICE 句柄。
[in] PurgeMask
描述要清除的硬件缓冲区的一组标志。 目前,没有为串行控制器执行的清除操作定义任何标志。 有关详细信息,请参阅“备注”。
返回值
如果调用成功,则 EvtSerCxPurge 函数返回STATUS_SUCCESS。 否则,它将返回适当的错误状态代码。
言论
串行控制器驱动程序实现此回调函数。 当客户端(应用程序或外围设备驱动程序)发送需要清除串行控制器管理的硬件缓冲区的 IOCTL_SERIAL_PURGE 控制请求时,SerCx 将调用此函数。
SerCx 执行由下表中列出的标志指定的清除操作。
标志位 | 意义 |
---|---|
SERIAL_PURGE_RXABORT | 清除所有读取请求。 |
SERIAL_PURGE_RXCLEAR | 清除输入缓冲区(如果存在)。 丢弃此缓冲区中的任何接收数据。 |
SERIAL_PURGE_TXABORT | 清除所有写入请求。 |
SERIAL_PURGE_TXCLEAR | 清除输出缓冲区(如果存在)。 丢弃此缓冲区中的任何传输数据。 |
EvtSerCxPurge 函数永远不会收到包含此表中任何标志的清除请求。 SERIAL_PURGE_XXX 标志在 Ntddser.h 头文件中定义。
目前,未定义SERIAL_PURGE_XXX 标志来指定串行控制器驱动程序执行的清除操作,串行控制器驱动程序在响应 EvtSerCxPurge 调用时,不应执行清除操作。
如果 IOCTL_SERIAL_PURGE 控制请求要求取消挂起的读取或写入请求,则 SerCx 会在调用 EvtSerCxPurge 函数之前取消这些请求。
若要注册 EvtSerCxPurge 回调函数,控制器驱动程序在 EvtDriverDeviceAdd 回调期间调用 SerCxInitialize 方法。
例子
此回调的函数类型在 Sercx.h 中声明,如下所示。
typedef NTSTATUS
EVT_SERCX_PURGE(
__in WDFDEVICE Device,
__in ULONG PurgeMask
);
若要定义 EvtSerCxPurge 名为 MyEvtSerCxPurge
的回调函数,必须先提供 静态驱动程序验证程序(SDV)和其他验证工具所需的函数声明,如下所示。
EVT_SERCX_PURGE MyEvtSerCxPurge;
然后,按如下所示实现回调函数。
NTSTATUS
MyEvtSerCxPurge(
__in WDFDEVICE Device,
__in ULONG PurgeMask
)
{ ... }
有关函数声明的 SDV 要求的详细信息,请参阅 使用 KMDF 驱动程序的函数角色类型声明函数。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 8 开始可用。 |
目标平台 | 桌面 |
标头 | sercx.h |
IRQL | 在 IRQL <调用 = DISPATCH_LEVEL |