IOCTL_SERIAL_PURGE IOCTL (ntddser.h)
IOCTL_SERIAL_PURGE请求取消指定的请求,并从指定的缓冲区中删除数据。 清除请求可用于取消所有读取请求和写入请求,以及从接收缓冲区和传输缓冲区中删除所有数据。
清除请求的完成并不指示清除请求取消的请求已完成。 在客户端释放或重用相应的 IRP 之前,客户端必须验证清除的请求是否已完成。
主要代码
输入缓冲区
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) |