IOCTL_SERIAL_PURGE IOCTL (ntddser.h)

IOCTL_SERIAL_PURGE请求取消指定的请求,并从指定的缓冲区中删除数据。 清除请求可用于取消所有读取请求和写入请求,以及从接收缓冲区和传输缓冲区中删除所有数据。

清除请求的完成并不指示清除请求取消的请求已完成。 在客户端释放或重用相应的 IRP 之前,客户端必须验证清除的请求是否已完成。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

AssociatedIrp.SystemBuffer 成员指向客户端分配的 ULONG,该 ULONG 用于输入清除掩码。 客户端将清除掩码设置为以下一个或多个清除标志的按位 OR:

SERIAL_PURGE_RXABORT

    清除所有读取 (IRP_MJ_READ) 请求。

SERIAL_PURGE_RXCLEAR

    清除接收缓冲区(如果存在)。

SERIAL_PURGE_TXABORT

    清除所有写入 (IRP_MJ_WRITE) 请求。

SERIAL_PURGE_TXCLEAR

    清除传输缓冲区(如果存在)。

输入缓冲区长度

Parameters.DeviceIoControl.InputBufferLength 成员设置为 ULONG 的大小(以字节为单位)。

输出缓冲区

无。

输出缓冲区长度

无。

状态块

如果请求成功, 则信息 成员将设置为 ULONG 的大小(以字节为单位)。 否则, 信息 成员设置为零。

Status 成员设置为串行设备控制请求的一般状态值之一。 STATUS_INVALID_PARAMETER状态指示清除掩码无效。

注解

Serial.sys 和 SerCx 允许 IOCTL_SERIAL_PURGE 请求指定一个或多个 SERIAL_PURGE_XXX 标志的任意组合。 但是,SerCx2 的限制性更高。

SerCx2 要求在清除接收缓冲区时清除所有读取请求。 因此,如果在IOCTL_SERIAL_PURGE请求中设置了 SERIAL_PURGE_RXCLEAR 标志,则 SerCx2 I/O 请求队列不得包含任何读取请求,或者必须设置SERIAL_PURGE_RXABORT标志。 否则, IOCTL_SERIAL_PURGE 请求将失败并显示STATUS_INVALID_DEVICE_STATE状态代码。

同样,SerCx2 要求在清除传输缓冲区时清除所有写入请求。 因此,如果在IOCTL_SERIAL_PURGE请求中设置了 SERIAL_PURGE_TXCLEAR 标志,则 SerCx2 I/O 请求队列不得包含任何写入请求,或者必须设置SERIAL_PURGE_TXABORT标志。 否则, IOCTL_SERIAL_PURGE 请求将失败并显示STATUS_INVALID_DEVICE_STATE状态代码。

有关 SerCx2、SerCx 和 Serial.sys 的详细信息,请参阅 串行控制器驱动程序概述

要求

要求
Header ntddser.h (包括 Ntddser.h)